我以为 VDI 是虚拟磁盘映像,后来我了解到它也用于快照。所以我打开了快照文件夹,发现了一堆 VDI。到目前为止一切顺利。
然后我在某处读到 SAV 用于当前状态。这是真的吗?如果确实如此,那么我们应该只有一个 SAV 文件(因为虚拟机只有一个当前状态)。但是当我查看快照文件夹时,我发现了 2 个 SAV(和 2 个 VDI)文件。这是正常的还是我的机器已损坏?
那么 SAV 和 VDI 之间到底有什么区别?快照是否由每种类型之一代表?
如果重要的话,我使用的是 4.3.20 版本。
答案1
您正确地认为.vdi
文件是虚拟磁盘映像文件,并且它们被快照使用。
当创建快照时,.vdi
会创建一个新文件,其中存储了与快照的差异。这称为“差异存储”。
从技术上讲,快照记录了整个虚拟机状态,其中包括:全部连接的驱动器,但是大多数人在讨论快照链中单个 VDI(而非基本 VDI)的作用时,也使用该词作为“增量映像”、“差异映像”或“子映像”的同义词。 来源
拍摄快照后,VirtualBox 会为与机器关联的每个普通硬盘创建差异硬盘,以便在恢复快照时,只需删除预先存在的差异文件即可快速重置虚拟机虚拟硬盘的内容。 来源
您可以想象,当您需要从一个快照创建多个“分支”时,这将非常有用 - 每个快照的 VDI 将仅包含该快照添加的差异,而不包含基础 VDI 中存在的任何内容。例如,假设一个基础磁盘(快照)包含 50 GB 的文件和多个子快照,每个子快照添加 10 GB 的唯一数据。每个子 VDI 的大小仅足以存储其 10 GB 的数据,而不是包括基础磁盘中的 50 GB。
如果您打开虚拟媒体管理器(在 Windows 上为File→ Virtual Media Manager),您可以在“硬盘”选项卡中查看虚拟硬盘的树形视图。在这里您可以看到磁盘及其子磁盘。单击磁盘将显示其信息。
例如我有一个磁盘,其信息显示:
Foo.vdi
类型:普通的
位置:C:\VirtualBox VMs\Foo\Foo.vdi
存储详细信息:动态分配的存储
附加到:Foo(酒吧)
其最远后代的信息是:
{bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb}.vdi
类型:差分
位置:C:\VirtualBox VMs\Foo\快照\{bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb}.vdi
存储详细信息:动态分配差分存储
附加到:Foo
在此示例中,“Foo”是虚拟机的名称,“Bar”是第一个快照的名称。“{bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbb}”是最后一个快照的 UUID磁盘。
VM 的.vbox
文件包含描述 VM 的 XML 文档,包括其快照。VirtualBox
节点包含一个Machine
子节点,子节点可以包含Snapshot
节点。stateFile
此节点上的属性指定.sav
与此快照关联的文件(如果有)。
该
.sav
文件本质上是内存转储,但可能也存储了其他处理器信息(例如寄存器)。 来源
奇怪的是,他还说.sav
文件与快照无关,这是不正确的。
文件
.sav
始终包含完全的客人在某个时间点的状态。它确实不是包含存储在外部设备(如虚拟磁盘)上的任何信息。创建快照时,.sav
会创建一个文件,其中包含恢复当时客户机状态所需的 VM 状态,并为每个虚拟磁盘创建一个新的差异磁盘映像(不会以某种特殊模式附加以防止这种情况发生)。从现在开始,客户机磁盘写入请求将转到差异映像。恢复快照时,差异映像将被删除,因此创建快照后对磁盘的所有更改都将丢失。 来源
直接回答您的问题:
[...] SAV 用于表示当前状态。这是真的吗?
当机器的状态被保存时,当前状态当时保存在.sav
文件中。
[...] 我们应该只有一个 SAV 文件(因为虚拟机只有一个当前状态
当然,只有一个当前的状态,但.sav
快照创建的文件包含以前的状态。
[...] 我找到了 2 个 SAV(和 2 个 VDI)文件。这正常吗 [...]?
每种类型都有一个代表一个快照吗?
这是正常的。我假设如果快照是在虚拟机未运行时拍摄的,则可能存在多个没有.sav
文件的快照,因为没有要保存的执行(易失性)状态。如果您的机器在拍摄快照时正在运行,.sav
则会创建一个文件。
那么 SAV 和 VDI 之间到底有什么区别?
文件.vdi
是包含持久存储的虚拟磁盘。.sav
文件包含易失性状态信息的转储,可让您恢复机器的状态。它们一起有助于完全恢复通过快照创建的 VM 状态。
两者都可以独立使用。.sav
关闭虚拟机并保存其状态时也会使用文件。.vdi
文件还可以用作快照范围之外的持久存储。