七牛云对象存储使用 qshell 批量管理文件存储类型(实战教程)
一、适用场景说明
本教程适用于以下典型场景:
- 存储桶中存在 低频 / 智能分层 / 归档 / 归档直读 / 深度归档 文件
- 需要 批量解冻深度归档文件
- 解冻完成后,统一转回标准存储
- 文件数量较多(几千~几十万)
- 需要 可恢复、可记录、可重试 的 CLI 操作方案
二、前置条件
1️⃣ 准备 qshell
下载地址:https://github.com/qiniu/qshell/releases
chmod +x qshell
确认版本(建议记录):
./qshell version
root@ubuntu:~# ./qshell version
v2.17.0
root@ubuntu:~#
2️⃣ 七牛云 AccessKey / SecretKey
确保账号具备以下权限(至少):
- 对象存储 Bucket 管理权限
- 文件解冻
- 文件存储类型变更
三、qshell 鉴权配置
命令格式
./qshell account <AK> <SK> <AccountName>
成功后配置会写入:
~/.qshell/account.json
四、导出非标准存储对象清单
存储类型枚举值(非常重要)
| FileType | 含义 |
|---|---|
| 0 | 标准存储 |
| 1 | 低频存储 |
| 2 | 归档存储 |
| 3 | 深度归档存储 |
| 4 | 归档直读 |
| 5 | 智能分层 |
导出所有非标准存储对象
./qshell listbucket2 <Bucket> \
--file-types 1,2,3,4,5 \
--show-fields Key,FileType \
-o non_standard_objects.tsv
输出示例(TSV):
1721127498013.0708.MOV 3
2024-07-05-6686ca2981a6d.jpg 3
xxx.pdf 2
五、筛选“深度归档”文件 Key 列表
只保留 FileType = 3(深度归档)
awk -F'\t' '$2==3 {print $1}' non_standard_objects.tsv > deep_archive_keys.txt
检查数量:
wc -l deep_archive_keys.txt
六、解冻深度归档存储(batchrestorear)
命令说明
qshell batchrestorear <Bucket> <FreezeAfterDays>
- FreezeAfterDays:解冻后保持可访问天数(1–7)
- 输入文件:仅包含 Key,一行一个
- 支持断点记录、失败重试
解冻命令(推荐生产参数)
./qshell batchrestorear <Bucket> 7 \
-i deep_archive_keys.txt \
-y \
--enable-record \
-s deep_restore_success.txt \
-e deep_restore_failure.txt
⚠️ 解冻是异步的,通常需要:
- 归档:分钟级
- 深度归档:数小时
七、确认解冻状态
单文件验证(可选)
./qshell stat <Bucket> 1721127498013.0708.MOV
是否“真的可转标准”,以控制台是否允许修改为准
八、解冻后 → 转换为标准存储(关键步骤)
⚠️ 重要说明(本次问题核心)
你当前 qshell 版本中:
batchchtype 的输入文件必须是:Key + 目标 FileType 的映射文件
而不是只写 Key。
1️⃣ 构造 Key → 标准存储(0)映射文件
awk '{print $0 "\t0"}' deep_archive_keys.txt > deep_archive_to_standard.tsv
文件示例:
1721127498013.0708.MOV 0
2024-07-05-6686ca2981a6d.jpg 0
分隔符必须是 TAB
2️⃣ 执行批量转换存储类型
./qshell batchchtype <Bucket> \
-i deep_archive_to_standard.tsv \
-y \
--enable-record \
-s ch_type_success.txt \
-e ch_type_failure.txt
九、验证转换结果
./qshell stat <Bucket> 1721127498013.0708.MOV
期望结果:
FileType: 0 -> 标准存储
控制台中“存储类型”显示为:标准存储
十、常见错误与排查
❌ 报错:need more than one param
原因:
- batchchtype 输入文件中只有 Key
- 缺少目标 FileType 列
解决:
Key<TAB>0
❌ batchrestorear 卡住 / Total=0
原因:
- 输入文件方式错误
- 未使用 -i
- 误用 stdin
解决:
始终使用:
-i file.txt
十一、推荐生产实践
- ✔ 使用 –enable-record
- ✔ 保留 success / failure 文件
- ✔ 转换完成后调整生命周期规则,避免再次转归档
- ✔ 大批量(>10 万)建议拆批执行
十二、流程总结(一句话版)
listbucket2 → 筛选深度归档 → batchrestorear 解冻 →构造 Key+0 映射 → batchchtype 转标准 → stat 校验
文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/12360
