DeleteMarker 是对象存储 OSS 版本控制功能中的删除标记对象。在启用版本控制的存储空间(Bucket)中删除对象时,OSS 会插入一个 DeleteMarker 作为对象的当前版本,原对象的所有历史版本仍被保留。删除 DeleteMarker 将使对象恢复为可访问状态,最新的非删除标记版本将成为对象的当前版本。
全量删除所有DeleteMarker
若您需要清理Bucket中的所有DeleteMarker,请参考如下步骤。
步骤1:执行全量恢复
# 恢复整个Bucket中所有被DeleteMarker隐藏的对象
ossutil revert oss://dest-bucket/ HEAD~0 -r -f参数说明:
HEAD~0:恢复到最近的有效版本(如果最新版本是DeleteMarker,则删除DeleteMarker进行恢复)-r:递归处理整个Bucket下的所有对象-f:强制执行,不提示确认
返回结果示例:
Success: Total 100 objects, Revert done:(100 objects)
0. xxx(s) elapsed步骤2:验证删除结果
# 确认DeleteMarker已全部删除
ossutil ls oss://dest-bucket/ --all-versions -r | grep "true.*true" | wc -l
# 应输出 0
# 查看恢复的对象数量
ossutil ls oss://dest-bucket/ -r | grep "Object Number"按列表精准删除DeleteMarker
目标Bucket有多种删除来源,需要精准删除指定DeleteMarker。适合Bucket中既有复制产生的DeleteMarker,也有手动删除产生的DeleteMarker的情况。请确保使用ossutil 2.2.1 或更高版本。
步骤1:准备DeleteMarker列表文件
创建文件 deletemarker_list.txt,每行一个需要恢复的对象路径:
data/report-2024-12.xlsx
images/product/banner.jpg
backup/database/
logs/2024/12/app.log列表格式说明:
每行一个对象路径,相对于Bucket根目录
不包含
oss://bucket-name/前缀目录对象以
/结尾
步骤2:执行恢复操作
列表文件deletemarker_list.txt中包含目录对象(以 / 结尾),ossutil命令中必须添加参数--support-dir-object。
第一步:查看列表中有哪些对象在OSS中已存在
./ossutil ls oss://dest-bucket/ -r --files-from deletemarker_list.txt --support-dir-object第二步:恢复删除的对象
./ossutil revert oss://dest-bucket/ HEAD~0 -f -r --files-from deletemarker_list.txt --support-dir-object第三步:验证恢复结果
再次执行第一步命令,对比文件个数是否与 deletemarker_list.txt 中的记录完全一致:
./ossutil ls oss://dest-bucket/ -r --files-from deletemarker_list.txt --support-dir-object | grep "Object Number is:" | cut -d":" -f2
wc -l deletemarker_list.txt两个数字一致则代表全部恢复成功。
可选:后台执行命令(避免网络中断)
如果对象数量较多,可以后台执行:
# 1. 创建脚本文件
cat > revert.sh << 'EOF'
#!/bin/bash
./ossutil revert oss://dest-bucket/ HEAD~0 -f -r --files-from deletemarker_list.txt --support-dir-object
EOF
# 2. 授权为可执行文件
chmod +x revert.sh
# 3. 后台执行命令
nohup ./revert.sh &
# 4. 查看执行进度(输出保存在 nohup.out 文件中)
tail -f nohup.out该文章对您有帮助吗?