【问题标题】:AWS S3: how do I see how much disk space is usingAWS S3:我如何查看正在使用的磁盘空间量
【发布时间】:2012-02-17 01:23:19
【问题描述】:

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

【问题讨论】:

  • 你必须得到所有的对象,然后总结所有的文件大小。您不能在一次操作中完成。
  • 奇怪的是,这个问题没有真正的解决方案。如果您有数以千万计的文件,遍历所有项目并计算不是解决方案!在 AWS 的 s3 UI 中,您可以在 Management -> Metrics 下轻松查看使用情况。为什么没有办法从命令行获取?

标签: amazon-s3 amazon-web-services


【解决方案1】:

命令行工具通过运行给出了一个很好的总结:

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

【讨论】:

  • Yours 和 Christopher's 是迄今为止最好的答案。
  • 比公认的答案简单得多的解决方案。谢谢!
  • 这不显示版本的真实大小。有没有办法检查所有版本的 s3 存储桶的总大小?
  • 打印每个桶的总大小:for b in $(aws s3 ls | awk '{ print $NF }'); do printf "$b "; aws s3 ls s3://$b --recursive --human-readable --summarize | tail -1; done
【解决方案2】:

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"}'

【讨论】:

  • print total/1024/1024/1024*.03 如果您小于 1TB,则可以很好地估算使用量。 @cudds 太棒了 - 非常感谢!!!
  • 如果是单桶就不需要grep部分。
  • AWS Cloudwatch 现在有一个每日更新的存储桶大小和对象数量的指标。关于时间! aws.amazon.com/blogs/aws/…
  • 示例 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 重要提示: 您必须在维度参数中同时指定 StorageType 和 BucketName 否则将得不到任何结果。
  • @SamMartin StorageType 需要是什么?对于大于 100 GB 的存储桶,这个答案也需要很长时间来计算
【解决方案3】:

使用 AWS 控制台了解 S3 存储桶的大小:

  1. 点击 S3 存储桶名称
  2. 选择“指标”标签
  3. 您应该会看到“桶指标”,默认情况下包括“桶总大小”

【讨论】:

  • 如果您的存储桶有 TB 的数据,这会更快。接受的答案需要花费大量时间来计算该比例中的所有对象。
  • 另请注意,这将捕获挂起的不完整上传,而基于 ls 的解决方案则不会。
  • 最快的方法就是这个答案
  • ''Metrics'' 有它自己的标签。但是,是的,这对我来说是最快的方式。
【解决方案4】:

s3cmd 可以通过运行 s3cmd du 向您展示这一点,可选择将存储桶名称作为参数传递。

【讨论】:

  • 仅供参考 - 我试过这个和 cudds 答案中的 aws cli 版本。它们都可以正常工作,但在我尝试发布 1.5.0-rc1 的情况下,s3cmd 明显较慢。
  • @DougW:谢谢,有用的信息。 AWS CLI 1.0.0 是 released in September 2013,所以在我写答案时它还不存在。
  • s3cmd 不支持 AWS4 哈希,因此它不适用于任何新区域,包括欧盟区域“eu-central-1”
  • @Koen.:谢谢,我不知道这一点。似乎 s3cmd 维护者正在考虑增加对 AWS4 的支持:github.com/s3tools/s3cmd/issues/402
  • @Koen.:s3cmd 现在支持 AWS4 哈希,从 2015 年 1 月 12 日发布的 1.5.0 开始。见s3tools.org/news
【解决方案5】:

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

这意味着您可以使用sum(Contents[].Size)list-objects 给出的大小值求和,并像length(Contents[]) 一样计数。

这可以使用官方的 AWS CLI 运行,如下所示,在 Feb 2014 中进行了介绍

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

【讨论】:

  • 我不得不在 windows 命令行中的查询字符串周围使用双引号。虽然像冠军一样工作。
  • 注意:如果存储桶为空,则命令将失败并出现以下错误:In function sum(), invalid type for value: None, expected one of: ['array-number'], received: "null" 否则查询效果很好!
  • AWS 文档表明,如果您需要获取存储桶的大小,请使用在大多数情况下运行良好的命令。但是,它不适合自动化,因为有时您可能会遇到某些特定存储桶有数千或数百万条记录的情况。该命令必须遍历完整列表,然后才能呈现所需的桶大小信息。它不适合自动化。
【解决方案6】:

在具有python(带有pip 安装程序)、grepawk 的Linux 机器上,安装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 只需将结果输出的第三列(大小以KB 为单位)添加到total,然后在末尾显示

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

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      https://serverfault.com/questions/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';
      ?>
      

      【讨论】:

      • 你知道在这种情况下千兆字节是 10243 还是 10003?我很难找到明确的 S3 声明。
      • @dfrankow echo ($totalSize / 1024 / 1024 / 1024) . ' GB'; 行就在源代码的底部。
      • @MJD 我不记得我的想法是什么了。它询问的是 s3cmd 或 S3 使用“gigabyte”这个词,而不是这个 PHP 代码。
      【解决方案9】:

      除了克里斯托弗的回答。

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

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

      它计算最新版本和存档版本。

      【讨论】:

        【解决方案10】:

        通过 API(aws cli 或 s4cmd)获取 large buckets 大小非常慢。这是我的HowTo explaining how to parse S3 Usage Report 使用 bash 一个班轮:

        cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n
        

        【讨论】:

          【解决方案11】:

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

          注意:这些产品仍然需要获取每个单独对象的大小,因此对于包含大量对象的存储桶可能需要很长时间。

          【讨论】:

          • 我只能看到一个试用软件。该优惠是否已被删除?
          【解决方案12】:

          根据@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]
          

          另外,Cyberduck 可以方便地计算存储桶或文件夹的大小。

          【讨论】:

            【解决方案13】:

            这是一个古老的询问,但由于我正在寻找答案,所以我遇到了它。一些答案让我想起了我使用 S3 Browser 来管理数据。您可以单击存储桶并点击属性,它会显示总数。很简单。我强烈推荐浏览器:https://s3browser.com/default.aspx?v=6-1-1&fam=x64

            【讨论】:

              【解决方案14】:

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

              我在计费仪表板检查当前帐单中的 S3 使用情况

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

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

              顺便说一句:您可能需要特定的 IAM 权限才能访问账单信息。

              【讨论】:

                【解决方案15】:

                Mini John 的回答对我完全有用!太棒了...不得不添加

                --region eu-west-1 
                

                虽然来自欧洲

                【讨论】:

                  【解决方案16】:

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

                  我使用CrossFTP,它是免费且跨平台的,您可以在其中右键单击文件夹目录->选择“属性...”->单击大小旁边的“计算”按钮,瞧.

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                      【解决方案18】:

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

                      【讨论】:

                      • 小心使用这个软件。它安装了额外的 chrome 扩展程序,似乎相当垃圾。
                      猜你喜欢
                      • 1970-01-01
                      • 2023-04-01
                      • 1970-01-01
                      • 2022-06-29
                      • 2013-02-26
                      • 2021-12-27
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-12-26
                      相关资源
                      最近更新 更多