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

我们有一个名为Jira的虚拟服务器,在VirtualBox 4.0下运行(主机是Debian Squeeze)。 在某个时间点虚拟机无法启动,所以我们不得不从GRML救援ISO启动。 在这之前,我们已经创build了一个虚拟机的快照。 解决启动问题后,VM继续使用该快照,因为它是当前状态。 这是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) * 

正如你所看到的,快照命名为GRGR。 其实我怀疑这个快照是当前状态,磁盘映像是在我们用GRML iso恢复机器之前的状态。

我的问题:

  • 之前的GRML快照是否是当前状态是正确的?
  • 无论“现状”是什么,我想把它与虚拟机磁盘合并,没有快照 – 如何做到这一点?

请注意,虚拟机托pipe在远程Debian服务器,我使用VBoxManage命令行界面。 (我试过阅读文档,但仍然不知道“快照删除”和“快照恢复”会做什么。)

没有之前的GRML不是当前的状态。 这是您创build快照的时间点的机器状态。

如果您想要合并当前状态,您必须delete快照,VirtualBox对于快照命令的命名实际上是不直观的。

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

删除操作删除快照(由名称或UUID指定)。 这可能需要一段时间才能完成,因为与快照相关联的差分图像可能需要与其子差分图像合并。

恢复到使用restore操作的快照状态,请执行以下操作:

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

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

要确定你所克隆的是哪个虚拟磁盘,打开它来读取.vbox文件或使用GUI来获取磁盘path(我喜欢使用完整path而不是硬盘ID)。

克隆一个… TheNameOfVirtualDisk …给你所有以前的状态合并到新的状态,同时让所有的快照保持不变。

然后,你可以在新机器上testing这个新磁盘,看看它是否是你想要的,如果它工作。

那么,如果出现什么问题,除了一段时间之外,你什么都不会失去。

更何况,如果你想摆脱快照树中的快照…这是一种痛苦,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),所以只能删除一些文件(C3,C4,C5,B2)。 这是不可能在VirtualBOX中完成的,VirtualBOX调用RESTORE是为了摆脱C1,C2和C3,而不是B2 …您需要手动编辑.VBOX文件并手动执行此操作。 如果你还原A1来摆脱B2,那么在这个过程中你也会松动B1,C1和C2。

所以要确定你做了什么!

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

  1. 还原B2,所有的孩子被删除,他们的文件被删除
  2. 删除B2,所以B2自己删除,其文件被删除

希望现在可以有点清楚了……网上有很多人谈论失去他们所有的工作,因为他们RESTORE A1,试图删除B2。

如果条款已被删除和销毁,它不会造成太多的混淆。

删除一个节点就是摆脱那个节点而不接触其他节点(如果它有子节点合并它们的状态,如果不是只是删除状态)。 破坏一个节点就是摆脱一个节点及其所有子节点(只是删除状态和所有的子状态)。

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