本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解决数据验证的问题
默认情况下,Amazon DataSync 会在传输结束时验证数据完整性。使用以下信息来帮助诊断常见的验证错误和警告,例如文件在 DataSync 完成数据验证之前遭到修改或删除。
对于验证问题,除了看到的任务执行错误之外,有时查看 CloudWatch 日志(或任务报告)也有所帮助。DataSync 为增强模式任务提供 JSON 结构的日志,而基本模式任务的日志未结构化。
文件内容不匹配
当任务执行完毕后,您会看到以下错误:
Transfer and verification completed. Verification detected mismatches. Files with mismatches are listed in Cloud Watch Logs
在 CloudWatch 日志中,您可能会注意到源位置和目标位置之间因为不同的内容导致验证失败。如果在传输过程中修改了文件,就有可能出现这种情况。
例如,以下日志显示了 file1.txt 具有不同 mtime、srcHash 和 dstHash 值:
- 基本模式的日志示例
-
[NOTICE] Verification failed <> /directory1/directory2/file1.txt [NOTICE] /directory1/directory2/file1.txt srcMeta: type=R mode=0755 uid=65534 gid=65534 size=534528 atime=1633100003/684349800 mtime=1602647222/222919600extAttrsHash=0 [NOTICE] srcHash:0c506c26bd1e43bd3ac346734f1a9c16c4ad100d1b43c2903772ca894fd24e44[NOTICE] /directory1/directory2/file1.txt dstMeta: type=R mode=0755 uid=65534 gid=65534 size=511001 atime=1633100003/684349800 mtime=1633106855/859227500extAttrsHash=0 [NOTICE] dstHash:dbd798929f11a7c0201e97f7a61191a83b4e010a449dfc79fbb8233801067c46
在 DataSync 中,mtime 表示准备前最后一次写入文件的时间。在验证传输时,DataSync 会比较源位置和目标位置之间的 mtime 值。如果两个位置的文件的 mtime 不相同,就会产生这样的验证失败。srcHash 和 dstHash 之间存在差异表明两个位置的文件内容不匹配。
要采取的操作
执行以下操作:
-
使用 epoch 时间转换器,确定源文件或目标文件或对象最近是否遭到修改。这有助于确定最新版本。
-
为避免再次出现此错误,请将任务安排在维护时段内运行,此时源和目标处于不活动状态。
文件的 SMB 元数据不匹配
当任务执行完毕后,您会看到以下错误:
Transfer and verification completed. Verification detected mismatches. Files with mismatches are listed in Cloud Watch Logs
在支持服务器消息块(SMB)协议的存储系统之间传输时,如果源和目标的文件扩展 SMB 属性不匹配,则可能会看到此错误。
例如,以下日志显示两个位置的 file1.txt 具有不同的 extAttrsHash 值,这表明文件内容相同,但未在目标位置设置扩展属性:
- 基本模式的日志示例
-
[NOTICE] Verification failed <> /directory1/directory2/file1.txt [NOTICE] /directory1/directory2/file1.txt srcMeta: type=R mode=0755 uid=65534 gid=65534 size=1469752 atime=1631354985/174924200 mtime=1536995541/986211400 extAttrsHash=2272191894[NOTICE] srcHash: 38571d42b646ac8f4034b7518636b37dd0899c6fc03cdaa8369be6e81a1a2bb5 [NOTICE] /directory1/directory2/file1.txt dstMeta: type=R mode=0755 uid=65534 gid=65534 size=1469752 atime=1631354985/174924200 mtime=1536995541/986211400 extAttrsHash=3051150340[NOTICE] dstHash: 38571d42b646ac8f4034b7518636b37dd0899c6fc03cdaa8369be6e81a1a2bb5
您可能还会看到扩展属性的以下相关错误消息:
[ERROR] Deferred error: WriteFileExtAttr2 failed to setextattrlist(filename="/directory1/directory2/file1.txt"): Input/output error
要采取的操作
此错误通常发生在将访问控制列表(ACL)复制到目标的权限不足时。要解决此问题,请根据目标类型查看以下配置指南:
要传输的文件已不在源位置
当任务执行完毕后,您会看到以下错误:
Transfer and verification completed. Selected files transferred except for files skipped due to errors. If no skipped files are listed in Cloud Watch Logs, please contact AWS Support for further assistance.
在日志中,您可能会看到表明文件不在源位置的错误消息。如果文件(例如 file1.dll 和 file2.dll)在准备之后但在 DataSync 传输之前遭到删除,就会发生这种情况:
- 基本模式的日志示例
-
[ERROR] Failed to open source file /file1.dll: No such file or directory [ERROR] Failed to open source file /file2.dll: No such file or directory
要采取的操作
为避免出现这些情况,请将任务安排在源位置不活动时运行。
例如,您可以在用户和应用程序未积极操作该位置时,在维护时段内运行任务。
在某些情况下,您可能看不到此错误的相关日志。如果发生这种情况,请联系 Amazon Web Services 支持 中心
DataSync 无法验证目标数据
当任务执行完毕后,您会看到以下错误:
Transfer and verification completed. Verification detected mismatches. Files with mismatches are listed in Cloud Watch Logs
在日志中,您可能注意到 DataSync 无法验证目标位置中的某些文件夹或文件。这些错误可能如下所示:
- 基本模式的日志示例
-
[ERROR] Failed to read metadata for destination file /directory1/directory2/file1.txt: No such file or directory
对于文件,您可能会看到以下验证失败:
- 基本模式的日志示例
-
[NOTICE] Verification failed <> /directory1/directory2/file1.txt [NOTICE] /directory1/directory2/file1.txt srcMeta: type=R mode=0755 uid=65534 gid=65534 size=61533 atime=1633099987/747713800 mtime=1536995631/894267700 extAttrsHash=232104771 [NOTICE] srcHash: 1426fe40f669a7d36cca1b5329983df31a9aeff8eb9fe3ac885f26de2f8fff6b [NOTICE] /directory1/directory2/file1.txt dstMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=0/0 mtime=0/0 extAttrsHash=0 [NOTICE] dstHash: 0000000000000000000000000000000000000000000000000000000000000000
要采取的操作
这些日志表明,目标数据是在传输之后但在验证之前遭到删除。(在同一时间段内,将数据上传到源位置时的日志看起来很相似。)
为避免出现这些情况,请将任务安排在目标位置不活动时运行。
例如,您可以在用户和应用程序未积极操作该位置时,在维护时段内运行任务。
DataSync 无法读取对象元数据
当任务执行完毕后,您会看到以下错误:
Transfer and verification completed. Selected files transferred except for files skipped due to errors. If no skipped files are listed in Cloud Watch Logs, please contact AWS Support for further assistance.
在日志中,您可能会注意到,由于 Amazon S3 HeadObject 请求失败导致 DataSync 无法读取 file1.png。在任务准备和验证期间,DataSync 会向 S3 位置发出 HeadObject 请求。
- 基本模式的日志示例
-
[WARN] Failed to read metadata for file /file1.png: S3 Head Object Failed
要采取的操作
要解决此问题,请验证 DataSync 是否具有处理 S3 存储桶的适当权限级别:
-
确保 DataSync 用于访问 Amazon S3 位置的 IAM 角色允许
s3:GetObject权限。有关更多信息,请参阅 所需的权限。 -
如果 S3 存储桶使用服务器端加密,请确保允许 DataSync 访问该存储桶中的对象。有关更多信息,请参阅 使用服务器端加密访问 S3 存储桶。
对象的系统定义元数据不匹配
在 S3 存储桶之间的增强模式任务执行完毕后,您会看到以下错误:
Verification failed due to a difference in metadata
您可能会在日志中注意到,对象的 Amazon S3 系统定义元数据不匹配。在这一特定示例中,源对象没有 Content-Type 元数据,但目标对象有。出现这种情况的原因是,当 DataSync 进行传输时,目标 S3 存储桶会自动将 "ContentType":
"application/octet-stream" 元数据应用于该对象。
- 增强模式的日志示例
-
{ "Action": "VERIFY", "Source": { "LocationId": "loc-0b3017fc4ba4a2d8d", "RelativePath": "encoding/content-null", "Metadata": { "Type": "Object", "ContentSize": 24, "LastModified": "2024-12-23T15:48:15Z", "S3": { "SystemMetadata": { "ETag": "\"68b9c323bb846841ee491481f576ed4a\"" }, "UserMetadata": {}, "Tags": {} } } }, "Destination": { "LocationId": "loc-abcdef01234567890", "RelativePath": "encoding/content-null", "Metadata": { "Type": "Object", "ContentSize": 24, "LastModified": "2024-12-23T16:00:03Z", "S3": { "SystemMetadata": { "ContentType": "application/octet-stream", "ETag": "\"68b9c323bb846841ee491481f576ed4a\"" }, "UserMetadata": { "file-mtime": "1734968895000" }, "Tags": {} } } }, "TransferType": "CONTENT_AND_METADATA", "ErrorCode": "MetadataDiffers", "ErrorDetail": "Verification failed due to a difference in metadata" }
要采取的操作
为避免出现此错误,请将源位置对象更新为包含 Content-Type 元数据属性。
了解数据验证时间
DataSync 验证包括所有文件内容的 SHA256 校验和,以及各位置文件元数据的精确比较。验证所需的时间取决于多种因素,包括所涉及的文件或对象数量、存储系统中的数据大小以及存储系统性能。
要采取的操作
考虑到可能影响验证时间的因素,您无需执行任何操作。但是,如果任务执行看起来卡在了验证状态,请联系 Amazon Web Services 支持 中心