AWS - EBS快照 - 增量备份还是完全备份?

5

我知道在AWS中,EBS "快照是增量备份,这意味着只有设备上自最近一次快照以来发生更改的块会被保存。"

但是,当使用EBS快照来恢复数据时,如何同时恢复该EBS快照中的所有数据以及以前快照中的数据?

例如,假设我有一个空卷。然后,我添加了10 GB的数据并拍摄了一个快照(快照1)。接着,我又添加了5 GB的数据并拍摄了第二个快照(快照2)。

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

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

3个回答

13

复杂的问题!

快照包括两个元素:

  • 数据(存储为块)
  • 索引指向数据

假设您有一个全新的 Amazon EBS 卷,它聪明地知道没有块被使用。

现在,让我们添加您的 10GB 数据,然后创建一个快照。这将导致将这 10GB 的数据复制到 Amazon S3。您看不到它在 S3 中,但 Amazon EBS 在幕后使用 S3 进行快照。已修改的每个都将作为单独的对象复制到 S3 上。此外,将存储一个“索引”,指出“快照#1包含以下块”。因此,快照是索引和存储数据的组合

接下来,让我们删除一些文件,修改一些文件,并添加另外 5GB 的文件。创建另一个快照(#2)将会把任何与快照#1不同的块复制到 S3 上,这意味着已经被修改或添加的块。将创建一个索引,指向这些新块,但也指向某些在 Snapshot#2 创建时仍然存在于磁盘上的 Snapshot#1 创建的块。这突显了快照的“增量”特性 - 未更改的块将不会再次被复制。

被删除的数据块仍保留在 S3 中是因为它们属于快照 #1,即使它们不在快照 #2 中。这意味着可以从快照 #1 或快照 #2 创建新的卷。

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

简单规则是:任何作为现有快照一部分的数据块都将被保留,以便可以恢复该快照。

请注意,AMI 是带有附加元数据的快照。因此,如果从 AMI 启动 EC2 实例,则 AMI 实际上是快照 #1。当您在 Amazon EBS 卷上添加/修改一些数据并创建快照时,它将复制您更改的数据块,但快照将指向 AMI 快照中大部分磁盘内容(例如操作系统)。


谢谢!这不能再解释得更好了。 - pizza

2
当您恢复“快照2”时,AWS首先恢复第一个快照,然后在其上恢复“快照2”。这样就可以在不必每次进行完整备份的情况下使所有数据都存在。每个增量备份只需备份自上一个快照以来发生变化的内容。
简而言之:如果我要猜测,我会说AWS可能还使用了其他一些高级逻辑,以跳过在最近的快照被恢复之前将多次更改的数据。基本上,可能有逻辑来防止不必要的写入,因为在最终快照被应用之前,同一数据在中间快照中多次更改。
如果您有问题,请告诉我。

0

我在这里找到了一个解释得很好的答案,分享给大家受益。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html

enter image description here

在状态1中,该卷有10 GiB的数据。因为Snap A是对该卷拍摄的第一个快照,所以必须复制整个10 GiB的数据。
在状态2中,该卷仍然包含10 GiB的数据,但有4 GiB已经更改。Snap B只需要复制并存储在Snap A之后更改的4 GiB数据。已经复制并存储在Snap A中的其他6 GiB未更改的数据由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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接