在快照合并期间…被删除的交易被忽略?

例如,如果我在vmware / vbox中创build快照,并且在删除5GB文件后不久,快照增量文件将随着删除的文件内容增加5GB,以便通过恢复快照来恢复它。

如果稍后不是恢复快照,我select删除快照,以便将增量文件与基础磁盘合并。 据我所知,它将通过重放/合并创build/修改事务从快照带来的基础磁盘同步。

5GB文件驻留在快照中的逻辑是什么? 合并过程中不会在基础磁盘上重新创build。 它如何知道在合并期间跳过这个文件? 它只是寻找inode存在?

感谢fLo

你已经完全落后了:

如果您恢复到您的快照,则其中的任何内容都会重播(反向),并合并到拍摄快照的卷中。 这使得该卷与快照相同,并且快照被销毁。

如果删除快照,则什么都不合并; 快照被简单地销毁,并且已经拥有文件系统当前状态的卷保持不变。

我不能一直对vBox说话,但以下情况适用于VMware。

从具有活动快照的虚拟机中删除文件时,增量磁盘不会按已删除文件的大小增加。

我可以证实这一点,因为在对Michael的回答发表评论之后,我去了我的vSphere 5.5系统上进行testing。

考试

  1. select一个安静的辅助磁盘的虚拟机
  2. 在磁盘上制作一个10GB的虚拟文件
  3. 拍了一个虚拟机的快照
  4. 在同一个磁盘上创build一个1GB的虚拟文件
  5. 删除了这两个文件

结果
增量磁盘只有大约1GB的大小。

说明
当您考虑这个问题时,这是非常有意义的,因为增量磁盘是基于块的,而不是基于文件的。 如果同一个磁盘块在快照处于活动状态时碰巧被重写了10次,那么增量不会跟踪所有更改,只是该块的当前状态。


读取的IO模式通过在当前分支的最近快照(也就是增量磁盘)中查找所请求的块开始,然后在分支到达基础磁盘之前一直工作,直到find它为止。

通常,删除一个文件不会导致消耗块被清零,而是会更新让文件系统find块的指针被删除。 这可能有例外,但是让我们保持一般。

现在,当你删除快照时,你有效地说我喜欢这些块,并希望使它们“永久” 。 这样做会从有问题的快照中获取块并将其应用到父级。

另一方面回到快照就是说, 喜欢这些块,希望他们从来没有发生过 。 这样做会更改VM的磁盘指针以使用父项,忽略delta的内容并保留它们。

另外,还原!=删除。 您可以在不删除的情况下还原,并且可以根据需要多次恢复为快照。

最后一点与VMDK中的块有关。
如果您使用的是精简configuration磁盘,那么在操作系统请求写入磁盘之前,VMDK中实际上不存在任何块。 在那个时候,他们被清零,然后交给操作系统。 据推测,读取一个从未使用过的块只会导致hypervisor只返回零。

当你开始并随着时间的推移而增长时,这有利于使用更less的空间。 但是, VMDK永远不会缩小 。 好吧,无论如何,从虚拟pipe理员不是没有太多的努力。

Alaright,我在这里已经走了很久了,我确信我可以更好地措辞和组织这个答案,但我认为这是全部。