背景:针对使用 oss 工具出现疑问的用户,将自己经常遇到的问题解法 share 一下。
请大家在解决问题之前先做下必要的核对工作
- 是否是官网的最新版本 https://help.aliyun.com/document_detail/50452.html?spm=5176.doc31935.6.1056.TcGyZr。
- 使用 oss 工具下载服务端文件时如果出现异常,可以先尝试 curl 下远端的文件看是否正常(curl -svo /dev/null http://object )
- 如果是 ossimport 工具使用出现问题,请先按照 https://help.aliyun.com/document_detail/56990.html?spm=5176.product31815.6.1063.1AEmbe 确认自己的配置文件选项是符合业务情况且正确的。
- 使用 oss 工具异常时一般会有明显的 message 和 requestID 回显在终端上,除非建联失败的情况下是没有 requestID 。拿到的 message 后可以到 help.aliyun.com 通过关键字检索答案,如果排查困难可以提交阿里云售后,将异常信息和能获取到的 requestID 反馈对方排查。
- 如果遇到 SDK 、API、操作出现问题,可以先是用 ossutil 工具来测试是否可以正常操作,以排除是 oss 服务端问题还是 SDK、API 代码写的问题。
一、ossimport 单机/集群 版本出现异常
- 优先按照 https://help.aliyun.com/document_detail/56990.html?spm=5176.product31815.6.1063.1AEmbe 检查配置文件是否服务业务场景且正确无误。
- 单机版的情况,一个 ECS 上只有一个 worker ,但是拆分成多个 task 对应的多线程进行文件迁移,而且注意不需要配置 workers 文件。
- 集群版本的注意要配置配置 workers ip 文件,而且第一行要填写 master ip 然后是 slave ip。
- ossimport 没有进度条功能,终端上输出的内容就带有完成的任务数,或者通过我们的 logs/import.log 日志 查看当前上传情况。
- ossimport 迁移的 object 中不要带有空格,比如(bucket/dir/ haoting.mp3)
ossimport 迁移中出现 overlappinglockfileexception
A:出现这种问题,基本都是由于线程数量较多,master 进程对文件扫描的过快导致,但不会影响 ossimport 迁移,目前新版本中已经隐掉了该问题。
ossimport 多个迁移项目任务一起跑,原来的进程被踢掉
A:ossimport 工具单机版只能有一个 worker 进程,多个线程的方式迁移,启动多个脚本是不可以的,需要迁移多个项目,可以采用分布式版本的,将任务下发到不同的机器 worker 中执行。
ossimport 出现 workips empty
A:出现这种问题,先确认使用的是单机版还是集群版,如果是分布式版本,如果是单机版,请查看是否存在 workers 的这文件,如果存在删除掉,单机版不会有这个文件。如果是分布式版本,请检查自己的 workers 文件中是否配置了 master IP。
二、ossutil 工具使用异常
- 保证工具的版本是最新的。
- 使用 ossutil 工具操作 oss 文件时可以增加 --retry-time 选项增加重试机制。
- 使用 ossutil 解冻文件时,如果文件出现异常,可以优先使用 stat 选项查看文件的状态。
- 异常时排查困难,请保留好异常 message 和 requestID 反馈给阿里云客服人员。
ossutil 工具上传中发现,有 skip 的情况,而且使用 -u 参数后 OSS 的文件没有被更新。
A:出现 skip ,由于之前操作的是同名文件,加 -u 后,强制更新了文件,跳过了更新的过程。
如果怀疑文件没有被更新,可以先固定 OSS 端下载文件,然后和本地的 MD5 值比对,如果 MD5 值一致则证明文件被更新,如果文件 MD5 值不一致则
文件没有更新。
测试命令如下
./ossutil64 cp -u -r -f aa.test oss://bucket --access-key-secret=xxx --access-key-id=xx
测试 OSS MD5 : curl -v http://oss资源/xxx | md5sum
ossutil 操作解冻文件出现 403
如图在操作解冻文件的过程中出现 403,可能与以下几个原因有关系
1)使用的子账号操作文件,权限不够。需要看是用的是 STS 操作还是直接用 RAM 子账户操作,核实好对应的 oss 读写权限。
2)用户的文件是违禁内容被封禁掉了
1)使用的子账号操作文件,权限不够。需要看是用的是 STS 操作还是直接用 RAM 子账户操作,核实好对应的 oss 读写权限。
2)用户的文件是违禁内容被封禁掉了
3)用户的文件可能是归档的文件不可以直接被访问。
ossutil cp 文件时出现 403 会中断
这种现象是正常的,工具在设计之初就是考虑到如果文件遇到 403 的话,代表没有权限操作该文件,那么通过该账号下的其他文件也操作不了,所以就会中断退出
这种现象是正常的,工具在设计之初就是考虑到如果文件遇到 403 的话,代表没有权限操作该文件,那么通过该账号下的其他文件也操作不了,所以就会中断退出
ossutil 解冻文件出现 400
1)使用 stat 选项看一下文件的状态是否是已经解冻了,如果以及解冻再次操作,就会出现 400
三、ossfs 使用问题:
- ossfs 的报错都会有明显的 message,需要收集到这些 message,根据 message 判断是否直接看出问题,比如 socket 建联失败,或者响应的状态码 4XX 5XX 等,一般 403 是权限问题被 deny ,400 是用户的操作方法有误,5xx 一般和网络抖动以及服务端业务有关系,遇到 5xx 如果长时间无法恢复,需要反馈到阿里云客服,看下是否服务故障。
- 如果使用 ossfs 发现性能很差,建议替换使用 ossutil,应为 ossfs 是将远端的 OSS 挂载到本地磁盘,如果对业务性能敏感性很高的业务,不建议使用 ossfs ,而且该工具也不是原子性,存在本地操作成功,但 oss 远端操作失败的风险。
- 如果发现 ossfs 在 ls 目录文件时很慢,可以增加调优参数 通过 -omax_stat_cache_size=xxx 参数增大 stat cache 的 size,这样第一次 ls 会较慢,但是后续的 ls 就快了
安装 ossfs fuse 出现报错。
出现这种问题都是 fuse 的版本不满足 ossfs 的要求,2.8.3 的都不行,直接去 fuse 链接上下载最新版本的编译安装,不要用 yum, yum 安装的都不是新版
参考链接:https://github.com/libfuse/libfuse
参考链接:https://github.com/libfuse/libfuse
ossfs 使用中出现 Input/output error
ossfs 与 rsync 同步使用会出现问题,而且用户对一个 141G 的文件进行 CP 操作,对 OSSFS 本身的磁盘读写比就是一个挑战,
如果想要将 OSS 下载到本地 ECS ,或者本地上传到 ECS ,可以通过 OSSUNTIL 的分片上传、下载进行操作。
如果想要将 OSS 下载到本地 ECS ,或者本地上传到 ECS ,可以通过 OSSUNTIL 的分片上传、下载进行操作。
四、ossftp 使用问题
1、由于 OSSFTP 是串行,而且是 FTPCLIET->FTPSERVER->OSS SERVER 两段操作性能无法保证,已经和客户沟通,推荐使用 ossutil ,链接:https://help.aliyun.com/document_detail/50452.html?spm=5176.doc31935.6.1032.YMtcGp'1、由于' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
2、OSSFTP 是 Python 编写,只能跑在单核上,并不是并发多核心处理任务,所以针对大文件 IO 操作时无法保证性能。
或批处理文件。
2、OSSFTP 是 Python 编写,只能跑在单核上,并不是并发多核心处理任务,所以针对大文件 IO 操作时无法保证性能。