Virtualbox:如何将当前状态(快照)与磁盘映像合并

Virtualbox:如何将当前状态(快照)与磁盘映像合并

我们有一个名为 Jira 的虚拟服务器在 VirtualBox 4.0 下运行(主机是 Debian Squeeze)。在某个时间点,虚拟机无法启动,因此我们不得不从 GRML 救援 iso 启动。在此之前,我们创建了虚拟机的快照。修复启动问题后,虚拟机继续使用该快照作为其当前状态。这是 VBoxManage showvminfo jira 的输出:

Name:            jira
Guest OS:        Other/Unknown
UUID:            ef5260be-46d3-45cb-8c9d-9f9e322f9110
Config file:     /home/vbox/.VirtualBox/Machines/jira/jira.xml
Snapshot folder: /home/vbox/.VirtualBox/Machines/jira/Snapshots
Log folder:      /home/vbox/.VirtualBox/Machines/jira/Logs
Hardware UUID:   ef5260be-46d3-45cb-8c9d-9f9e322f9110
Memory size:     2048MB
Page Fusion:     off
VRAM size:       8MB
HPET:            off
Chipset:         piix3
Firmware:        BIOS
Number of CPUs:  1
Synthetic Cpu:   off
CPUID overrides: None
Boot menu mode:  message and menu
Boot Device (1): Floppy
Boot Device (2): DVD
Boot Device (3): HardDisk
Boot Device (4): Not Assigned
ACPI:            on
IOAPIC:          on
PAE:             on
Time offset:     0 ms
RTC:             local time
Hardw. virt.ext: on
Hardw. virt.ext exclusive: on
Nested Paging:   on
Large Pages:     off
VT-x VPID:       on
State:           running (since 2012-05-24T12:23:48.127000000)
Monitor count:   1
3D Acceleration: off
2D Video Acceleration: off
Teleporter Enabled: off
Teleporter Port: 0
Teleporter Address: 
Teleporter Password: 
Storage Controller Name (0):            jira.sata
Storage Controller Type (0):            IntelAhci
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  30
Storage Controller Port Count (0):      30
Storage Controller Bootable (0):        on
Storage Controller Name (1):            jira.ata
Storage Controller Type (1):            PIIX4
Storage Controller Instance Number (1): 0
Storage Controller Max Port Count (1):  2
Storage Controller Port Count (1):      2
Storage Controller Bootable (1):        on
jira.sata (0, 0): /home/vbox/.VirtualBox/Machines/jira/Snapshots/{e8bedcaa-278b-4b06-a825-1dddc9e4fdb3}.vdi (UUID: e8bedcaa-278b-4b06-a825-1dddc9e4fdb3)
NIC 1:           MAC: 080027ABB6DD, Attachment: Bridged Interface 'eth0.100', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps, Boot priority: 0
NIC 2:           disabled
NIC 3:           disabled
NIC 4:           disabled
NIC 5:           disabled
NIC 6:           disabled
NIC 7:           disabled
NIC 8:           disabled
Pointing Device: PS/2 Mouse
Keyboard Device: PS/2 Keyboard
UART 1:          disabled
UART 2:          disabled
Audio:           disabled
Clipboard Mode:  Bidirectional
Video mode:      720x400x0
VRDE:            enabled (Address 0.0.0.0, Ports 3389, MultiConn: off, ReuseSingleConn: off, Authentication type: null)
Video redirection: disabled
USB:             disabled

USB Device Filters:

<none>

Available remote USB devices:

<none>

Currently Attached USB Devices:

<none>

Shared folders:  <none>

VRDE Connection:    not active
Clients so far:     0

Guest:

OS type:                             Other
Additions run level:                 0
Configured memory balloon size:      0 MB

Snapshots:

   Name: beforeGRML (UUID: 70949bb5-985a-4ae6-ba28-3d0475434cf0) *

如你所见,快照被命名为beforeGRML。实际上我怀疑这个快照是当前的状态,并且磁盘映像是我们使用 GRML iso 恢复机器之前的状态。

我的问题:

  • beforeGRML 快照实际上是当前状态,这样正确吗?
  • 无论“当前状态”是什么,我都想将其与 VM 磁盘合并并且没有快照 - 该怎么做?

