使用 EBS 直接 API 读取快照 - Amazon Elastic Compute Cloud

使用 EBS 直接 API 读取快照

以下步骤介绍了如何使用 EBS direct API 读取快照:

  1. 使用 ListSnapshotBlocks 操作可查看快照中数据块的数据块索引和数据块令牌。使用 ListChangedBlocks 操作也可查看同一卷和快照谱系的两个指定快照之间,存在不同的数据块的数据块索引和数据块令牌。这些操作可帮助您标识可能希望获取其数据的数据块的数据块令牌和数据块索引。

  2. 使用 GetSnapshotBlock 操作,请指定要获取其数据的数据块的数据块索引和数据块令牌。

以下示例显示如何使用 EBS 直接 API 读取快照。

列出快照中的数据块

AWS CLI

以下 list-snapshot-blocks 示例命令返回快照 snap-0987654321 中数据块的数据块索引和数据块令牌。--starting-block-index 参数将结果限制为索引大于 1000 的数据块,并且 --max-results 参数将结果限制为前 100 个数据块。

aws ebs list-snapshot-blocks --snapshot-id snap-0987654321 --starting-block-index 1000 --max-results 100

以下为上一个命令的示例响应,其中列出了快照中的数据块索引和数据块令牌。使用 get-snapshot-block 命令,请指定要获取其数据的数据块的数据块索引和数据块令牌。数据块令牌在列出的过期时间之前有效。

{ "Blocks": [ { "BlockIndex": 1001, "BlockToken": "AAABAV3/PNhXOynVdMYHUpPsetaSvjLB1dtIGfbJv5OJ0sX855EzGTWos4a4" }, { "BlockIndex": 1002, "BlockToken": "AAABATGQIgwr0WwIuqIMjCA/Sy7e/YoQFZsHejzGNvjKauzNgzeI13YHBfQB" }, { "BlockIndex": 1007, "BlockToken": "AAABAZ9CTuQtUvp/dXqRWw4d07eOgTZ3jvn6hiW30W9duM8MiMw6yQayzF2c" }, { "BlockIndex": 1012, "BlockToken": "AAABAQdzxhw0rVV6PNmsfo/YRIxo9JPR85XxPf1BLjg0Hec6pygYr6laE1p0" }, { "BlockIndex": 1030, "BlockToken": "AAABAaYvPax6mv+iGWLdTUjQtFWouQ7Dqz6nSD9L+CbXnvpkswA6iDID523d" }, { "BlockIndex": 1031, "BlockToken": "AAABATgWZC0XcFwUKvTJbUXMiSPg59KVxJGL+BWBClkw6spzCxJVqDVaTskJ" }, ... ], "ExpiryTime": 1576287332.806, "VolumeSize": 32212254720, "BlockSize": 524288 }
AWS API

以下 ListChangedBlocks 示例请求返回快照 snap-0acEXAMPLEcf41648 中数据块的数据块索引和数据块令牌。startingBlockIndex 参数将结果限制为索引大于 1000 的数据块,并且 maxResults 参数将结果限制为前 100 个数据块。

GET /snapshots/snap-0acEXAMPLEcf41648/blocks?maxResults=100&startingBlockIndex=1000 HTTP/1.1 Host: ebs.us-east-2.amazonaws.com Accept-Encoding: identity User-Agent: <User agent parameter> X-Amz-Date: 20200617T231953Z Authorization: <Authentication parameter>

以下为上一个请求的示例响应,其中列出了快照中的数据块索引和数据块令牌。使用 GetSnapshotBlock 操作,请指定要获取其数据的数据块的数据块索引和数据块令牌。数据块令牌在列出的过期时间之前有效。

HTTP/1.1 200 OK x-amzn-RequestId: d6e5017c-70a8-4539-8830-57f5557f3f27 Content-Type: application/json Content-Length: 2472 Date: Wed, 17 Jun 2020 23:19:56 GMT Connection: keep-alive { "BlockSize": 524288, "Blocks": [ { "BlockIndex": 0, "BlockToken": "AAUBAcuWqOCnDNuKle11s7IIX6jp6FYcC/q8oT93913HhvLvA+3JRrSybp/0" }, { "BlockIndex": 1536, "BlockToken": "AAUBAWudwfmofcrQhGVlLwuRKm2b8ZXPiyrgoykTRC6IU1NbxKWDY1pPjvnV" }, { "BlockIndex": 3072, "BlockToken": "AAUBAV7p6pC5fKAC7TokoNCtAnZhqq27u6YEXZ3MwRevBkDjmMx6iuA6tsBt" }, { "BlockIndex": 3073, "BlockToken": "AAUBAbqt9zpqBUEvtO2HINAfFaWToOwlPjbIsQOlx6JUN/0+iMQl0NtNbnX4" }, ... ], "ExpiryTime": 1.59298379649E9, "VolumeSize": 3 }

