¿La forma más rápida de combinar instantáneas en VirtualBox?

49

Tengo vdi con una gran cantidad de instantáneas tomadas, por ejemplo, 50 o 70 instantáneas. Quiero tener un vdi simple con un estado actual. Estas instantáneas ocupan demasiado espacio en el disco y no son necesarias como instantáneas.

Sé que si llamo

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

Conseguiré lo que quiero. Pero lleva mucho, mucho tiempo (más de 5 horas dado mi hardware y el tamaño de disco inicial de 16G).

Y, por supuesto, lo intenté VBoxManage snapshot deletey es extraño: no funciona en la máquina detenida, puede fallar al ejecutar la máquina y cuando falla una vez, fallará todas las llamadas posteriores.

¿Hay alguna manera de hacer vdi simple a partir de varias instantáneas, más rápido?

$ VBoxManage --version
3.2.14r75509

(lo solicité en ServerFault pero decidí que este lugar es más apropiado para esta pregunta)

Andrey Regentov
fuente
El comando que está usando es el comando que desea usar, no hay una forma más rápida.
Ramhound
¿Qué pasa con la exportación de toda la VM? ¿Su vdi contendrá lo que quiero?
Andrey Regentov
Deberías probarlo. Al final, cualquier otro método todavía tomará un tiempo debido al tamaño de la máquina virtual.
Ramhound

Respuestas:

53

Encontré la solución. Es tan simple como el último paso de los comandos que escribí aquí. Es decir

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

Por lo tanto, debería clonarhd solo la última instantánea, no todas las instantáneas de la cadena. Y es miles por ciento más rápido.

El líquido se puede encontrar en VBoxManage list hdds | grep VmName | tail

En la GUI (en Windows), seleccione la VM, seleccione Instantáneas en la parte superior derecha, haga clic con el botón derecho en la instantánea que desee, seleccione Clonar ... y seleccione Clonar completo en el cuadro de diálogo.

Andrey Regentov
fuente
gracias pero no funciona en mi configuración, dice que la imagen ya existiría. ¿Olvidaste el - existente?
Andy
3
si ya tiene un thedisk-full.vdiarchivo en el disco, primero cambie el nombre del comando a algo como thedisk-full-new.vdi.
Andrey Regentov
El camino completo debe ser el que está registrado en VirtualBox, por supuesto. Los enlaces simbólicos no funcionarán, ya que VBox necesita buscar todas las instantáneas
Andy
no estoy seguro de qué hace la cola, ¿quieres decir " tail -1"?
eckes
1
En VirtualBox 5, clonehdestá en desuso y se deja por compatibilidad con versiones anteriores, use clonemediumen su lugar.
George Sovetov
22

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 poder 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
A partir de VirtualBox 6.0.8, esto todavía funciona.
Paul Sturm
3

Puede intentar exportar a OVF y luego volver a importar el archivo generado.

Como se explica aquí :

OVF no puede describir las instantáneas que se tomaron para una máquina virtual. Como resultado, cuando exporta una máquina virtual que tiene instantáneas, solo se exportará el estado actual de la máquina, y las imágenes de disco en la exportación tendrán un estado "aplanado" idéntico al estado actual de la máquina virtual.

Como resultado, tendrá una máquina virtual clonada con el estado actual sin otras instantáneas.

StreakyCobra
fuente
Pregunto sobre vdis porque no se puede exportar la máquina: estaba roto (estado inaccesible después del reinicio del host), y todo lo que tenía era un montón de VDI: disco y unas cincuenta instantáneas.
Andrey Regentov
0

Esa operación significa leer y escribir archivos muy grandes en el mismo disco físico. La única forma en que puede acelerar eso es poner esos archivos en diferentes discos cambiando las rutas en su comando VBoxManage. Si la máquina tiene solo un disco, puede usar una unidad USB externa o incluso un disco en otra máquina a través de un recurso compartido de red (dependiendo de la velocidad de su red)

golimar
fuente
1
Por lo general, la red es un orden de magnitud más lento que la interfaz HDD interna, por lo que esto probablemente no acelere el proceso.
Andrey Regentov
-2

Algunos tienen LAN de 10Gib / s, por lo que puede transferir más de un gigabyte por segundo, por lo que no será un cuello de botella.

Algunos tienen LAN de 1Gib / s, por lo que puede transferir más de 100 megabytes por segundo, por lo que no será un cuello de botella (a menos que tenga un SSD realmente rápido).

Los discos mecánicos, cuando leen y escriben en el mismo disco al mismo tiempo (o están muy fragmentados), bajan cerca de 20 megabytes por segundo, mientras que en la lectura o escritura no fragmentada solo pueden llegar a más de 100 megabytes por segundo.

Dices que LAN es más lenta, pero no que USB (2.0, sin mencionar 1.1 o 1.0) es mucho más lento.

Lo que sugeriría sería: usar USB 3.1 Gen2 tipo C o un eSATA / SATA / SAS

Pero siempre: use un segundo disco lo suficientemente rápido.

Y de todos modos: la clonación en otro disco y la copia del archivo es mucho más rápida que usar solo uno de los discos a menos que sea un SSD o un disco duro con brazos independientes de múltiples cabezales (pueden leer y escribir al mismo tiempo en dos lugares de superficie, cada cabeza tiene su propio brazo, muy caro, alrededor de> 9876 €).

Lo mejor es clonar solo el disco duro virtual del estado que desee, luego verificar que funciona, luego RESTAURAR el nivel superior (eliminará todas las instantáneas), luego retire el HDD en el almacenamiento y conecte ese nuevo.

Entonces, pasos, para perder todos los estados anteriores en un esquema de instantáneas sin árbol:

  1. Clone de un disco duro a otro, evite cuellos de botella
  2. Cree una nueva máquina, conecte ese disco, desconéctelo, configúrelo como inmutable
  3. Pruebe que funciona (ya que es inmutable) tendrá el mismo estado
  4. Si necesita que no sea inmutable, desconéctelo, vuelva a la normalidad, etc.
  5. Eliminar las instantáneas de la máquina anterior (RESTAURAR primero)
  6. Eliminar la máquina de prueba temporal
  7. Copie nuevamente en el disco el disco virtual
  8. Adjunte el disco clonado

Pero siempre tenga en cuenta que las instantáneas pueden ser como un árbol completo, un nodo puede tener más de un hijo, cada hijo puede tener más de un hijo, etc.

Para trabajar con árboles de snoapshots, siempre piense en DELETE como eliminar un nodo sin afectar el resto de nodos (solo pierde ese estado, pero no hay descanso, ningún padre y ningún hijo se verán afectados, los datos se fusionarán en todos los primeros sub Niveles secundarios, proceso tan lento) y en RESTAURAR como la destrucción de todos sus elementos secundarios en todos los subniveles (perdiendo todos los estados después de aquel que restaura, solo elimina los archivos, por lo que el proceso es realmente rápido, solo segundos).

¡Es decir!

PD: Qué horribles nombres le dio VBOX a esas dos operaciones (eliminar solo un nodo = ELIMINAR; eliminar todos los nodos secundarios en todos los niveles secundarios = RESTAURAR)

Claudio
fuente
Restaurar no elimina ninguna instantánea, solo el estado actual (no guardado).
Melebius