对亚马逊EBS快照的困惑

时间:2013-10-21 17:41:12

标签: mongodb amazon-web-services snapshot

我对快照如何作为备份工作有点困惑。我目前正在运行一个脚本,每晚都会对我们的mongo数据和日志进行快照。但我看到的信息表明快照是增量的,这让我很困惑。它们是增量的吗?如果是这样,哪个是基本的,我将如何重置基数?我宁愿每次都拍一张完整的快照。

此外,有人知道一种自动映射旧快照的方法吗?他们只是不断积累。

1 个答案:

答案 0 :(得分:4)

每个EBS快照都是一个独立的快照,如果恢复到新卷上,它将为您提供一个与snahshot时存在的卷相同的卷。

但是,快照存储在S3中,它们的存储方式(以及存储它们的方式)都是递增的。

  

Amazon EBS快照是增量备份,这意味着只保存自上次快照以来设备上已更改的块。如果您的设备具有100 GB的数据,但自上次快照以来只有5 GB的数据发生了更改,则只有5个额外GB的快照数据将存储回Amazon S3。即使以增量方式保存快照,当您删除快照时,也只会删除任何其他快照不需要的数据。因此,无论删除了哪些先前的快照,所有活动快照都将包含还原卷所需的所有信息。此外,恢复卷的时间对于所有快照都是相同的,提供完全备份的恢复时间,并节省了增量空间。

     

- http://aws.amazon.com/ebs/

在幕后,此快照仅包含从先前快照更改的块...但是恢复快照并不意味着您必须将增量部分重新组合在一起。 EBS会在幕后为您自动完成。

因此,假设您有一个100 GB的EBS卷,以及按顺序拍摄的快照A,B和C,而没有其他卷的快照。

快照A的大小为100GB(可能更小,因为你从未写过的空间可能会从shapshot中删除)。

如果更改了20GB,那么您拍摄了快照B,该快照的大小将为20GB,但是如果您恢复它,则生成的卷将包含完整的100GB,因为它指向了shapshot A中未更改的数据。 / p>

然后另一个10GB发生了变化,你拍摄了快照C.这将是一个10GB的快照,其中指针返回B表示前面的数据,指针返回A表示其余数据。同样,恢复这个将在您拍摄快照C时获得完整的音量。

现在,如果删除快照B,快照B中更改的块但在shapshot C中随后未更改的块将前滚到快照C中,这样您仍然可以在快照C点恢复整个卷,并且快照C将是一个30 GB的快照。

这是一个过于简单化的原因,因为很可能某些相同的块会从A - >更改。 B和B - > C使C的最终版本略小于30 GB,但确实传达了一般的想法。每个快照都是单独用于恢复目的,但EBS的内部工作仅存储与先前快照的差异,并且您只需为快照包含的数据量支付存储空间。不幸的是,目前还没有办法通过API找出每个快照的实际大小,因为这些信息没有公开......它们总是显示与卷的大小相同。

无法自动清除快照。对于我的系统,我编写了一个每天运行一次的脚本,根据标签查找快照卷。然后,它根据我的保留策略考虑哪些卷具有足够的快照,并删除任何其他快照 - 但它只会删除它本身创建的快照,并且这又基于快照脚本应用于它创建的快照的标记