TOS 存储空间问题分析

问题描述

在控制台看到桶存储量很大,例如存储量为60GB,但是查看桶中对象,却看到并没有60G,如何查询桶中存储量大的原因?

问题分析

如果存储桶占用量大,但控制台又看不到相对应数据量的对象,可能有两方面导致存储量很大:

  1. 桶开启了版本控制,相同对象存在很多版本。
  2. 存在很多没有完成的分段上传。
解决方案

1.控制台用量概览中查看存储量为60G(开启了版本控制),如下:

image

2.使用aws s3 ls查看目前存储桶当前版本的容量

┌──(root)-[/etc/sysctl.d]
└─# aws s3 ls s3://xxxx --recursive --human-readable --summarize --endpoint-url=http://tos-s3-cn-beijing.volces.com
2021-08-12 11:29:31   2.3 MiB Mac.ssf
2021-10-09 10:45:30 194.2 KiB alb1.pcap
2021-09-24 15:52:49   2.1 KiB go.sum
2021-10-08 15:02:06   9.0 KiB images.jpeg
2021-09-24 15:37:16   0 Bytes root/Project/Test/go.sum
2021-09-07 18:18:31 181 Bytes test.py
2021-08-16 15:31:10 181 Bytes test1.py
2021-10-18 14:29:36   0 Bytes test1/
 
Total Objects: 8
  Total Size: 2.5 MiB

可以看到当前版本的对象很少,所以可以进行初步判断,可能不是由于当前对象版本过多导致的。(因为对象很小的情况下,版本再多,通常情况下,不会差出太多)

3.使用aws s3api list-object-versions 查看所有版本对象:

┌──(root)-[/etc/sysctl.d]
└─# aws s3api list-object-versions --bucket xxxx  --endpoint-url=http://tos-s3-cn-beijing.volces.com              
 
.....
 
"DeleteMarkers": [
       {
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           },
           "Key": "delete/",
           "VersionId": "582F365CF24628B74DAC",
           "IsLatest": true,
           "LastModified": "2021-10-16T18:30:46.000Z"
       },
       {
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           },
           "Key": "delete/海贼王.ssf",
           "VersionId": "582F365CF2449359CD96",
           "IsLatest": true,
           "LastModified": "2021-10-16T18:30:46.000Z"
       },
       {
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           },
           "Key": "dns.pcap",
           "VersionId": "58435CE5B64399587F8D",
           "IsLatest": true,
           "LastModified": "2021-08-12T02:59:38.000Z"
       },
       {
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           },
           "Key": "test.raw",
           "VersionId": "58432A19201440FFA8D3",
           "IsLatest": true,
           "LastModified": "2021-08-12T18:30:32.000Z"
       },
       {
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           },
           "Key": "test/alb1.pcap",
           "VersionId": "58432A1A3CB5BB04CC21",
           "IsLatest": true,
           "LastModified": "2021-08-12T18:30:28.000Z"
       }

我们可以看到在delete-marker(开启了版本控制的桶,使用简单删除删除一个对象后,对象会变为上一个版本,同时会添加一个delete-marker为当前版本,这就是delete-marker)中存在我们控制台中(或者aws s3 ls查看当前版本的结果)不存在的对象,test.raw,而且delete-marker为当前版本,接下来我们验证这个对象。

4.再通过aws s3api list-object-versions 查看所有版本的对象,验证是否test.raw存在多个之前版本的对象:

┌──(root)-[/etc/sysctl.d]
└─# aws s3api list-object-versions --bucket xxxx  --endpoint-url=http://tos-s3-cn-beijing.volces.com
 
......
 
{
           "ETag": "\"1f70745c8e0f8c58c665ca2854c4d333-2560\"",
           "Size": 21474836480,
           "StorageClass": "STANDARD",
           "Key": "test.raw",
           "VersionId": "584399F02F67B1D94C3A",
           "IsLatest": false,
           "LastModified": "2021-08-11T08:21:03.000Z",
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           }
       },
       {
           "ETag": "\"1f70745c8e0f8c58c665ca2854c4d333-2560\"",
           "Size": 21474836480,
           "StorageClass": "STANDARD",
           "Key": "test.raw",
           "VersionId": "5843F07E7484F2A15A4B",
           "IsLatest": false,
           "LastModified": "2021-08-10T05:54:54.000Z",
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           }
       },
       {
           "ETag": "\"1f70745c8e0f8c58c665ca2854c4d333-2560\"",
           "Size": 21474836480,
           "StorageClass": "STANDARD",
           "Key": "test.raw",
           "VersionId": "5843F11B0CBCFADB5E44",
           "IsLatest": false,
           "LastModified": "2021-08-10T05:43:41.000Z",
           "Owner": {
               "DisplayName": "2100046944",
               "ID": "2100046944"
           }
       }

5.然后,查看其中一个版本对象的大小,使用 aws s3api head-object,如下:

┌──(root)-[/etc/sysctl.d]
└─# aws s3api head-object --bucket xxxx --key test.raw --version-id 5843F11B0CBCFADB5E44   --endpoint-url=http://tos-s3-cn-beijing.volces.com
{
   "AcceptRanges": "bytes",
   "LastModified": "Tue, 10 Aug 2021 05:43:41 GMT",
   "ContentLength": 21474836480,
   "ETag": "\"1f70745c8e0f8c58c665ca2854c4d333-2560\"",
   "VersionId": "5843F11B0CBCFADB5E44",
   "Metadata": {},
   "StorageClass": "Standard"
}

可以看到这个对象很大,粗略估计20G,有三个之前版本,所以跟存储桶容量60G是可以对应的。

要查看分段上传信息,可以通过以下两个步骤:

  1. aws s3api list-multipart upload 查当前分段的任务
  2. aws s3api list-parts 查看这个任务的所有完成分段

如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论