jueves, 4 de septiembre de 2008

VirtualBox: Snapshots (combinar, fusionar o integrar)

Cuando trabamos con máquinas virtuales en VirtualBox, hay que tener claro que trabajamos con dos subconjuntos de archivos. Por un lado, tenemos los archivos que contienen las imágenes propiamente dichas de la máquina virtualizada (los archivos con extensión vdi; un archivo vdi por cada máquina virtual). Si no trabajamos con el concepto de snapshot, aquí se queda la cosa. Lo que hay que tener cuidado es que en el momento que creamos snapshots (instantáneas de la máquina virtual a las que podemos volver), todos los cambios que se hagan a partir de ahora en esa máquina virtual ya no se almacenan en el archivo vdi (padre o raiz) correspondiente, si no en otro archivo (también con extensión vdi) independiente asociado a cada snapshot que tomemos. Para tener esto claro, lo mejor es ir a la pantalla de preferencias de VirtualBox,

donde comprobamos que distingue entre la ubicación de los 'VDI files' padres, y las 'Machines'. En esta última ruta creará una subcarpeta por cada máquina virtual que tengamos, y dentro de ésta, una subcarpeta 'snapshot' donde se guardará un archivo por cada snapshot que saquemos de esa máquina virtual. Mejor verlo visualmente, porque así explicado resulta un 'galimatías':


Pero el motivo de la entrada era recoger un duda que siempre que trabajo con los snapshots de Virtualbox se me plantea:

¿Qué ocurre cuando, después de sacar un snapshot y trabajar con él durante un tiempo, decidimos que en lugar de descartarlo para trabajar con el estado anterior de la máquina (que suele ser lo habitual), queremos combinar o fusionar (merge) la imagen en disco del snapshot con la imagen en disco padre (o la imagen en disco del snapshot anterior, si tenemos varios snapshots anidados)?

Pues para ello seleccionamos el snapshot que queremos fusionar, y ejecutamos la orden 'Discard snapshot' usando el botón de la barra de herramientas correspondiente:


De esta manera conseguimos combinar (referido a la imagen en disco) el contenido del snapshot seleccionado con el vdi o snapshot anterior. Digamos que es una manera de 'dar por bueno' todo el trabajo realizado en el snapshot (en argot de sistema de control de versiones, es como si después de hacer un 'branch', hiciésemos un 'merge' dentro del 'trunk').