删了 100GB,账单却没降:OBS 里那两处"看不见"的空间
上周帮人看一个 OBS 的账单:桶里的对象数从两万多降到三千多,删除操作执行得干干净净,可容量和费用几乎没动。
查下来是两件事叠在一起——一件叫多版本控制,一件叫碎片。它们的共同点是:你删了东西,但它不是"对象",所以不出现在对象列表里,却照样占空间、照样计费。
这篇把这两处讲清楚,也给出确认和清理的办法。
一、开了多版本,删除只是"贴了张条"
OBS 的桶有一个「多版本控制」开关。开着的时候,每次覆盖上传都会留下旧版本,每次删除也不会真的抹掉数据,而是插入一个删除标记(Delete Marker)。
文件在你眼里消失了,原始数据还在桶里。计费按实际存储量算,所以该占的还占着。
版本 v1 report.xlsx 3MB ← 还在
版本 v2 report.xlsx 4MB ← 还在
删除标记 delete marker ← 你以为删掉了,其实是加了这一条
看到这里应该能明白为什么会"删了不降":你删的是"当前可见版本",而占空间的是所有历史版本。
确认的方法很直接:进桶的对象列表,把"显示历史版本"打开。如果每个对象下面都挂着好几个版本,那就是这个原因。
清理有两条路:
- 逐个指定版本删除。适合少量、明确的文件,注意别把要留的版本一起删掉。
- 让生命周期规则管。配一条"历史版本在 N 天后过期删除",之后就不用再手动收拾。这是长期方案,配一次管很久。
需要提醒的是:多版本不是坑,它是用来防误删的——删错了能捞回来。真正的问题往往是开了之后没人管历史版本,于是它变成了一个只进不出的抽屉。
二、碎片:上传没完成,钱已经花了
第二处更隐蔽:分段上传产生的碎片。
大文件(尤其是通过 SDK、工具上传的)通常不是一次性传完,而是切成若干段上传,全部传完再合并成一个对象。如果中间失败、超时、程序被中断,那些已经传上去的段会留在桶里。
它们没有名字、不在对象列表里、也不对应任何一个"文件",但在 OBS 里确实存着,按存储量计费。这类残留数据在文档里就叫碎片。
上传 plan.mp4
part 1 ✓ part 2 ✓ part 3 ✓ part 4 ✗ 中断
→ 没有合并成对象
→ part 1~3 变成碎片,占空间,看不见

确认方式:桶的管理页里有一个碎片入口(OBS Browser+ 里也有单独的"碎片管理"),能看到残留的分段上传任务和它们占用的空间。很多人的第一反应是"我桶里明明只有 3000 个对象",问题就在这——碎片不算对象。
清理同样是两条路:
- 手动清理(删除后不可恢复,清理前先确认没有正在进行中的上传任务)。
- 生命周期规则里配一条"碎片在 N 天后过期删除"。这条建议默认就配上:失败的上传没人会回来收拾,让它自动过期是最省心的。
三、为什么这两件事总被忽略
因为控制台的默认视图是"给人看的视图":只显示当前版本、只列对象。而计费看的是"实际占了多少字节"。
这两套口径之间,差着两样东西:历史版本、碎片。删对象这个动作,在默认视图里效果立竿见影,在计费口径上可能一点变化都没有。
还有一个放大器:批量删除脚本。跑一遍删几千个文件,看日志全成功,很容易就认定"已经清完了"。但如果桶开着多版本,脚本删掉的是当前版本,历史版本一个没动。
四、下次再遇到"删了不降",按这个顺序看

- 先看桶的多版本控制状态。开着的话,直接把对象列表切到"历史版本"视图,看总占用是不是主要压在旧版本上。
- 再看碎片。对象数很少、容量却很大,尤其是有过大文件上传失败的经历时,优先怀疑这里。
- 最后才怀疑缓存或统计延迟。OBS 的用量统计确实不是实时的,但通常不会差出一个数量级;如果差得离谱,多半是前两项。
顺手可以做的两件事:给历史版本配一条保留期(比如 30 天),给碎片配一条过期规则(比如 7 天)。这两条配完,桶就不会无声无息地长胖了。
收尾
对象存储里的"删除",跟本地磁盘上按 Delete 不是一回事。本地删文件是"把房间腾出来";对象存储删文件更像"在账本上再写一笔:这里没有了"——账本上的旧记录还在,也就还在按记录占的地方收费。
多版本和碎片,就是账本上最容易被忘掉的两类旧记录。它们不难处理,难的是想起来看一眼。
依据:华为云 OBS 用户指南中「多版本控制」(删除对象时插入删除标记,历史版本仍占用存储)与「清理碎片」(分段上传未完成产生的残留数据,支持手动清理与生命周期规则自动清理,删除不可恢复)两节;碎片与历史版本均按实际存储量计入存储费用。
- 点赞
- 收藏
- 关注作者

评论(0)