归档快照的准则和最佳做法 - Amazon Elastic Compute Cloud

归档快照的准则和最佳做法

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

归档卷的唯一快照

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

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


          创建快照,归档快照,然后删除源卷。

归档单个卷的增量快照

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

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

注意

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

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

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

出于合规性原因归档完整快照

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

确定标准层存储成本的减少程度

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

重要

在调用 API 的时间点,API 响应的数据是准确的。由于与快照相关的数据随着快照谱系的变化而发生变化,API 响应可能会有所不同。

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

  1. 检查完整快照的大小。要确定快照的完整大小,请使用 list-snapshot-blocks 命令。对于 --snapshot-id,请指定需归档快照 ID。

    $ aws ebs list-snapshot-blocks --snapshot-id snapshot_id

    这会返回有关指定快照中所有数据块的信息。该命令返回的最后一个数据块的 BlockIndex 表示快照中的数据块数。数据块数乘以 512KiB(即快照数据块大小),结果接近归档层中完整快照的大小(数据块数 x 512KiB = 完整快照大小)。

    例如,以下命令会列出快照 snap-01234567890abcdef 的数据块。

    $ aws ebs list-snapshot-blocks --snapshot-id snap-01234567890abcdef

    以下是命令输出,其中省略了一些数据块。以下输出表明快照包括大约 16383 个数据块。这相当于约 8GiB 的完整快照大小(16383 x 512KiB = 7.99GiB)。

    { "VolumeSize": 8, "Blocks": [ { "BlockToken": "ABgBAeShfa5RwG+RiWUg2pwmnCU/YMnV7fGMxLbCWfEBEUmmuqac5RmoyVat", "BlockIndex": 0 }, { "BlockToken": "ABgBATdTONyThPUAbQhbUQXsn5TGoY/J17GfE83j9WN7siupavOTw9E1KpFh", "BlockIndex": 1 }, { "BlockToken": "EBEUmmuqXsn5TGoY/QwmnCU/YMnV74eKE2TSsn5TGoY/E83j9WQhbUQXsn5T", "BlockIndex": 4 }, ..... { "BlockToken": "yThPUAbQhb5V8xpwmnCU/YMnV74eKE2TSFY1sKP/4r05y47WETdTONyThPUA", "BlockIndex": 12890 }, { "BlockToken": "ABgBASHKD5V8xEbaRKdxdkZZS4eKE2TSFYlMG1sKP/4r05y47WEHqKaNPcLs", "BlockIndex": 12906 }, { "BlockToken": "ABgBARROGMUJo6P9X3CFHQGZNQ7av9B6vZtTTqV89QqC+SkO0HWMlwkGXjnA", "BlockIndex": 16383 } ], "VolumeSize": 8, "ExpiryTime": 1637677800.845, "BlockSize": 524288 }
  2. 找到需归档快照的源卷(快照创建自此卷)。可以使用 describe-hosts 命令。对于 --snapshot-id,请指定需归档快照 ID。响应参数 VolumeId 表示源卷 ID。

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

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

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

    以下是命令输出,它表示该快照 snap-09c9114207084f0d9 通过卷 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", "SnapshotId": "snap-09c9114207084f0d9" } ] }
  3. 查找通过该源卷创建的所有快照。可以使用 describe-hosts 命令。请指定 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" } ] }
  4. 使用上一个命令的输出,按照创建时间(从最早到最新)对快照进行排序。每个快照的响应参数 StartTime 表示其创建时间(UTC 时间格式)。

    例如,按创建时间(从最早到最新)排列的上一步返回的快照如下所示:

    1. snap-08ca60083f86816b0(最早 – 在需归档快照产生之前创建)

    2. snap-09c9114207084f0d9(要归档的快照)

    3. snap-024f49fe8dd853fa8(最新 – 紧接着需归档的快照之后创建)

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

  6. 在需归档的快照中找到未引用的数据。首先,找出需归档快照以及正好在其之前创建的快照之间不同的数据块。使用 list-changed-blocks 命令。对于 --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 }
  7. 比较上一步中两个命令返回的输出。如果两个命令输出中都显示相同的数据块索引,则表示该数据块包含未引用的数据。

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

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

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

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