Cómo compactar archivos VDI de VirtualBox para que usen menos espacio

Los que trabajamos con VirtualBox estamos acostumbrados a las bondades de virtualizar un sistema operativo dentro de otro, ya sea para aprender a usar un sistema nuevo, para probar «cosas» que no quisiéramos probar en nuestro sistema si salen mal, para abrir archivos que pudieran tener virus, o incluso para probar software tan antiguo que necesitamos «simular» un Windows 2000 virtual para poder usarlo. 

Pero algo que a ningún novato le enseñan, y que a muchos les cuesta encontrar es un método detallado para compactar un archivo de disco virtual VDI luego de mucho uso.

Primero tenemos que saber cómo funcionan. Con VirtualBox podemos usar dos formatos de discos: estático o dinámico.

El disco estático asigna la totalidad de su capacidad desde el vamos, de modo que si creamos un disco estático de 25 GB, nos va a ocupar 25 GB reales en el disco del host. La contra es que aunque usemos menos de 1 GB de esos 25, el disco del host va a tener 25 GB reservados aunque no los usemos. Pero hay que destacar que los discos estáticos tienen un mejor rendimiento, justamente porque los sectores vacíos ya están asignados desde su inicio.

Pero si creamos un disco dinámico de 25 GB, comenzará ocupando unos pocos KB y se va a ir extendiendo a medida que lo vayamos llenando de archivos. Es interesante cuando no sabemos realmente cuanto espacio se va a consumir y no disponemos de espacio real y suficiente en el disco host. Pero la contra es que como estos discos dinámicos «emulan» la ubicación de los archivos en un disco, pueden ser un poquito más lentos ya que tratan de ocupar el espacio mínimo indispensable. Y la gran contra es que cuando trabajamos con sistemas virtualizados que tienen muchos movimientos de archivos (copiar, crear, y sobre todo, eliminar) el disco vdi virtual va acrecentando su tamaño de modo que cada vez más se acerca al tamaño real que se le asignó. Aunque borremos archivos, nunca van a achicarse solos, pero sí crecen hasta tener el tamaño designado. Y esa situación, muchas veces indeseable (porque de otro modo usaríamos discos estáticos!) es lo que vamos a tratar de solucionar con este tutorial.

Vamos a seguir una breve serie de pasos para adelgazar el archivo de disco VDI y que ocupe lo indispensable según su contenido. Veamos:

1) Primero tenemos que defragmentar el disco virtual VDI.

df_642

Se puede usar el defragmentador que viene con Windows, pero yo prefiero usar la herramienta gratuita Defraggler, de Piriform, que tiene una excelente interfaz de usuario que nos permite saber con certeza cómo va el proceso e incluso defragmentar archivos individuales. En la primer opción de menú vamos a desplegar la opción que dice «defragmentar espacio libre» para que junte todos los archivos al principio del disco duro virtual y deje la mayor cantidad posible de espacio vacío al final.

Tenemos que usar esa opción sí o sí porque la compactación de un disco duro virtual (o incluso si lo hiciéramos con una partición de disco físico) solamente puede llevarse a cabo «recortando» el espacio vacío al final de un disco.

Pero para asegurarnos que ese espacio vacío al final del disco, esté realmente vacío, vamos al segundo paso:

2) Nulificar el espacio vacío.

Como ya saben, se pueden recuperar archivos borrados de una computadora porque los datos siempre quedan guardados en el disco. Incluso cuando vaciamos la Papelera de Reciclaje de Windows, esos archivos simplemente dejan de estar visibles y disponibles para el usuario, pero los datos quedan grabados en el disco. Al borrar un archivo simplemente le decimos al disco que si quiere puede usar el espacio que ocupaba el archivo para guardar otros, pero Windows intenta no pisar archivos borrados durante un tiempo, y siempre que haya espacio libre suficiente, para que tengamos chances de recuperar algo que hayamos borrado por error.

La única manera de limpiar realmente ese «espacio vacío» en el disco, es nulificando ese espacio. Esto se hace con programas que vacían el contenido de cada sector marcado como libre en el disco, eliminando así toda traza de archivos eliminados.

Se pueden usar distintos programas para esto. Piriform también tiene su famoso CCleaner, que tiene una función de Borrado de Unidades, donde uno elige la opción de «borrar el espacio libre» y la cantidad de pasadas (con una sola nos alcanza para este caso).

