AWS S3:如何查看正在使用多少磁盘空间


113

我有AWS账户。我正在使用S3存储来自不同服务器的备份。问题是,AWS控制台中是否有关于我的S3云中正在使用多少磁盘空间的信息?


1
您必须获取所有对象,然后总结所有文件的大小。您不能一次完成此操作。
Layke 2012年

奇怪的是,没有真正解决该问题的方法。如果您拥有数千万个文件,那么遍历所有项目并进行计算并不是解决方案!在AWS的s3 UI中,您可以在管理->指标下轻松查看用法。为什么没有办法从命令行获取此信息?
萨朗

Answers:


117

Yippe-AWS CLI的更新使您可以通过存储桶递归ls ...

aws s3 ls s3://<bucketname> --recursive  | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'

如果总容量小于1TB,print total / 1024/1024/1024 * .03可以很好地估算$的使用量。@cudds太棒了-谢谢你!
chrislovecnm

4
如果您只有一个存储桶,则不需要grep部分。
jpbochi 2014年

7
AWS Cloudwatch现在有一个存储桶大小和对象数量的指标,该指标每天更新。关于时间!aws.amazon.com/blogs/aws/...
cudds

3
示例 aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage 重要提示:必须在Dimensions参数中同时指定StorageType和BucketName,否则将不会获得任何结果。
Sam Martin

@SamMartin StorageType需要是什么?同样,对于大于100 GB的存储桶,此答案需要很长时间才能计算出来
Vivek Katial

104

考虑到最初的问题是3年前,我不确定何时将其添加到AWSCLI中,但是命令行工具通过运行给出了一个很好的总结:

aws s3 ls s3://mybucket --recursive --human-readable --summarize

4
到目前为止,您和克里斯托弗的答案是最好的。
迈克尔·艾勒斯

2
比接受的答案简单得多的解决方案。谢谢!
阿德里安·麦克尼尔

1
这不会显示版本的真实大小。有没有办法检查所有版本的s3存储桶的总大小?
Shanika Ediriweera,

1
打印每个存储桶的总大小:for b in $(aws s3 ls | awk '{ print $NF }'); do printf "$b "; aws s3 ls s3://$b --recursive --human-readable --summarize | tail -1; done
马特·怀特

69

要使用AWS控制台找出S3存储桶的大小,请执行以下操作:

  1. 单击S3存储桶名称
  2. 选择“管理”标签
  3. 点击“指标”导航按钮
  4. 默认情况下,您应该看到存储分区的存储指标

希望这可以帮助。


3
万一您的存储桶中有TB的数据,这可以更快地工作。接受的答案需要大量时间才能计算出该比例尺中的所有对象。
sokras '18 -10-1

还要注意,这将捕获挂起的不完整的上传,而ls基于-的解决方案则不会。
David Moles

最快的解决方法是这个答案
Mohammad Zekrallah

36

s3cmd可以通过运行向您显示此信息s3cmd du,可以选择将存储桶名称作为参数传递。


1
仅供参考-我尝试了这个,并在cudds答案中使用了aws cli版本。它们都可以正常工作,但是在我从1.5.0-rc1版本开始尝试的情况下,s3cmd的速度明显慢。
DougW 2014年

@DougW:谢谢,有用的信息。AWS CLI 1.0.0于2013年9月发布,因此在我编写答案时不存在。
markusk

s3cmd不支持AWS4哈希,因此它不适用于任何新区域,包括欧盟区域“ eu-central-1”
Koen。

@Koen:谢谢,我没有意识到这一点。似乎s3cmd维护人员正在研究增加对AWS4的支持:github.com/s3tools/s3cmd/issues/402
markusk 2014年

@Koen .: s3cmd现在支持从2015年1月12日发布的1.5.0版本开始的AWS4哈希。参见s3tools.org/news
markusk

28

AWS CLI现在支持--query采用JMESPath表达式的参数。

这意味着您可以对list-objects使用sum(Contents[].Size)和计数给定的大小值求和length(Contents[])

可以使用以下官方AWS CLI运行,并于20142月引入

 aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

我必须在Windows命令行中的查询字符串周围使用双引号。虽然像冠军。
Travis Steel

注意:如果存储桶为空,则命令将失败,并显示以下错误:In function sum(), invalid type for value: None, expected one of: ['array-number'], received: "null"否则查询将非常有效!
mechatroner

7

在具有python(和pip安装程序)grep和的Linux机器上awk,安装AWS CLI(用于EC2,S3和许多其他服务的命令行工具)