列出两个快照之间存在不同的数据块

在发出分页请求以列出两个快照之间发生更改的块时应注意以下几点:

  • 响应可能包含一个或多个空的 ChangedBlocks 数组。例如:

    • 快照 1 – 1000 个块的完整快照,带块索引 0999

    • 快照 2 – 仅包含一个发生更改的块,块索引为 999 的增量快照。

    使用 StartingBlockIndex = 0MaxResults = 100 列出这些快照发生更改的块时,将返回一个空的 ChangedBlocks 数组。您必须使用 nextToken 请求剩余的结果,直到第十个结果集(其中包括块索引为 900 - 999 的块)返回发生更改的块为止。

  • 响应可能回跳过快照中未写入的块。例如:

    • 快照 1 – 1000 个块的完整快照,带块索引 20002999

    • 快照 2 – 仅包含一个发生更改的块,块索引为 2000 的增量快照。

    使用 StartingBlockIndex = 0MaxResults = 100 列出这些快照中发生更改的块时,响应将跳过块索引 0 - 1999 并将包含块索引 2000。响应不会包含空的 ChangedBlocks 数组。

AWS CLI

以下 list-changed-blocks 示例命令返回快照 snap-1234567890snap-0987654321 之间存在不同的数据块的数据块索引和数据块令牌。--starting-block-index 参数将结果限制为索引大于 0 的数据块,并且 --max-results 参数将结果限制为前 500 个数据块。

aws ebs list-changed-blocks --first-snapshot-id snap-1234567890 --second-snapshot-id snap-0987654321 --starting-block-index 0 --max-results 500

以下为上一个命令的示例响应,其中显示了两个快照的数据块索引 0、6000、6001、6002 和 6003 存在不同。此外,数据块索引 6001、6002 和 6003 仅存在于指定的第一个快照 ID 中,而不存在于第二个快照 ID 中,因为响应中没有列出第二个数据块令牌。

使用 get-snapshot-block 命令,请指定要获取其数据的数据块的数据块索引和数据块令牌。数据块令牌在列出的过期时间之前有效。

{ "ChangedBlocks": [ { "BlockIndex": 0, "FirstBlockToken": "AAABAVahm9SO60Dyi0ORySzn2ZjGjW/KN3uygGlS0QOYWesbzBbDnX2dGpmC", "SecondBlockToken": "AAABAf8o0o6UFi1rDbSZGIRaCEdDyBu9TlvtCQxxoKV8qrUPQP7vcM6iWGSr" }, { "BlockIndex": 6000, "FirstBlockToken": "AAABAbYSiZvJ0/R9tz8suI8dSzecLjN4kkazK8inFXVintPkdaVFLfCMQsKe", "SecondBlockToken": "AAABAZnqTdzFmKRpsaMAsDxviVqEI/3jJzI2crq2eFDCgHmyNf777elD9oVR" }, { "BlockIndex": 6001, "FirstBlockToken": "AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR" }, { "BlockIndex": 6002, "FirstBlockToken": "AAABASqX4/NWjvNceoyMUljcRd0DnwbSwNnes1UkoP62CrQXvn47BY5435aw" }, { "BlockIndex": 6003, "FirstBlockToken": "AAABASmJ0O5JxAOce25rF4P1sdRtyIDsX12tFEDunnePYUKOf4PBROuICb2A" }, ... ], "ExpiryTime": 1576308931.973, "VolumeSize": 32212254720, "BlockSize": 524288, "NextToken": "AAADARqElNng/sV98CYk/bJDCXeLJmLJHnNSkHvLzVaO0zsPH/QM3Bi3zF//O6Mdi/BbJarBnp8h" }
AWS API

以下 ListChangedBlocks 示例请求返回快照 snap-0acEXAMPLEcf41648snap-0c9EXAMPLE1b30e2f 之间存在不同的数据块的数据块索引和数据块令牌。startingBlockIndex 参数将结果限制为索引大于 0 的数据块,并且 maxResults 参数将结果限制为前 500 个数据块。

