问题描述
使用ossfs将阿里云对象存储OSS的存储空间(Bucket)挂载到Linux系统中,在进行数据拷贝时提示“Input/output error”错误。
问题原因
该报错是捕获到系统磁盘的错误而产生的报错,可以查看出现报错时磁盘读写是否存在高负载的情况。例如,在对一个比较大的文件进行拷贝操作时,使磁盘读写处于非常高的负载状态,从而产生报错。
解决方案
请参见以下操作进行处理:
使用
ossfs -h命令,查看分片参数,增加分片参数,控制文件读写。说明parallel_count:以分片模式上传大文件时,分片的并发数,默认值为5。
multipart_size:以分片模式上传数据时分片的大小,单位是MB,默认值为10。该参数会影响最大支持的文件大小。分片模式上传时,最多的分片数为10000,默认值下,最大的支持文件为100 GB。如果需要支持更大的文件,需要根据需求调整这个值。
推荐将
parallel_count设为 32(默认值为 5),将multipart_size设为 16(默认值为 10 MB,即增大分片大小),可有效降低大文件拷贝时因磁盘高负载导致的“Input/output error”报错概率。完整挂载命令示例如下:ossfs your-bucket /your/mountpoint -ourl=your-endpoint -o parallel_count=32 -o multipart_size=16 -o dbglevel=debug如果调整参数后问题仍未解决,请按以下步骤排查:
执行
umount命令卸载已挂载的 Bucket,重新挂载时添加-o dbglevel=debug参数开启调试日志。开启后,日志级别由 [CRT] 变为 [DBG],可输出 curl 连接信息和 handler pool 状态等调试详情。确认挂载命令中的 Endpoint(即
-ourl参数指定的地址)配置正确,Endpoint 需与 Bucket 所在地域匹配。查看调试日志中的 curl 连接信息和 handler pool 状态,判断是否存在连接异常或线程池资源不足的情况。
ossfs不适合大文件拷贝、高并发读写场景,限制较多,详情请参见ossfs使用限制。如果您想要将OSS文件下载到ECS实例中,或者从本地ECS实例上传文件到OSS中,可以通过ossutil的分片上传、下载进行操作,详情请参见ossutil上传、下载、拷贝文件的方法。
适用于
对象存储OSS