Virtualbox, fusionando instantáneas y disco base

9

Tengo una máquina virtual con aproximadamente 30 instantáneas en ramas. La ruta de desarrollo actual es de 22 instantáneas más el disco base. La cantidad de archivos aparentemente está teniendo un impacto ahora en IO y en la computadora portátil de desarrollo que estoy usando (no sé si se trata de problemas de rendimiento del disco host con el tamaño total de 140 GB en muchos fragmentos, o simplemente el hecho de que es golpeando sectores distribuidos en muchos archivos).

Me gustaría fusionar la rama de desarrollo actual de las instantáneas junto con el disco base, pero no estoy seguro de si el siguiente comando produciría el resultado correcto. No puedo iniciar este disco después de que se complete el procedimiento (5-6 horas).

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

¿Alguien podría confirmar si este es el enfoque correcto o no?

Henrik
fuente
Para agregar información, el error que obtengo no es un error de VirtualBox, sino un error de arranque de Windows. Quiere iniciar la reparación de inicio, pero como no sé el error, no sé la solución. El inicio de Windows normalmente da como resultado una larga espera y una pantalla azul. ¿Es esto esperado o he usado el método incorrecto al clonar el disco?
Henrik
He utilizado VBoxManage (en el host de Windows, invitado de Ubuntu) como sugirió en su pregunta y fusionó correctamente las instantáneas en la imagen de disco de salida única
Chaulky
1
Sí, este es un enfoque correcto. Es mejor especificar solo el UUID de origen en lugar de su nombre de archivo, entonces está seguro de que VBox podrá resolver los archivos adjuntos.
rustyx

Respuestas:

7

Lo que desea hacer es desde el cuadro de diálogo de instantáneas, seleccione su instantánea principal que desea fusionar todas las instantáneas posteriormente en un solo VDI.

Según su descripción, parece que esta es la raíz del árbol.

Haga clic derecho y seleccione 'Eliminar instantánea'.

Esto hará lo que desee: fusionará todos los cambios de todas las instantáneas secundarias en un solo VDI.

Además, al clonar la imagen del disco que se encuentra en la última instantánea, también se fusionará el disco de diferenciación con su padre (y su padre, etc., hasta que llegue a un tipo de disco duro 'normal').

Sospecho que 'eliminar una instantánea' ejecuta el comando clonehd.

Verifique la configuración de su VM (específicamente IO APIC habilitado / deshabilitado) y asegúrese de que coincidan.

Adán
fuente
Supongo que esta es actualmente la única forma de hacerlo, sin embargo, es una forma de GUI manual, que requiere mucho tiempo y de múltiples clics.
Henrik
3

Si solo desea conservar una única instantánea, conviértala en su estado actual y luego exporte la VM y vuelva a importarla. Los dispositivos exportados no conservan su historial de instantáneas.

O puede usar este script vboxmerge.py para manejar la fusión por usted. Dada la cantidad de instantáneas que tiene, esperaría que el ciclo de exportación / importación sea más rápido.

John Hart
fuente
2

Aquí hay una técnica (probada en VirtualBox 4.3.4) que utiliza el comando 'Clonar' para fusionar y compactar todas las instantáneas a una nueva VM que contiene un solo archivo VDI:

  1. Cambie el nombre de la máquina virtual para que pueda reutilizar su nombre actual para la máquina virtual clonada (puede cambiar el nombre de la máquina virtual desde la pestaña 'Básico' de la configuración 'General').

  2. Haga clic derecho en la VM y ejecute el comando 'Clonar ...':

    • Establezca el nombre al nombre original de la VM.
    • Acepte los valores predeterminados restantes, es decir, Tipo de clon: 'Clon completo'; Instantáneas: 'Estado actual de la máquina'.
  3. Elimine la VM anterior (haga clic con el botón derecho en la VM y ejecute el comando 'Eliminar ...').

Stuart Rackham
fuente
0

Si su host es Windows o puede acceder a archivos VHD desde una ventana, hay un truco para Fusionar todos los cambios en padre, abuelo, etc.

Está utilizando la herramienta DiskPart y los dos comandos:

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

merge vdisk depth=#

Donde # es el número de niveles de jerarquía que desea mover, 1 para el padre directo, 2 para el padre principal, etc.

Lo hace en el lugar, mucho menos tiempo que la clonación, etc.

Recuerde, después de combinar todos los VHD intermedios se pueden eliminar (no los elimina por usted) y no olvide adjuntar a VirtualBox ese padre donde se fusionó.

Ejemplo:

Disk3.vhd es hijo de Disk2.vhd, Disk2.vhd es hijo de Disk1.vhd

Si desea en Disk1.vhd todos los cambios de Disk3.vhd simplemente use depth=2y seleccione Disk3.vhd. Si desea en Disk1.vhd todos los cambios de Disk2.vhd solo use depth=1seleccione Disk3.vhd.

Recuerde también que no hay necesidad de instantáneas feas de VirtualBox, puede usar el comando DiskPart create vdisk para crear un disco de diferenciación de uno existente (que también puede ser un disco de diferenciación, etc.), también puede crear un árbol enorme.

Para todo lo demás: el póster está utilizando VHD (no VDI), por lo que puede usar herramientas nativas como DiskPart y Disk Managment para acceder a esos discos fuera del Guest (en el Host, si Host es Windows).

Para usted, el póster: recuerde siempre tener una copia de seguridad completa antes de la fusión, el clon de VirtualBox no funciona en su lugar, crea un nuevo archivo (copia al escribir), pero la fusión de DiskPart funciona en su lugar (modifique el archivo, no cree uno nuevo).

Espero que pueda dar otro enfoque diferente ya que VHD / VHDX está en uso (no es válido para VMDK, VDI, etc., solo para Windows Host).

Nota: Windows 7 y versiones posteriores, XP y Vista pueden montar VHD con una herramienta externa M $, pero DiskPart no es compatible con VHD en XP y Vista ... todo esto también funciona en las ediciones de Windows HOME (7 y superiores), sin necesidad de un Edición SERVIDOR.

Laura
fuente