GET /snapshots/snap-0c9EXAMPLE1b30e2f/changedblocks?firstSnapshotId=snap-0acEXAMPLEcf41648&maxResults=500&startingBlockIndex=0 HTTP/1.1 Host: ebs.us-east-2.amazonaws.com Accept-Encoding: identity User-Agent: <User agent parameter> X-Amz-Date: 20200617T232546Z Authorization: <Authentication parameter>

以下为上一个请求的示例响应,其中显示了两个快照的数据块索引 0307260026003 存在不同。此外,数据块索引 60026003 仅存在于指定的第一个快照 ID 中,而不存在于第二个快照 ID 中,因为响应中没有列出第二个数据块令牌。

使用 GetSnapshotBlock 操作,请指定要获取其数据的数据块的数据块索引和数据块令牌。数据块令牌在列出的过期时间之前有效。

HTTP/1.1 200 OK x-amzn-RequestId: fb0f6743-6d81-4be8-afbe-db11a5bb8a1f Content-Type: application/json Content-Length: 1456 Date: Wed, 17 Jun 2020 23:25:47 GMT Connection: keep-alive { "BlockSize": 524288, "ChangedBlocks": [ { "BlockIndex": 0, "FirstBlockToken": "AAUBAVaWqOCnDNuKle11s7IIX6jp6FYcC/tJuVT1GgP23AuLntwiMdJ+OJkL", "SecondBlockToken": "AAUBASxzy0Y0b33JVRLoYm3NOresCxn5RO+HVFzXW3Y/RwfFaPX2Edx8QHCh" }, { "BlockIndex": 3072, "FirstBlockToken": "AAUBAcHp6pC5fKAC7TokoNCtAnZhqq27u6fxRfZOLEmeXLmHBf2R/Yb24MaS", "SecondBlockToken": "AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid" }, { "BlockIndex": 6002, "FirstBlockToken": "AAABASqX4/NWjvNceoyMUljcRd0DnwbSwNnes1UkoP62CrQXvn47BY5435aw" }, { "BlockIndex": 6003, "FirstBlockToken": "AAABASmJ0O5JxAOce25rF4P1sdRtyIDsX12tFEDunnePYUKOf4PBROuICb2A" }, ... ], "ExpiryTime": 1.592976647009E9, "VolumeSize": 3 }

从快照获取数据块数据

AWS CLI

以下 get-snapshot-block 示例命令返回快照 6001 中,数据块令牌为 AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR 的数据块索引 snap-1234567890 中的数据。在 Windows 计算机上,二进制数据将输出到 data 目录中的 C:\Temp 文件。如果您在 Linux 或 Unix 计算机上运行该命令,请将输出路径替换为 /tmp/data 以将数据输出到 data 目录中的 /tmp 文件。

aws ebs get-snapshot-block --snapshot-id snap-1234567890 --block-index 6001 --block-token AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR C:/Temp/data

以下为上一个命令的示例响应,其中显示了返回的数据的大小、用于验证数据的校验和以及校验和的算法。二进制数据会自动保存到您在请求命令中指定的目录和文件中。

{ "DataLength": "524288", "Checksum": "cf0Y6/Fn0oFa4VyjQPOa/iD0zhTflPTKzxGv2OKowXc=", "ChecksumAlgorithm": "SHA256" }
AWS API

以下 GetSnapshotBlock 示例请求返回快照 3072 中,数据块令牌为 AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid 的数据块索引 snap-0c9EXAMPLE1b30e2f 中的数据。

GET /snapshots/snap-0c9EXAMPLE1b30e2f/blocks/3072?blockToken=AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid HTTP/1.1 Host: ebs.us-east-2.amazonaws.com Accept-Encoding: identity User-Agent: <User agent parameter> X-Amz-Date: 20200617T232838Z Authorization: <Authentication parameter>

以下为上一个请求的示例响应,其中显示了返回的数据的大小、用于验证数据的校验和以及用于生成校验和的算法。二进制数据在响应的正文中传输,并在以下示例中以 BlockData 表示。

HTTP/1.1 200 OK x-amzn-RequestId: 2d0db2fb-bd88-474d-a137-81c4e57d7b9f x-amz-Data-Length: 524288 x-amz-Checksum: Vc0yY2j3qg8bUL9I6GQuI2orTudrQRBDMIhcy7bdEsw= x-amz-Checksum-Algorithm: SHA256 Content-Type: application/octet-stream Content-Length: 524288 Date: Wed, 17 Jun 2020 23:28:38 GMT Connection: keep-alive BlockData