

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 归档 Amazon EBS 快照的准则和最佳实践
<a name="archiving-guidelines"></a>

本部分提供了归档快照的准则和最佳做法。

**Topics**
+ [归档卷的唯一快照](#guidelines-single-snapshot)
+ [归档单个卷的增量快照](#guidelines-incremental-snapshot)
+ [出于合规性原因归档完整快照](#guidelines-full-snapshot)
+ [确定标准层存储成本的减少程度](#archive-guidelines)

## 归档卷的唯一快照
<a name="guidelines-single-snapshot"></a>

如果只存在卷的一个快照，则快照的大小始终与创建快照时写入卷的块的大小相同。归档此类快照时，标准层中的快照将转换为同等大小的完整快照，然后从标准层移动到归档层。

归档这些快照可以帮助您以更低的存储成本节省开支。如果不再需要源卷，则可以删除该卷以进一步节省存储成本。

![\[创建快照，归档快照，然后删除源卷。\]](http://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/images/archive-single-snap.png)


## 归档单个卷的增量快照
<a name="guidelines-incremental-snapshot"></a>

归档增量快照时，增量快照将转换为完整快照，然后从标准层移动到归档层。例如，在下图中，如果您归档**快照 B**，快照将转换为大小为 10GiB 的完整快照并移动到归档层。同样，如果您归档**快照 C**，归档层中的完整快照大小为 14GiB。

![\[存档卷的增量快照。\]](http://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/images/snapshot_1e.png)


如果要归档快照以降低标准层中的存储成本，您不应归档一组增量快照中的第一个快照。快照谱系中的后续快照引用了这些快照。在大多数情况下，归档这些快照不会降低存储成本。

**注意**  
您不应归档一组增量快照中的最后一个快照。最后一个快照是卷的最新快照。如果要在卷损坏或丢失的情况下从快照中创建卷，则需要在标准层中使用此快照。

如果归档了一个快照，而该快照包含了谱系中后续快照所引用的数据，那么与所引用数据关联的数据存储和存储成本将分配给后续快照。在这种情况下，归档这些快照不会降低数据存储成本。例如，在上一张图片中，如果归档**快照 B**，它的 4GiB 的数据相当于由**快照 C** 产生。在这种情况下，总体存储成本将增加，因为您需要为归档层的**快照 B** 完整版付费，而标准层的存储成本保持不变。

如果归档**快照 C**，标准层存储将减少 4GiB，因为该数据未被谱系中任何其它后续快照引用。而且，由于快照已转换为完整快照，您的归档层存储将增加 14GiB。

## 出于合规性原因归档完整快照
<a name="guidelines-full-snapshot"></a>

出于合规性考虑，您可能需要每月、每季度或每年创建卷的完整备份。对于这些备份，您可能需要独立快照而不向后或向前引用快照谱系中的其它快照。使用 EBS 快照归档功能归档的快照是完整快照，它们没有引用谱系中的其它快照。此外，为了遵循合规性要求，您可能需要保留这些快照数年。EBS 快照归档使归档这些完整快照以长期保留具备良好的成本效益。

## 确定标准层存储成本的减少程度
<a name="archive-guidelines"></a>

如果要归档增量快照以降低存储成本，您应考虑归档层中完整快照的大小和标准层存储空间减少的程度。本部分介绍如何进行设置。

**重要**  
API 响应在调用 point-in-time时的数据准确 APIs 无误。由于与快照相关的数据随着快照谱系的变化而发生变化，API 响应可能会有所不同。

要确定标准层存储空间和存储成本的降低，请使用以下步骤。

1. 对于要存档的快照，请检查完整快照大小和根据其创建快照的源卷。使用 [describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 命令，对于 `--snapshot-id`，指定要存档的快照的 ID。

   ```
   $ aws ec2 describe-snapshots --snapshot-id snapshot_id
   ```

   `FullSnapshotSizeInBytes` 响应值表示完整快照大小（以字节为单位），`VolumeId` 响应值表示源卷的 ID。

   例如，以下命令返回有关快照 `snap-09c9114207084f0d9` 的信息。

   ```
   $ aws ec2 describe-snapshots --snapshot-id snap-09c9114207084f0d9
   ```

   以下示例输出显示完整快照大小为 `5678912341` 字节（5.28 GiB），源卷为 `vol-0f3e2c292c52b85c3`。

   ```
   {
       "Snapshots": [
           {
               "Description": "", 
               "Tags": [], 
               "Encrypted": false, 
               "VolumeId": "vol-0f3e2c292c52b85c3",
               "State": "completed", 
               "VolumeSize": 8, 
               "StartTime": "2021-11-16T08:29:49.840Z", 
               "Progress": "100%", 
               "OwnerId": "123456789012", 
               "FullSnapshotSizeInBytes" : "5678912341",
               "SnapshotId": "snap-09c9114207084f0d9"
           }
       ]
   }
   ```

1. 查找通过该源卷创建的所有快照。可以使用 [describe-hosts](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 命令。请指定 `volume-id` 筛选条件，并指定在上一步中得到的卷 ID 作为筛选条件值。

   ```
   $ aws ec2 describe-snapshots --filters "Name=volume-id, Values=volume_id"
   ```

   例如，以下命令返回创建自卷的所有快照 `vol-0f3e2c292c52b85c3`。

   ```
   $ aws ec2 describe-snapshots --filters "Name=volume-id, Values=vol-0f3e2c292c52b85c3"
   ```

   以下是命令输出，表示三个快照通过卷创建 `vol-0f3e2c292c52b85c3`。

   ```
   {
       "Snapshots": [
           {
               "Description": "", 
               "Tags": [], 
               "Encrypted": false, 
               "VolumeId": "vol-0f3e2c292c52b85c3", 
               "State": "completed", 
               "VolumeSize": 8, 
               "StartTime": "2021-11-14T08:57:39.300Z",
               "Progress": "100%", 
               "OwnerId": "123456789012", 
               "SnapshotId": "snap-08ca60083f86816b0"
           }, 
           {
               "Description": "", 
               "Tags": [], 
               "Encrypted": false, 
               "VolumeId": "vol-0f3e2c292c52b85c3", 
               "State": "completed", 
               "VolumeSize": 8, 
               "StartTime": "2021-11-15T08:29:49.840Z", 
               "Progress": "100%", 
               "OwnerId": "123456789012", 
               "SnapshotId": "snap-09c9114207084f0d9"
           }, 
           {
               "Description": "01", 
               "Tags": [], 
               "Encrypted": false, 
               "VolumeId": "vol-0f3e2c292c52b85c3", 
               "State": "completed", 
               "VolumeSize": 8, 
               "StartTime": "2021-11-16T07:50:08.042Z", 
               "Progress": "100%", 
               "OwnerId": "123456789012", 
               "SnapshotId": "snap-024f49fe8dd853fa8"
           }
       ]
   }
   ```

1. 使用上一个命令的输出，按照创建时间（从最旧到最新）对快照进行排序。每个快照的响应参数 `StartTime` 表示其创建时间（UTC 时间格式）。

   例如，按创建时间（从最旧到最新）排列的上一步返回的快照如下所示：

   1. `snap-08ca60083f86816b0`（最旧 – 在要存档的快照之前创建）

   1. `snap-09c9114207084f0d9`（要归档的快照）

   1. `snap-024f49fe8dd853fa8`（最新 – 紧接着需归档的快照之后创建）

1. 确定在需归档快照产生之前和之后紧邻着创建的快照。在这种情况下，您要归档快照 `snap-09c9114207084f0d9`，这是在三个快照集中创建的第二个增量快照。快照 `snap-08ca60083f86816b0` 正好在其之前创建，而快照 `snap-024f49fe8dd853fa8` 紧接其后创建。

1. 在需归档的快照中找到未引用的数据。首先，找出需归档快照以及正好在其之前创建的快照之间不同的数据块。使用 [list-changed-blocks](https://docs.aws.amazon.com/cli/latest/reference/ebs/list-changed-blocks.html) 命令。对于 `--first-snapshot-id`，请指定正好在需归档快照之前创建的快照 ID。对于 `--second-snapshot-id`，请指定需归档快照 ID。

   ```
   $ aws ebs list-changed-blocks --first-snapshot-id snapshot_created_before --second-snapshot-id snapshot_to_archive
   ```

   例如，以下命令显示了以下两个快照之间不同数据块的块索引：快照 `snap-08ca60083f86816b0`（正好在需归档快照之前创建的快照），以及快照 `snap-09c9114207084f0d9`（需归档快照）。

   ```
   $ aws ebs list-changed-blocks --first-snapshot-id snap-08ca60083f86816b0 --second-snapshot-id snap-09c9114207084f0d9
   ```

   下面显示了命令输出，其中省略了一些数据块。

   ```
   {
       "BlockSize": 524288, 
       "ChangedBlocks": [
           {
               "FirstBlockToken": "ABgBAX6y+WH6Rm9y5zq1VyeTCmEzGmTT0jNZG1cDirFq1rOVeFbWXsH3W4z/", 
               "SecondBlockToken": "ABgBASyx0bHHBnTERu+9USLxYK/81UT0dbHIUFqUjQUkwTwK5qkjP8NSGyNB", 
               "BlockIndex": 4
           }, 
           {
               "FirstBlockToken": "ABgBAcfL+EfmQmlNgstqrFnYgsAxR4SDSO4LkNLYOOChGBWcfJnpn90E9XX1", 
               "SecondBlockToken": "ABgBAdX0mtX6aBAt3EBy+8jFCESMpig7csKjbO2Ocd08m2iNJV2Ue+cRwUqF", 
               "BlockIndex": 5
           }, 
           {
               "FirstBlockToken": "ABgBAVBaFJmbP/eRHGh7vnJlAwyiyNUi3MKZmEMxs2wC3AmM/fc6yCOAMb65", 
               "SecondBlockToken": "ABgBAdewWkHKTcrhZmsfM7GbaHyXD1Ctcn2nppz4wYItZRmAo1M72fpXU0Yv", 
               "BlockIndex": 13
           }, 
           {
               "FirstBlockToken": "ABgBAQGxwuf6z095L6DpRoVRVnOqPxmx9r7Wf6O+i+ltZ0dwPpGN39ijztLn", 
               "SecondBlockToken": "ABgBAUdlitCVI7c6hGsT4ckkKCw6bMRclnV+bKjViu/9UESTcW7CD9w4J2td", 
               "BlockIndex": 14
           }, 
           {
               "FirstBlockToken": "ABgBAZBfEv4EHS1aSXTXxSE3mBZG6CNeIkwxpljzmgSHICGlFmZCyJXzE4r3", 
               "SecondBlockToken": "ABgBAVWR7QuQQB0AP2TtmNkgS4Aec5KAQVCldnpc91zBiNmSfW9ouIlbeXWy", 
               "BlockIndex": 15
           },
           .....
           {
               "SecondBlockToken": "ABgBAeHwXPL+z3DBLjDhwjdAM9+CPGV5VO5Q3rEEA+ku50P498hjnTAgMhLG", 
               "BlockIndex": 13171
           }, 
           {
               "SecondBlockToken": "ABgBAbZcPiVtLx6U3Fb4lAjRdrkJMwW5M2tiCgIp6ZZpcZ8AwXxkjVUUHADq", 
               "BlockIndex": 13172
           }, 
           {
               "SecondBlockToken": "ABgBAVmEd/pQ9VW9hWiOujOAKcauOnUFCO+eZ5ASVdWLXWWC04ijfoDTpTVZ", 
               "BlockIndex": 13173
           }, 
           {
               "SecondBlockToken": "ABgBAT/jeN7w+8ALuNdaiwXmsSfM6tOvMoLBLJ14LKvavw4IiB1d0iykWe6b", 
               "BlockIndex": 13174
           }, 
           {
               "SecondBlockToken": "ABgBAXtGvUhTjjUqkwKXfXzyR2GpQei/+pJSG/19ESwvt7Hd8GHaUqVs6Zf3", 
               "BlockIndex": 13175
           }
       ], 
       "ExpiryTime": 1637648751.813, 
       "VolumeSize": 8
   }
   ```

   接下来，使用相同的命令查找需归档快照与紧接其后创建的快照之间不同的数据块。对于 `--first-snapshot-id`，请指定需归档快照 ID。对于 `--second-snapshot-id`，请指定紧接着需归档快照之后创建的快照 ID。

   ```
   $ aws ebs list-changed-blocks --first-snapshot-id snapshot_to_archive --second-snapshot-id snapshot_created_after
   ```

   例如，以下命令显示了以下两个快照之间不同块的数据块索引：快照 `snap-09c9114207084f0d9`（在需归档快照之后立即创建的快照），以及快照 `snap-024f49fe8dd853fa8`（需归档快照）。

   ```
   $ aws ebs list-changed-blocks --first-snapshot-id snap-09c9114207084f0d9 --second-snapshot-id snap-024f49fe8dd853fa8
   ```

   下面显示了命令输出，其中省略了一些数据块。

   ```
   {
       "BlockSize": 524288, 
       "ChangedBlocks": [
           {
               "FirstBlockToken": "ABgBAVax0bHHBnTERu+9USLxYK/81UT0dbSnkDk0gqwRFSFGWA7HYbkkAy5Y", 
               "SecondBlockToken": "ABgBASEvi9x8Om7Htp37cKG2NT9XUzEbLHpGcayelomSoHpGy8LGyvG0yYfK", 
               "BlockIndex": 4
           }, 
           {
               "FirstBlockToken": "ABgBAeL0mtX6aBAt3EBy+8jFCESMpig7csfMrI4ufnQJT3XBm/pwJZ1n2Uec", 
               "SecondBlockToken": "ABgBAXmUTg6rAI+v0LvekshbxCVpJjWILvxgC0AG0GQBEUNRVHkNABBwXLkO", 
               "BlockIndex": 5
           }, 
           {
               "FirstBlockToken": "ABgBATKwWkHKTcrhZmsfM7GbaHyXD1CtcnjIZv9YzisYsQTMHfTfh4AhS0s2", 
               "SecondBlockToken": "ABgBAcmiPFovWgXQio+VBrxOqGy4PKZ9SAAHaZ2HQBM9fQQU0+EXxQjVGv37", 
               "BlockIndex": 13
           }, 
           {
               "FirstBlockToken": "ABgBAbRlitCVI7c6hGsT4ckkKCw6bMRclnARrMt1hUbIhFnfz8kmUaZOP2ZE", 
               "SecondBlockToken": "ABgBAXe935n544+rxhJ0INB8q7pAeoPZkkD27vkspE/qKyvOwpozYII6UNCT", 
               "BlockIndex": 14
           }, 
           {
               "FirstBlockToken": "ABgBAd+yxCO26I+1Nm2KmuKfrhjCkuaP6LXuol3opCNk6+XRGcct4suBHje1", 
               "SecondBlockToken": "ABgBAcPpnXz821NtTvWBPTz8uUFXnS8jXubvghEjZulIjHgc+7saWys77shb", 
               "BlockIndex": 18
           },
           .....
           {
               "SecondBlockToken": "ABgBATni4sDE5rS8/a9pqV03lU/lKCW+CTxFl3cQ5p2f2h1njpuUiGbqKGUa", 
               "BlockIndex": 13190
           }, 
           {
               "SecondBlockToken": "ABgBARbXo7zFhu7IEQ/9VMYFCTCtCuQ+iSlWVpBIshmeyeS5FD/M0i64U+a9", 
               "BlockIndex": 13191
           }, 
           {
               "SecondBlockToken": "ABgBAZ8DhMk+rROXa4dZlNK45rMYnVIGGSyTeiMli/sp/JXUVZKJ9sMKIsGF", 
               "BlockIndex": 13192
           }, 
           {
               "SecondBlockToken": "ABgBATh6MBVE904l6sqOC27s1nVntFUpDwiMcRWGyJHy8sIgGL5yuYXHAVty", 
               "BlockIndex": 13193
           }, 
           {
               "SecondBlockToken": "ABgBARuZykaFBWpCWrJPXaPCneQMbyVgnITJqj4c1kJWPIj5Gn61OQyy+giN", 
               "BlockIndex": 13194
           }
       ], 
       "ExpiryTime": 1637692677.286, 
       "VolumeSize": 8
   }
   ```

1. 比较上一步中两个命令返回的输出。如果两个命令输出中都显示相同的数据块索引，则表示该数据块包含未引用的数据。

   例如，上一步中的命令输出表明数据块 4、5、13 和 14 对于快照 `snap-09c9114207084f0d9` 来说是唯一的，而且快照谱系中的任何其他快照都不会引用这些数据块。

   要确定标准层存储空间的减少多少，请将两个命令输出中出现的数据块数乘以 512KiB，即得出快照数据块大小。

   例如，如果在两个命令输出中都出现 9950 个数据块索引，则表明您将减少标准层存储大约 4.85GiB（9950 个数据块 x 512KiB = 4.85GiB）。

1. 确定在标准层中存储未引用的数据块达 90 天的存储成本。将此值与存档层中的完整快照存储成本（如步骤 1 所述）进行比较。假设在最短 90 天的期限内没有从归档层还原完整快照，您可以通过比较这些值来确定节省的成本。有关更多信息，请参阅 [归档 Amazon EBS 快照的定价和计费](snapshot-archive-pricing.md)。