对象存储分段残留导致空间占用问题

20 篇文章 0 订阅

概述

在使用对象存储时,为了方便大文件上传和提高上传效率、并发等等,经常会使用s3 multipart upload,也就是分段上传。我们知道分段上传一般分三个不分,init、upload part和complete。
根据gc池原理,当在upload part调用abort multipart接口,取消分段上传,已经上传的分段会进入gc,慢慢回收释放空间。
由于index-pool的异步结构,以及在分段上传过程中发生异常中断,都可能会导致分段对象残留在rados pool层中,从而占用很大空间。
根据实际生产场景,某些实际object对象只有500G的桶存储池额外占用可能达到5T甚至更多。
如果这种分段仍被底层记录,可以查到分段id,是可以取消上传,让这些分片进入gc。如果这些分段已经不在底层记录中,这些_multipart对象是没法通过分段abort清理的,需要额外底层手段(此处先不赘述)。

abort multipart

在理解了分段上传逻辑和碎片产生逻辑后,不难理解,对底层来说,即发送一个请求,告知对应的分段上传已被取消,这样底层会让这些part从data pool正常进入gc pool。
无论使用s3cmd亦或是sdk中的abortmultipart接口都可以清理,这里以s3cmd为例。
具体操作如下:

列出桶当前所有的分段上传

s3cmd mlutipart s3://bucket-name

会返回3列分别问init时间,path和id,其中path和id下一步需要用到

查询某个分段具体的未完成的分段id

s3cmd listmp  id s3://bucket-name/key-字符后缀(对应上一条命令返回的id和path)

可以看到这个分段具体还有哪些part残留,每个part都有一个part-id

取消分段

s3cmd abortmp part-id

底层查询对象数和存储池占用,确认完成清理

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值