Car*_*ter 0 snapshot mongodb amazon-web-services
我对快照如何作为备份感到困惑。我当前正在运行一个脚本,该脚本每天晚上对mongo数据和日志进行快照。但是我看到的信息说快照是增量的,这使我感到困惑。它们是增量的吗?如果是这样,那是基础,我将如何重设基础?我宁愿每次都拍摄完整的快照。
另外,有人知道自动过期旧快照的方法吗?他们只是不断建立。
每个EBS快照都是一个独立的快照,如果将其还原到新卷上,则将为您提供与snahshot时该卷相同的卷。
但是,快照存储在S3中,其存储方式(以及存储方式的计费方式)是增量的。
Amazon EBS快照是增量备份,这意味着仅保存自上次快照以来已更改的设备块。如果您的设备具有100 GB的数据,但是自上次快照以来仅更改了5 GB的数据,则仅会将另外5 GB的快照数据存储回Amazon S3。即使快照是增量存储的,在删除快照时,仅删除其他快照不需要的数据。因此,无论删除了哪个先前的快照,所有活动快照都将包含还原卷所需的所有信息。此外,所有快照的还原时间都相同,从而提供了完整备份的还原时间,并节省了增量空间。
因此,在后台,该快照仅包含与先前快照相比已更改的块...但是还原快照并不意味着您必须将增量片段放回原处。EBS在后台自动为您执行此操作。
因此,假设您有一个100 GB EBS卷,并且按该顺序拍摄了快照A,B和C,但没有该卷的其他快照。
快照A的大小为100GB(可能更少,因为您从未写入的空间可能会从快照中消除)。
如果更改了20GB,则拍摄了快照B,该快照的大小将为20GB,但是如果还原了快照,则生成的卷将包含完整的100GB,因为它具有指向快照A的未更改数据的指针。
然后又更改了10GB,并创建了快照C。这将是10GB的快照,其中指向先前数据的指针指向B,而指向其余数据的指针指向A。同样,恢复该快照将在您拍摄快照C时获得全部卷。
现在,如果删除快照B,则快照B中已更改但后来在快照C中未更改的块将前滚到快照C,以便您仍可以在快照C的位置还原整个卷,而快照C将是30 GB的快照。
这是一个过分的简化,因为某些相同的块可能已从A-> B和B-> C进行了更改,从而使C的最终版本略小于30 GB,但它确实传达了总体思路。每个快照都出于恢复目的而单独存在,但是EBS的内部工作方式仅存储与先前快照的差异,并且您仅为快照所包含的数据量付费。不幸的是,目前,无法通过API找出每个快照的实际大小,因为此信息未公开...它们始终显示为与卷相同的大小。
无法自动清除快照。对于我的系统,我编写了一个脚本,该脚本每天运行一次,以根据其标签查找要快照的卷。然后,它会根据我的保留策略考虑哪些卷具有足够的快照,并删除所有其他快照-但它只会删除其本身创建的快照,并且这再次基于快照脚本应用于其创建的快照的标签。