Pero yo me siento más cómodo con el viejo y querido SDelete, el Secure Delete, de Mark Russinovich que forma parte de la suite SysInternals que le vendió a Microsoft hace unos años. De ahí bajaremos un zip lleno de interesantes herramientas, pero la que nos interesa aquí es el sdelete.exe:

sdelete

Este programita de DOS tiene un comando especialmente diseñado para nulificar espacio libre en discos virtuales. Así que sólo debemos ejecutar sdelete -z desde la misma unidad que queremos limpiar, y dejarlo hacer su trabajo. Puede tardar bastante si es un disco grande.

Si el disco tuvo muchos movimientos de archivos (se copiaron muchos, se eliminaron muchos), puede que no se haya defragmentado bien en una sola pasada y por ende no hayan quedado todos los archivos al comienzo del disco. Un truco que podemos usar en esos casos, es configurar el Windows del virtual para que no use archivo de paginación, así al reiniciar el virtual y abrir el defragmentador, tendremos disponible el espacio que usaba antes el archivo pagefile.sys, que a menos que le hubiéramos puesto un tamaño fijo desde el primer minuto que creamos el espacio virtual, es normal que esté muy fragmentado, y a veces bastante disperso (sobre todo si el virtual contiene versiones de Windows que sean XP o anteriores, que no hacían una muy buena gestión del archivo de paginación). Luego de defragmentar el espacio libre sin archivo de paginación, le damos otra pasada con SDELETE.EXE -z, y a su término, continuamos con el siguiente paso del tutorial. OJO: este párrafo deben usarlo sólo en casos de pequeños discos virtuales, donde el espacio libre sea muy valioso, en casos donde por ejemplo el disco pese 25-50 GB, de los cuales un 50% esté ocupado y el archivo de paginación use 2-3 de esos GB. En discos con más GB no se gana mucho realmente, a menos que el disco del host esté empezando a quedarnos chico, o que tengamos la suerte de que el pagefile.sys esté alegremente ubicado al final del disco (típico de Windows 98). Nótese que todavía no le vamos a volver a hacer crear el archivo pagefile.sys…

3) Compactar el archivo VDI con Virtualbox.

Virtualbox tiene en su carpeta de instalación un ejecutable que nos permite hacer una serie de cosas con los sistemas virtuales. Ahora que ya tenemos al disco virtual defragmentado y con el espacio libre realmente vacío, vamos a compactarlo quitando todo el espacio vacio al final.

Para esto vamos a abrir la consola de DOS en la carpeta de instalación de VirtualBox y vamos a ejecutar el siguiente comando:

VBoxManage.exe modifyhd «C:\Virtuales\el disco virtual.vdi» –compact

Deben remplazar «C:\Virtuales\el disco virtual.vdi» por la ruta completa al archivo de disco, y entrecomillar el nombre si tiene espacios.

Esta tarea puede tardar un buen rato en discos grandes, así que yo lo ejecuto antes de irme a comer 🙂

Cuando termine, vamos a notar cómo ahora el archivo VDI pesa menos que antes. Incluso puede que noten que el sistema virtual carga más rápido ahora.

No olvidarse, que si en el paso 2 le hicieron quitar el archivo pagefile.sys al virtual, ahora hay que volver a crearlo para que el sistema virtual se cargue con mayor rapidez.

 

Si te sirvió dale Me Gusta!

🙂

 

 

Temas relacionados

2 Respuestas

  1. Oscar Valerio Montes dice:

    Excelente post, lo segui tal cual y me funciono super bien, hice un update del SO y la VM quedo en casi 31GB, la maquina virtual era de Win 10, y luego del update me quedo un folder «Windows.old», luego de limpiar eso, me quedo en disco de la maquina virtual al doble de uso a pesar de que dentro de la VM salian poco mas de 10 GB de uso.

    Luego de seguir estos pasos mi vdi quedo con una tamaño de 16GB tal cual tenia la esperanza antes de seguir el post.

    Muchas gracias, me ayudo mucho el post.

  2. Sylcon Microsystem dice:

    Cuidado con el tema comillas, la gente luego se lía. No hay que poner comillas a la hora de ejecutar el comando. Por otro lado me ha dado un error al intentar hacerlo y es que hay que poner dos guiones antes de comapct «–comapct». Esto tampoco es mucho problema porque te salta la ayuda y ves el problema. Muchas gracias por la info y a ver si me funciona que estoy con ello jejeje. MAS SOBRE VIRTUALIZACION https://www.youtube.com/watch?v=6S0FpSS8bLM