AWS - EBS 快照 - 增量备份或实际完整备份

AWS - EBS Snapshots - Incremental Backup or Actually Full Backup

我知道在 AWS 中,EBS“快照是增量备份,这意味着只有在您最近的快照之后设备上发生更改的块才会被保存。”。 =10=]

但是,当使用 EBS 快照还原数据时,如何还原该 EBS 快照中的所有数据以及先前快照中的数据?

例如,假设我有一个空卷。因此,我向其中添加了 10 GB 的数据并拍摄了快照(快照 1)。 然后,我添加了另外 5 GB 的数据并拍摄了第二张快照(快照 2)。

如果快照是纯粹的增量备份,那么当我使用快照2恢复数据时,我应该只有5GB的数据。但是当我测试它时,我得到了 15 GB 的数据。

我知道增量快照可以最大限度地减少创建快照所需的时间并通过不复制数据来节省存储成本,但是如何使用增量备份来恢复整个数据?

当您还原 'Snapshot 2' 时,AWS 基本上首先还原第一个快照,然后在其顶部还原 'Snapshot 2'。这使得所有数据都在那里,而不必每次都进行完整备份。每个增量备份只需备份自上次快照以来更改的内容。

TLDR:如果让我猜的话,我会说 AWS 可能还使用了一些其他奇特的逻辑,以便在恢复最新快照之前跳过将多次更改的数据。本质上,可能存在防止不必要写入的逻辑,因为在应用最终快照之前,相同的数据在中间快照中被多次更改。

如果您有任何问题,请告诉我。

复杂!

快照有两个要素:

  • 数据(存储为块)
  • 一个索引到数据

假设您有一个完全空的 Amazon EBS 卷。知道没有使用块就足够聪明了。

现在,让我们添加您的 10GB 数据,然后创建快照。这将导致将 10GB 的数据复制到 Amazon S3。在 S3 中看不到,但 Amazon EBS 使用 S3 进行快照 "behind the scenes"。每个被修改的 block 将作为一个单独的对象复制到 S3。此外,将存储一个 'index',表示 "Snapshot #1 contains the following blocks"。因此,快照是索引和存储的数据的组合

接下来,让我们删除一些文件,修改一些文件并添加另外5GB的文件。拍摄另一个快照 (#2) 现在会将与快照 #1 不同的任何块复制到 S3,这意味着任何已修改或添加的块。将创建一个指向这些新块的索引,但如果在创建快照 #2 时这些块仍存在于磁盘上,则还指向在快照 #1 中创建的一些块。这突出了快照的 "incremental" 性质——没有改变的块将不会被再次复制。

至于被删除的块,这些块保留在 S3 中,因为它们是快照 #1 的一部分,即使它们不存在于快照 #2 中。这意味着可以从快照 #1 或快照 #2 创建新卷。

但是,如果快照 #1 被删除,则快照 #1 中存在的任何块 也将被删除。但是,属于两个 快照的任何块都将保留,因为需要它们来恢复快照#2。

简单的规则是:任何属于现有快照的数据块都将保留,以便可以恢复快照。

为了让您的思路更进一步,请注意 AMI 是带有一些额外元数据的快照。因此,如果您从 AMI 启动 EC2 实例,则 AMI 实际上是快照 #1。当您 add/modify 该 Amazon EBS 卷上的一些数据并拍摄快照时,它会复制您更改的块的副本,但快照将指向大部分磁盘内容(例如操作系统)的 AMI 快照.

我在这里找到了一个很好解释的答案..为了大家的利益把它放在这里。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html

在状态 1 中,该卷有 10 GiB 的数据。因为快照 A 是卷的第一个快照,所以必须复制整个 10 GiB 的数据。

在状态 2 中,该卷仍包含 10 GiB 的数据,但 4 GiB 已更改。 Snap B 只需要复制和存储在 Snap A 被获取后发生变化的 4 GiB。其他 6 GiB 的未更改数据已复制并存储在 Snap A 中,由 Snap B 引用而不是(再次)复制。这由虚线箭头表示。

在状态 3 中,已将 2 GiB 的数据添加到卷中,总共 12 GiB。 Snap C 需要复制在 Snap B 被获取后添加的 2 GiB。如虚线箭头所示,Snap C 还引用了存储在 Snap B 中的 4 GiB 数据和存储在 Snap A 中的 6 GiB 数据。

三个快照所需的总存储空间为 16 GiB。