例如,如果我在 vmware/vbox 中拍摄快照,然后很快删除一个 5GB 的文件,快照增量文件将随着已删除文件的内容而增加 +5GB,以便通过恢复快照来恢复它。
如果稍后我选择删除快照而不是恢复快照,那么它会将增量文件与基础磁盘合并。据我了解,它将通过重放/合并快照中的创建/修改事务使基础磁盘同步。
快照中驻留的 5GB 文件的逻辑是什么?合并期间不会在基础磁盘上重新创建它。它如何知道在合并期间跳过此文件?它只是寻找现有的 inode 吗?
谢谢 fLo
答案1
你完全搞反了:
如果你恢复到您的快照,则其中的任何内容都会被重放(反向)并合并到拍摄快照的卷中。这使得卷与快照完全相同,并且快照将被销毁。
如果你删除快照,根本没有合并任何内容;快照只是被销毁了,而已经具有文件系统当前状态的卷保持不变。
答案2
我不一定能谈论 vBox,但以下内容适用于 VMware。
当您从具有活动快照的虚拟机中删除文件时,增量磁盘不会增加已删除文件的大小。
我可以证实这一点,因为在对 Michael 的回答发表评论之后,我去我的 vSphere 5.5 系统上进行了测试。
考试
- 选择具有安静辅助磁盘的虚拟机
- 在上述磁盘上创建了一个 10GB 的虚拟文件
- 拍摄虚拟机快照
- 在同一磁盘上创建了一个 1GB 的虚拟文件
- 删除了两个文件
结果
增量磁盘最终大小只有约 1GB。
说明
仔细想想,这完全说得通,因为增量磁盘是基于块的,而不是基于文件的。如果在快照处于活动状态时,同一个磁盘块碰巧被重写 10 次,增量不会跟踪所有更改,而只会跟踪该块的当前状态。
读取的 IO 模式首先在当前分支的最新快照(又名增量磁盘)中查找所请求的块,然后沿着分支向上查找,直到到达基础磁盘,直到找到它。
一般来说,删除文件不会导致其已使用的块清零,而是更新指针,让文件系统找到已删除的块。这种情况可能存在例外,但我们还是以一般情况为例。
现在,当你删除快照时,你实际上是在说我喜欢这些积木,并希望让它们“永久”这样做会从相关快照中获取块并将其应用到父级。
另一方面,恢复到快照实际上就是在说我不喜欢这些街区并希望它们永远不会发生这样做会将虚拟机的磁盘指针更改为使用父级,忽略增量的内容并保留它们。
此外,恢复 != 删除。您可以恢复而不删除,并且可以根据需要多次恢复到快照。
最后一点与 VMDK 中的块有关。
如果您使用的是精简配置磁盘,那么在操作系统请求写入之前,VMDK 中实际上不存在任何块。此时,它们将被清零,然后移交给操作系统。据推测,读取从未使用过的块只会导致虚拟机管理程序返回零。
这样做的好处是,当你开始并随着时间的推移而增长时,占用的空间更少。然而,VMDK 永不缩小。好吧,无论如何,虚拟管理员都需要付出很多努力。
好吧,我在这里已经说得够久了,我相信我可以更好地措辞和组织这个答案,但我认为它就在那里。