Virtualbox,合并快照和基础磁盘

Virtualbox,合并快照和基础磁盘

我有一个虚拟机,其中大约有 30 个快照在分支中。当前的开发路径是 22 个快照加上基础磁盘。文件数量似乎现在对 IO 和我正在使用的开发笔记本电脑产生了影响(不知道是主机磁盘性能问题,总大小为 140GB,包含大量片段,还是它影响了分布在大量文件中的扇区)。

我想将快照的当前开发分支与基础磁盘合并在一起,但我不确定以下命令是否会产生正确的结果。过程完成后(5-6 小时),我无法启动此磁盘。

vboxmanage clonehd "C:\VPC-Storage\.VirtualBox\Machines\CRM\Snapshots\{245b27ac-e658-470a-b978-8e62137c33b1}.vhd" "E:\crm-20100624.vhd" --format VHD --type normal

有人能确认这是不正确的方法吗?

答案1

您要做的是,从快照对话框中选择要将所有快照合并到单个 VDI 的父快照。

根据您的描述,这听起来像是树的根。

右键单击并选择“删除快照”。

这将执行您想要的操作 --- 它将把所有子快照的所有更改合并到单个 VDI 中。

此外 - 克隆最新快照中的磁盘映像 - 还会将差异磁盘与其父磁盘合并(以及其父磁盘,依此类推,直到获得“正常”硬盘类型)。

我怀疑“删除快照”会运行 clonehd 命令。

检查您的 VM 设置(特别是 IO APIC 启用/禁用)并确保它们匹配。

答案2

如果您只想保留单个快照,请将其设为当前状态,然后导出虚拟机并重新导入。导出的设备不会保留其快照历史记录。

或者你可以使用这个vboxmerge.py脚本来为您处理合并。考虑到您拥有的快照数量,我预计导出/导入周期会更快。

答案3

这里有一个技术(在 VirtualBox 4.3.4 上测试),它使用“克隆”命令将所有快照合并并压缩到包含单个 VDI 文件的新 VM:

  1. 重命名虚拟机,以便您可以重新使用其当前名称作为克隆的虚拟机(您可以从“常规”设置的“基本”选项卡中更改虚拟机名称)。

  2. 右键单击虚拟机并运行“克隆...”命令:

    • 将名称设置为虚拟机的原始名称。
    • 接受其余的默认设置,即克隆类型:“完整克隆”;快照:“当前机器状态”。
  3. 删除旧的虚拟机(右键单击虚拟机并运行“删除...”命令)。

答案4

如果您的主机是 Windows 或者您可以从 Windows 访问 VHD 文件,那么有一个技巧可以将所有更改合并到父级、祖父级等中。

它使用 DiskPart 工具和两个命令:

select vdisk file="whatever your file is, with full path"

merge vdisk depth=#

其中 # 是您要移动的层次结构级别数,1 表示直接父级,2 表示祖父级,等等。

它可以就地完成,比克隆等耗费的时间少得多。

请记住,合并后所有中间 VHD 都可以删除(它不会为您删除它们),并且不要忘记将合并的父级附加到 VirtualBox 中。

例子:

Disk3.vhd 是 Disk2.vhd 的子级,Disk2.vhd 是 Disk1.vhd 的子级

如果您想要在 Disk1.vhd 上对 Disk3.vhd 进行所有更改,只需使用depth=2并选择 Disk3.vhd。如果您想要在 Disk1.vhd 上对 Disk2.vhd 进行所有更改,只需使用depth=1并选择 Disk3.vhd。

还要记住,不需要丑陋的 VirtualBox 快照,您可以使用 DiskPart create vdisk 命令从现有磁盘创建差异磁盘(也可以是差异磁盘等),也可以创建一棵巨大的树。

对于其余所有事项:发布者使用的是 VHD(而不是 VDI),因此可以使用 DiskPart 和磁盘管理等本机工具从客户机(在主机上,如果主机是 Windows)访问该磁盘。

对于您,海报:请记住在合并之前始终进行完整的备份,VirtualBox 克隆不能就地工作,它会创建一个新文件(写入时复制),但 DiskPart 合并可以在就地工作(修改文件,而不是创建新文件)。

由于 VHD/VHDX 正在使用中,希望可以提供另一种不同的方法(对 VMDK、VDI 等无效,仅适用于 Windows 主机)。

注意:Windows 7 及更高版本、XP 和 Vista 可以使用外部 M$ 工具安装 VHD,但 DiskPart 在 XP 和 Vista 上不支持 VHD...所有这些也适用于 Windows HOME 版本(7 及更高版本),不需要服务器版本。

相关内容