在VirtualBox中合并快照的最快方法?


48

我的vdi带有很多快照,例如50或70个快照。我想要一个具有当前状态的普通vdi。这些快照占用过多的磁盘空间,因此不需要作为快照。

我知道如果我打电话

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 times) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

我会得到我想要的。但这需要非常长的时间(考虑到我的硬件和16G的初始磁盘大小,需要5多个小时)。

而且,我当然尝试过VBoxManage snapshot delete,这很奇怪:在停止的计算机上不起作用,在运行的计算机上可能会失败,并且一旦发生故障,它将使所有后续调用都失败。

有没有办法从多个快照制作普通的vdi-更快?

$ VBoxManage --version
3.2.14r75509

(在ServerFault上提出要求,但认为此地点更适合此问题)


您使用的命令就是您要使用的命令,没有比这更快的方法了。
拉姆猎犬,2013年

导出整个VM怎么样?它的vdi会包含我想要的吗?
Andrey Regentov

你应该试试看。最后,由于虚拟机的大小,任何其他方法仍将花费一些时间。
拉姆猎犬,

Answers:


53

找到了解决方案。这就像我在此处编写的命令的最后一步一样简单。即

VBoxManage clonehd fullpath/{uuid-of-last-snapshot}.vdi thedisk-full.vdi

因此,我应该只克隆最后一个快照,而不克隆链中的每个快照。而且速度快了数千%。

uuid可以从以下位置找到 VBoxManage list hdds | grep VmName | tail

在GUI(在Windows上)中,选择VM,从右上角选择Snapshots,右键单击所需的快照,选择Clone ...,然后在对话框中选择Full Clone


thx,但是在我的设置中不起作用,它说该图像已经存在。您忘记了现有的吗?
安迪

3
如果您已经thedisk-full.vdi在磁盘上保存了文件,请先将命令中的名称更改为thedisk-full-new.vdi
Andrey Regentov

当然,全路径必须是在VirtualBox中注册的路径。符号链接不会工作,因为垂直框需要查找所有快照
安迪

不知道尾巴是做什么的,您是说“ tail -1”吗?
eckes 2015年

1
在VirtualBox 5中,clonehd不推荐使用该功能,clonemedium而是为了向后兼容而使用。
乔治·索维托夫

22

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

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

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

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


从VirtualBox 6.0.8开始,这仍然有效。
Paul Sturm

3

您可以尝试导出OVF,然后重新导入生成的文件。

正如解释在这里

OVF无法描述为虚拟机拍摄的快照。结果,当您导出具有快照的虚拟机时,只会导出该计算机的当前状态,并且导出中的磁盘映像将具有与该虚拟机的当前状态相同的“拉平”状态。

结果,您将具有一个克隆的VM,该VM具有当前状态,而没有其他快照。


我问有关vdis的问题,因为无法导出计算机-它已损坏(主机重新启动后无法访问状态),而我所拥有的只是一堆VDI-磁盘和大约五十个快照。
Andrey Regentov

0

该操作意味着在同一物理磁盘上读取和写入非常大的文件。加快速度的唯一方法是将这些文件放在不同的磁盘中,以更改VBoxManage命令中的路径。如果计算机只有一个磁盘,则可以通过网络共享使用外部USB驱动器,甚至可以使用另一台计算机中的磁盘(取决于网络速度)


1
通常,网络要比内部HDD接口慢几个数量级,因此这可能不会使过程更快。
Andrey Regentov

-2

有些具有10Gib / s的LAN,因此它每秒可以传输超过1 GB的数据,因此不会成为瓶颈。

有些具有1Gib / s的LAN,因此它每秒可以传输超过100兆字节,因此不会成为瓶颈(除非您拥有非常快的SSD)。

机械磁盘在同一时间在同一磁盘上进行读写(或碎片较多)时,每秒下降近20兆字节,而在非碎片磁盘上,仅读或仅写入每秒可以达到100兆字节以上。

您说的是LAN慢一些,但USB(2.0,更不用说1.1或1.0)慢了很多倍。

我的建议是:使用USB 3.1 Gen2 Type C或eSATA / SATA / SAS

但总而言之:使用第二个足够快的磁盘。

而且始终如此:克隆到另一个磁盘并复制回文件比仅使用其中一个磁盘要快得多,除非它是SSD或具有独立多头臂的硬盘(它们可以同时在两个磁盘上读写)表面的地方,每个头都有自己的手臂,非常昂贵,大约> 9876欧元)。

最好的做法是仅克隆所需状态的虚拟硬盘,然后检查其是否正常工作,然后还原顶层(将删除所有快照),然后删除存储上的HDD并连接该新硬盘。

因此,在无树快照方案上释放所有旧状态的步骤:

  1. 从一个硬键克隆到另一个硬键,避免瓶颈
  2. 创建一个新机器,连接该磁盘,断开连接,将其配置为不可变
  3. 测试它是否有效(因为它是不变的),您将拥有相同的状态
  4. 如果您需要它不是不变的,请将其断开连接,恢复为正常状态,等等。
  5. 删除旧计算机快照(先还原)
  6. 删除临时测试机
  7. 将虚拟磁盘复制回磁盘
  8. 附加克隆的磁盘

但总而言之,快照可以像一棵完整的树,一个节点可以有一个以上的孩子,每个孩子可以有一个以上的孩子,等等。

为了使用快照树,始终将DELETE视为删除节点而不使其余节点感到烦恼(仅松散该状态,但不保留其余状态,不让父项和子项烦恼,数据将在所有第一个子项上合并级别的子级,因此过程很慢),并且在RESTORE上销毁了所有子级别上的所有子级(在还原一个子级之后失去所有状态,它只会删除文件,因此过程非常快,只有几秒钟)。

那是!

PD:VBOX给这两个操作起了多么可怕的名字(仅删除一个节点= DELETE;删除所有子级别上的所有子节点= RESTORE)


恢复不会删除任何快照,只会删除当前(未保存)状态。
Melebius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.