阿里云首页

使用数据迁移工具ossimport迁移OSS资源失败的解决方法

问题描述

使用阿里云对象存储OSS时,将任意地域的本地存储数据、第三方存储数据、对象存储OSS数据迁移至任意地域的OSS中可以使用ossimport工具。本文介绍运用数据迁移工具ossimport迁移OSS资源失败的报错原因及解决方案。

问题原因

使用ossimport迁移失败的常见原因有以下几个:

  • 上传过程中源目录的文件发生了修改,log/audit.log里会提示SIZE_NOT_MATCH相关字样的错误,这种情况下老的文件已经上传成功,新的修改没有上传到OSS。
  • 源文件在上传过程中被删除,导致迁移失败。
  • 源文件名不符合OSS命名规范(不能以/开头,不能为空),导致上传到OSS失败。
  • 因网络异常、账号权限不足等原因导致的下载数据源文件失败,可查看logs/ossimport2.loglogs/import.log确定错误原因。
  • 程序异常退出,任务状态为Abort 。这种情况请联系阿里云技术支持。

解决方案

当迁移失败时,执行bash console.sh stat命令查看迁移任务的状态,如果JobState为failed,则迁移任务失败,请查看迁移失败的日志,根据日志中的报错信息参见以下内容进行解决,您可以在解决这些问题后使用retry命令进行重试:

说明:OSS迁移失败的日志路径为master/jobs/[$JobName]/failed_tasks/[$TaskName]/audit.log

  • [$JobName]:任务名字,字符串。
  • [$TaskName]:Task名称。
错误码 错误信息 报错原因 解决方案
AccessDenied The bucket you are attempting to access must be addressed using the specified endpoint srcDomaindestDomain填写错误。

请按照域名列表填写正确的Endpoint。

SignatureDoesNotMatch The request signature we calculated does not match the signature you provided

destAccessKeydestSecretKey有误。

请填写正确的AK信息。
The bucket name “xxx/xx” is invalid

配置项destBucket填写不正确。

检查配置项destBucket是否填写正确,Bucket名称是不带正斜线(/)以及路径的。
ConnectionTimeout Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out

这个是连接超时的报错,通常原因是迁移用的设备非ECS实例或不是与OSS同地域的ECS实例,但是配置文件使用了OSS的内网域名。OSS内网域名仅支持同地域ECS实例访问。

该问题可以通过以下方法解决:

  • 修改配置文件中域名为外网Endpoint,清除任务后重新提交任务。
  • 使用与OSS同地域的ECS实例运行迁移任务。
InvalidBucketName The specified bucket is not valid

配置文件里的destDomian配置的域名是Bucket所在地域的Endpoint地址,而不是带Bucket名称的二级域名。

填写正确的Bucket所在地域的Endpoint地址,例如Bucket在华北2(北京),应填写oss-cn-beijing.aliyuncs.com。详情请参见配置文件示例
RequestTimeTooSkewed Unable to execute HTTP request: The Difference between … is too large

该报错可能是以下情况导致:

  • 本地机器时间不对,与OSS服务器时间相差15分钟以上,该情况居多。
  • 可能是并发太高,尤其是CPU占用率很高,导致并发上传慢。

该问题可以通过以下方法解决:

  • 修改本地时间,与OSS服务器一致。
  • 如果是并发问题,可以调整并发。您可以将sys.properties文件的workerTaskThreadNum参数值改小。
The object key “/xxxxx.jpg” is invalid

该报错可能是以下情况导致:

  • srcPrefix作为目录但没有以正斜线(/)结尾。
  • destPrefix以正斜线(/)或者反斜线(\)开头。

该问题可以通过以下方法解决:

  • 检查srcPrefix是否是作为目录但没有以正斜线(/)结尾。如果是目录,请以正斜线(/)结尾。
  • 检查destPrefix是否以正斜线(/)或者反斜线(\)开头。如果是,请删除正斜线(/)或反斜线(\),destPrefix不能以正斜线(/)或反斜线(\)开头。
No route to host

这种情况一般是本地防火墙或者iptables等原因导致网络不通。

通过ping命令测试迁移服务器到源端和目的端网络是否正常。
  • 若网络正常,可检查电脑防火墙和本地的防火墙设备是否有限制,可尝试关闭防火墙测试。
  • 若网络异常,排查原因并处理后重试。
Unknown http list file format

使用HTTP模式迁移时,该问题是因为指定的HTTP列表文件格式不对或内容不符合规范。

该问题可以通过以下方法解决:

  • 如果是从其它操作系统上拷过来的文件,Linux系统可以用mac2unix、dos2unix等相关命令转换文件格式;Windows系统可以使用转换工具转换格式。
  • 如果是列表文件内容的格式不正确,请修改为正确的格式。列表文件内容的格式请参见列表文件

更多信息

部分文件迁移失败后反复重试都无法成功迁移的解决方案:

  1. 查看迁移失败文件列表master/jobs/[$JobName]/failed_tasks/[$TaskName]/error.list,获取失败文件的相对路径。
  2. 确认是否有这部分文件的权限访问、文件是否被删除、是否是软链接文件、文件名是否存在乱码等。
  3. 解决以上问题后,使用retry命令进行重试。

适用于

  • 对象存储OSS
  • ossimport
首页 使用数据迁移工具ossimport迁移OSS资源失败的解决方法