sudo pip install awscli

然后.awssecret在主文件夹中创建一个文件,其内容如下(根据需要调整密钥,机密和区域):

[default]
aws_access_key_id=<YOUR_KEY_HERE>
aws_secret_access_key=<YOUR_SECRET_KEY_HERE>
region=<AWS_REGION>

使此文件对用户仅读写:

sudo chmod 600 .awssecret

并将其导出到您的环境

 export AWS_CONFIG_FILE=/home/<your_name>/.awssecret

然后在终端中运行(这是一条单行命令,\在此处分开以方便阅读):

aws s3 ls s3://<bucket_name>/foo/bar | \
grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | \
awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
  • aws部分列出了存储桶(或可选的“子文件夹”)
  • grep部分删除(使用-v)与正则表达式匹配的行(使用-E)。^$用于空白行,--用于输出中的分隔线aws s3 ls
  • 最后一个awk简单地添加到total结果输出的第三列(大小以KB为单位),然后在末尾显示

注意此命令适用于当前存储桶或“文件夹”,而不是递归的


7

Cloud Watch还允许您为S3存储桶创建指标。它通过大小和对象数向您显示指标。服务>管理工具>云监视。选择您的S3存储桶所在的区域,大小和对象计数指标将在这些可用指标中。


6

看到 /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket

维克回答...

<?php
if (!class_exists('S3')) require_once 'S3.php';

// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;

// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';

$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
    // If you want to get the size of a particular directory, you can do
    // only that.
    // if (strpos($name, 'directory/sub-directory') !== false)
    $totalSize += $val['size'];
}

echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>

您知道这种情况下的千兆字节是1024 3还是1000 3吗?我很难找到确定的S3语句。
dfrankow

@dfrankow该行echo ($totalSize / 1024 / 1024 / 1024) . ' GB';位于源代码底部。
MJD 2014年

@MJD我不记得我的想法在这里。它询问的是s3cmd还是S3使用“千兆字节”一词,而不是此PHP代码。
dfrankow 2014年

5

除了克里斯托弗的答案。

如果您需要计算版本化存储桶的总大小,请使用:

aws s3api list-object-versions --bucket BUCKETNAME --output json --query "[sum(Versions[].Size)]"

它同时统计最新版本和存档版本。



1

AWS控制台不会向您显示此信息,但是您可以使用Bucket ExplorerCloudberry Explorer来获取存储桶的总大小。两者都有可用的免费版本。

注意:这些产品仍然必须获得每个单独对象的尺寸,因此对于带有很多对象的存储桶可能要花费很长时间。


我只能看到试用软件。该报价是否已删除?
Trefex

1

基于@cudds的答案:

function s3size()
{
    for path in $*; do
        size=$(aws s3 ls "s3://$path" --recursive | grep -v -E "(Bucket: |Prefix: |LastWriteTime|^$|--)" | awk 'BEGIN {total=0}{total+=$3}END{printf "%.2fGb\n", (total/1024/1024/1024)}')
        echo "[s3://$path]=[$size]"
    done
}

...

$ s3size bucket-a bucket-b/dir
[s3://bucket-a]=[24.04Gb]
[s3://bucket-b/dir]=[26.69Gb]

此外,Cyber​​duck方便地允许计算存储桶或文件夹的大小。




0

好吧,如果您更喜欢人性化的UI,也可以通过S3客户端来完成。

我使用CrossFTP,它是免费的跨平台的,您可以在该文件夹上单击鼠标右键->选择“属性...”->单击“大小”旁边的“计算”按钮。


0

s3admin是一个开源应用程序(UI),可让您浏览存储桶,计算总大小,显示最大/最小文件。专为快速了解您的存储桶及其使用情况而量身定做。


0

您询问:AWS控制台中有关S3云上正在使用多少磁盘空间的信息

我到了Billing Dashboard,然后检查当前账单中的S3使用情况

它们为您提供信息-MTD-以Gb到6个小数点IOW到Kb级别。

它按区域细分,但是将它们加起来(假设您使用多个区域)很容易。

顺便说一句:您可能需要特定的IAM权限才能获取帐单信息。


-2

我使用Cloud Turtle来获取各个存储桶的大小。如果存储桶的大小超过100 Gb,那么将需要一些时间来显示大小。云龟是免费软件。


8
小心此软件。它安装了额外的chrome扩展程序,似乎相当垃圾。
styks 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.