请注意,VM 托管在远程 Debian 服务器上,我使用 VBoxManage 命令行界面。(我尝试阅读文档,但仍然无法弄清楚所有这些“快照删除”和“快照恢复”会做什么。)

答案1

GRML 之前不是当前状态。它是您创建快照时的时间点的机器状态。

如果您想将当前状态合并到delete快照中, VirtualBox 的快照命令命名确实不直观。

从他们的手册(http://www.virtualbox.org/manual/ch08.html#idp15412176):

删除操作会删除快照(按名称或 UUID 指定)。此操作可能需要一段时间才能完成,因为与快照关联的差异映像可能需要与其子差异映像合并。

恢复到快照的状态你使用restore操作:

恢复操作将通过将虚拟机的设置和当前状态重置为快照的状态来恢复给定的快照(按名称或 UUID 指定)。机器的先前当前状态将丢失。此后,给定的快照将成为新的“当前”快照,以便后续快照插入到恢复的快照下。

答案2

获取特定快照状态的虚拟磁盘的另一种方法是使用 VBoxManage 克隆该虚拟磁盘。

要确定您克隆的虚拟磁盘,请打开以读取 .vbox 文件或使用 GUI 获取磁盘路径(我更喜欢使用完整路径而不是硬盘 ID)。

克隆...TheNameOfVirtualDisk... 会将所有以前的状态合并到新的状态中,同时保持所有快照不变。

然后,您可以在新机器上测试这个新磁盘,看看它是否符合您的要求以及是否能正常工作。

所以,如果出现问题,你除了一些时间之外不会损失什么。

更不用说,如果您只想摆脱快照树中间的一个快照……这很痛苦,VBox 使用的术语让很多人感到困惑。

但是,这样想你就会修复这个术语:删除快照不会丢失除了该时间点之外的任何其他内容(在内部,它会将该状态合并到所有子项中)。

让我用一个更复杂的例子来解释一下。您有一个顶层,有两个子节点,其中一个子节点也有两个子节点,而另一个子节点有三个子节点。顶层是 A(一个节点),第二层是 B(两个节点),第三层是 C(五个节点),因此树如下:

  • A1
  • A1 - B1
  • A1 - B1 - C1
  • A1 - B1 - C2
  • A1 - B2
  • A1 - B2 - C3
  • A1 - B2 - C4
  • A1 - B2 - C5

想象一下现在您想要摆脱 B1,那么当您删除 B1 时,差异磁盘需要合并到 C1 和 C2 上,因此 C1 和 C2 将成为 A1 的子磁盘;它并不像删除单个文件那么简单;这个 VirtualBOX 称之为删除 B1 快照。

现在来谈谈另一种愿望:想要丢失某个点之后的状态,让我看看那棵树,我想摆脱 B2 及其所有子节点,这样树上就不再有 B2 部分(意味着消除其子节点的所有级别),所以这会非常快,只需要删除一些文件(C3、C4、C5 和 B2);这在 VirtualBOX 中是不可能的,VirtualBOX 调用 RESTORE 是为了摆脱 C1、C2 和 C3,但不是 B2......您需要手动编辑 .VBOX 文件并手动完成该工作。如果恢复 A1 以摆脱 B2,您还会在此过程中丢失 B1、C1 和 C2。

所以一定要确定你做的事情!

是的,VirtualBOX 允许您摆脱 B2 及其所有子项,但不是一步到位,您需要两步:

  1. 恢复 B2,这样所有子节点都会被移除,他们的文件也会被删除
  2. 删除 B2,这样 B2 本身也会被删除,其文件也会被删除

希望现在可以更清楚一点...互联网上很多人都在谈论他们因为恢复 A1 并试图删除 B2 而丢失了所有的工作。

如果条款是“删除”和“销毁”,就不会造成如此大的混乱。

删除节点就是删除该节点而不触及其余节点(如果它有子节点,则合并所有子节点的状态,如果没有,则删除状态)。 销毁节点就是删除该节点及其所有子节点(只删除状态和所有子节点的状态)。

我不明白为什么 VBox 在谈论快照时会谈到 RESTORE,这会引起很多误解。

相关内容