我执行了大量文件删除操作,然后想在我的 Amazon Simple Storage Service(Amazon S3)桶上运行列表命令。但是,列表命令停止响应并且不返回任何输出。
解决方案
如果您删除了大量文件并且出现了 ls 或 list-objects 命令停止响应的问题,请按照以下故障排除步骤进行操作:
移除过期的对象删除标记
在启用版本控制的桶中,当您对受版本控制的对象执行删除操作并且未指定版本 ID 时,系统会创建一个删除标记。当生命周期配置规则将以前的对象版本设置为过期时,桶将包含与过期对象关联的删除标记。如果有成千上万的删除标记,则列表操作可能会超时。因此,最佳实践是从桶中](https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex7)移除过期的对象删除标记[,以提高列表操作的性能。
要有效地清理过期的对象删除标记,请使用生命周期规则:
- 打开 Amazon S3 控制台。
- 从桶列表中,选择包含过期的对象删除标记的桶。
- 选择管理选项卡。
- 选择添加生命周期规则并输入规则名称。然后,选择下一步。
- 对于存储类转换,请跳过此部分并选择下一步。
- 对于配置过期,请选择清理过期对象删除标记。然后,选择下一步。
- 查看生命周期规则设置,然后选择保存。
尝试 list-objects-v2 命令或最新版本的 AWS CLI
**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,确保您使用的是最新版本的 AWS CLI。
list-objects-v2 命令,或 ListObjectsV2 API 调用,是列表操作的更新版本,其中包括一些性能改进。下面的示例命令请求 awsexamplebucket 中的对象列表:
aws s3api list-objects-v2 --bucket awsexamplebucket
**注意:**为了实现向后兼容,Amazon S3 继续支持 ListObjects API 调用。
使用 Amazon S3 清单报告
您可以使用 Amazon S3 清单报告来获取对象列表,而不是执行列表操作。当您对包含数亿个对象的桶执行多个列表操作时,该过程可能非常具有挑战性,并且消耗很多资源。
您可以获取桶或前缀的每日或每周 Amazon S3 清单报告,也可以在报告中包含其他对象元数据。您可以将清单报告作为批量操作的输入,也可以使用 Amazon Athena 查询报告。
相关信息
Amazon S3 定价