我想知道为什么 Amazon Elastic Block Store(Amazon EBS)卷的增量快照的创建时间与完整快照的创建时间相同。
解决方法
快照创建时间取决于以下因素:
- EBS 卷的大小。
- 自上次快照以来更改的块数(增量)。
- EBS 卷上的工作负载。
- 快照创建期间 EBS 卷的主动 I/O。如果在发出创建调用时,卷上的 I/O 操作同步,则会取消快照的优先级。
- 快照的时机,因为带宽在后端服务器中共享。
- 自上次拍摄快照以来的时间。
根据设计,EBS 快照显示的是备份的完整大小,而不是增量大小。第一个快照是数据的完整副本。后续快照是增量快照,包含最近快照中更改的数据块。后续快照显示的是完整大小,可以从任何 EBS 快照中恢复新卷,尽管其设计是增量的。每个增量快照都会引用后端的其他快照。
例如,如果自第一个快照以来对所有数据块都进行了修改,则创建快照所需的时间似乎与完整快照一样长。这是因为引用第一个快照的所有块都被修改了。
自上次创建快照以来的更改次数越多,后续创建快照所需的时间就越长。
创建时间还取决于其他基础架构因素,例如底层存储子系统的负载。无法预测 EBS 快照创建可能需要多长时间,也无法加快此过程。
有关详细信息,请参阅快照的工作原理。
检查快照的实际大小
1. 运行 list-snapshot-blocks AWS 命令行界面(AWS CLI)命令。在以下示例命令中,将 value 替换为快照的 ID。
$ aws ebs list-snapshot-blocks --snapshot-id value
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。
list-snapshot-blocks 命令列出了该快照中的所有数据块以及块索引和块令牌。请注意,API 不会直接给出块总数。您必须根据块令牌或块索引计算返回的块数量。
list-snapshot-blocks 命令在单个结果中最多返回 10,000 个块。如果您的快照有超过 10000 个块,则该命令还会返回 NextToken。
运行以下命令使用令牌检索下一页结果。在以下示例命令中,将 value 替换为快照的 ID。
$ aws ebs list-snapshot-blocks --snapshot-id <value> --next-token value
2. 对块进行计数后,将块总数乘以 512(每个块的大小为 512 KiB)来计算数据大小。
示例
快照中的数据大小(以 KiB 为单位)= 块总数* 512
缩短快照创建时间
最佳做法是经常为卷拍摄快照。频繁创建快照意味着卷上已更改的块的大小较小,从而缩短了快照的创建时间。要自动创建和删除快照,请使用 Amazon Data Lifecycle Manager 或 AWS Backup。
相关信息
为什么我的 Amazon Elastic Compute Cloud(Amazon EC2)AMI 或 EBS 快照创建速度很慢?