问题描述
在控制台看到桶存储量很大,例如存储量为60GB,但是查看桶中对象,却看到并没有60G,如何查询桶中存储量大的原因?
问题分析
如果存储桶占用量大,但控制台又看不到相对应数据量的对象,可能有两方面导致存储量很大:
- 桶开启了版本控制,相同对象存在很多版本。
- 存在很多没有完成的分段上传。
解决方案
1.控制台用量概览中查看存储量为60G(开启了版本控制),如下:
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是可以对应的。
要查看分段上传信息,可以通过以下两个步骤:
- aws s3api list-multipart upload 查当前分段的任务
- aws s3api list-parts 查看这个任务的所有完成分段
如果您有其他问题,欢迎您联系火山引擎技术支持服务