jueves, 7 de mayo de 2009

Compactar archivos VDI de VirtualBox

En el portátil del trabajo (a partir de ahora, anfitrión con Windows Xp) utilizo VirtualBox y una máquina virtual (a partir de ahora, huésped con Windows Xp), en la que instalo todas las herramientas de desarrollo que necesito de manera que trabajo desde ella y no desde la máquina anfitriona. Con esto consigo aprovecharme de las ventajas de los snapshot cuando tengo que hacer algún cambio que entraña algún riesgo (porque siempre puedo retroceder al estado anterior) , además que me permite tener un entorno de trabajo (virtual, en este caso) limpio, únicamente con lo imprescindible para desarrollar. Todo lo relacionado con pruebas o novedades lo hago en otro huésped o directamente en el anfitrión. Otra de las ventajas es que puedo coger mi huésped de desarrollo, y ejecutarlo en cualquier anfitrión independientemente de su hardware o de su sistema operativo (lógicamente con VirtualBox instalado) sin necesidad de ningún ajuste en dicho huésped.

Pero a lo que iba, hoy he considerado oportuno hacer una copia de seguridad del archivo vdi (ojo, perdemos los snapshots, ya que se almacenan en otros archivos tal como explico aquí) por si tengo algún problema con el disco duro del equipo anfitrión. Y me encuentro que dicho archivo ocupa más de 8GB (cuando mi intención era grabarlo en un DVD+R DL, aprovechando la grabadora del portátil).

Lo curioso es que aunque el archivo vdi físicamente ocupa esos 8GB (es una imagen dinámica de 10GB, lo que implica que irá creciendo poco a poco hasta alcanzar ese valor) , si iniciamos el huésped y vemos el tamaño del espacio ocupado en la partición, me encuentro que es de poco más de 6GB: así que tengo 4GB libres en dicha partición (recordar que la imagen es dinámica con un límite de 10GB), y 2GB con respecto al archivo de imagen vdi que la contiene (todavía no hubo necesidad de que llegase a su tamaño máximo).

Por suerte, disponemos de la posibilidad de compactar dicho vdi, pero no sin antes tener que realizar algunas operaciones previas:

1.- (Opcional) Dentro del huésped, con una herramienta como CCleaner (o similar), liberamos el espacio que están ocupando temporales y demás información innecesaria.

2.- Dentro del huésped, con una herramienta desfragmentadora de hdd (en este caso he optado por Defraggler, gratuito y de los creadores de CCleaner), desfragmentamos la partición que queremos compactar.

3.- Todavía dentro del huésped, usamos alguna utilidad para sobreescribir con ceros el espacio vacío (libre) dentro de la partición (imprescindible pues sino VirtualBox no conseguirá compactar el vdi). Yo he utilizado SDelete, herramienta gratuita de la empresa Winternals (empresa comprada por Microsoft). Para utilizarla, abrimos una consola donde tengamos descomprimido el archivo descargado , y ejecutamos:
sdelete -c c:
poniendo cuidado de sustituir c: por la letra de la unidad de vuestra imagen virtual.

4.- Apagamos el huésped, cerramos VirtualBox, y ya desde una consola del anfitrión, nos vamos a la carpeta donde tengamos instalado VirtualBox, y ejecutamos VBoxManage.exe. Nos saldrá la lista de parámetros y opciones que admite. A nosotros nos interesa modifyhd. Así que ejecutamos:
VBoxManage.exe modifyhd
y nos saldrá la ayuda de este comando.
Lo que haremos es utilizar la opción --compact, en mi caso:
VBoxManage.exe modifyhd d:\vdi\desarrollo.vdi --compact

Tarda un rato, pero al final conseguimos lo que buscábamos (ojo, pues la opción --compact ha dejado de funcionar a partir de determinada versión de VirtualBox. En la 2.2.2 parecía que estaba resuelto el problema, pero en mi caso el proceso abortó al 80%, aunque consiguiendo compactar casi totalmente el vdi. En todo caso, los desarrolladores conocen tal regresión, y prometen solucionarlo completamente en la versión 2.2.4)

Ahora para finalizar, y con Imgburn (por cierto, ha salido una nueva versión recientemente, la 2.4.4.0) , ya puedo grabar mi imagen vdi sin ningún problema (ocupa 7GB).

3 comentarios:

-Neftalí- Germán Estévez dijo...

Muy útil.
Gracias por la explicación

Alejandro dijo...

Muy util y funciona correctamente.

Como comentario añadiré que tengo varias maquinas virtuales una en Windows 7 como anfitrion en casa y otra con windows xp como anfitrion en la oficina... la de la oficina se expandio pero no la de windows 7... extraño pero parece que funciona mejor en windows 7, uso virtualbox 3.14...

Gabriel dijo...

sdelete -c c:

cambió por

sdelete -z c: