GCS对象迁移至Coldline存储类时报No space left on device错误如何解决
GCS存储桶迁移及存储类修改解决方案
1. 「No space left on device」报错修复
该报错核心是gsutil默认的跟踪文件存储目录(通常为系统临时目录/tmp)空间不足或无写入权限,按以下步骤处理:
- 先在本地创建一个剩余空间充足、当前用户有读写权限的目录,例如
mkdir -p ~/gsutil_tracker - 执行操作时通过参数临时指定跟踪目录即可,示例:
gsutil -o "GSUtil:state_dir=/home/你的用户名/gsutil_tracker" [其他操作参数] - 如需永久生效,可找到gsutil的
.boto配置文件(执行gsutil version -l可查看配置文件路径),修改state_dir配置项值为上述新建的目录路径。
2. 现有对象批量转换为Coldline存储类
已迁移到新桶的对象无需重新上传,可通过GCS内部rewrite操作直接修改存储类,命令如下:
gsutil -o "GSUtil:state_dir=/home/你的用户名/gsutil_tracker" -m rewrite -s coldline gs://目标桶名/**
- 其中
-m为开启并行处理,大幅提升大批量对象的处理速度 -s coldline指定目标存储类为Coldline**通配符匹配桶内所有层级的对象和子目录
执行完成后可通过gsutil ls -l gs://目标桶名/任意对象路径验证存储类是否修改成功。
3. 未迁移数据的最优迁移方案
剩余未迁移的数据无需使用GUI工具中转,可直接通过gsutil rsync一步完成迁移+存储类设置,无需二次修改:
本地文件夹迁移到GCS新桶
gsutil -o "GSUtil:state_dir=/home/你的用户名/gsutil_tracker" -m rsync -r -s coldline /本地待迁移大文件夹路径 gs://目标桶名/
旧GCS桶迁移到新GCS桶
gsutil -o "GSUtil:state_dir=/home/你的用户名/gsutil_tracker" -m rsync -r -s coldline gs://旧桶名/ gs://目标桶名/
该方式走GCS内部链路,不占用本地上行带宽,迁移速度远高于GUI工具。
4. 注意事项
- 操作前确认账号对目标桶拥有
storage.objects.setStorageClass、storage.objects.create、storage.objects.list权限,无权限可联系桶管理员开通 - Coldline存储类有90天的最小存储时长要求,如数据可能在90天内删除或修改,会产生额外的提前删除费用,提前确认符合业务使用场景
- 迁移完成后可执行
gsutil du -s gs://目标桶名/对比源数据容量,确认所有对象迁移完整
内容的提问来源于stack exchange,提问作者Christian Simpson
相关产品推荐
相关产品推荐

