Reducir el tamaño de una máquina virtual Ubuntu en VirtualBox

Para compactar el disco virtual de una máquina virtual Ubuntu, no basta con hacer limpieza y eliminar archivos y carpetas. Es necesario hacer algo más…

Reducir el tamaño ocupado por el disco de una máquina virtual es una operación necesaria en sistemas con espacio de almacenamiento limitado.

Si estás pensando en hacerlo para una máquina virtual Linux Ubuntu  o si ya has empezado y estás teniendo problemas, puede que este artículo te interese.

Hoy trataré de explicar el procedimiento que yo seguí con zerofree, después de intentarlo varias veces de diferentes formas y sin éxito. No entraré al detalle de cómo liberar espacio en Ubuntu (eliminando logs, cachés, versiones viejas del kernel, etc) sino a cómo conseguir que ese espacio liberado permita la compresión del tamaño de la máquina virtual alojada en el host.

Nuestro escenario es el siguiente:
– Tenemos un PC con Windows 10 Pro, que hace de equipo anfitrión (o host) de la máquina virtual.
– En ese PC está implementada mediante VirtualBox una máquina virtual con sistema operativo Linux Ubuntu Server 18.04.

En la máquina virtual tenemos un disco de tipo dinámico. Esto quiere decir que el consumo de espacio de disco en el equipo anfitrión crecerá según vayamos usando el disco de la máquina virtual.
Para gestionar el disco virtual, VirtualBox utiliza un fichero VDI que es la imagen del disco y que está ubicado en el equipo anfitrión. El tamaño de este fichero aumenta en la medida que la máquina virtual requiere más espacio de disco.
El asunto es que el tamaño del fichero VDI nunca se reduce solo. Si la máquina virtual requiere más espacio en disco crecerá el fichero, pero si eliminamos datos del disco de la máquina virtual no se reducirá el tamaño del fichero VDI.

Ojo, en la máquina virtual sí se ve el espacio liberado en el disco tras eliminar archivos, nuestro problema lo tenemos con el tamaño del fichero VDI.
Por ejemplo, si tenemos una máquina virtual  con un disco de 20 GB y 10 de ellos están en uso, podemos eliminar 2 GB y comprobar con el comando df -h que Ubuntu ahora reconoce 12 GB libres y 8 en uso en la partición. Pero si después de hacer esto comprobamos en nuestro PC anfitrión el tamaño del fichero VDI, veremos que no ha cambiado.

Vale, pero existe una herramienta de Virtualbox para compactar el disco ¿verdad? Pues sí, la hay, pero fácilmente podemos comprobar que no reduce el tamaño del VDI si tan solo hemos eliminado archivos de la máquina virtual. Hace falta ‘algo más’.

Para resolver esto existe una herramienta para Ubuntu llamada zerofree, que busca los bloques de disco libres cuyo contenido no son ceros y los rellena con ceros. Esta operación permite que después podamos reducir el tamaño del fichero VDI.
Zerofree debe ejecutarse en la máquina virtual, para luego poder compactar mediante Virtualbox el fichero VDI.

Hay un problemilla, y es que Zerofree requiere que el sistema de archivos sobre el que vamos a actuar no esté montado. Si queremos hacerlo sobre el sistema de archivos raíz o tenemos una única partición, la cosa se complica un poco. Aquí fue cuando traté de hacerlo de varias formas propuestas en diferentes fuentes y en todas ellas había algún punto que a mi me fallaba.

Finalmente lo hice a mi manera, que puede que no sea la óptima, pero funcionó:

Cómo ejecutar Zerofree sobre el sistema de archivos raíz

Antes de nada, instalaremos Zerofree. Esto solo lo haremos la primera vez, si no lo teníamos previamente instalado:

$ sudo apt-get install zerofree

Después edito el fichero fstab, para cambiar la partición raíz (‘/’) a modo de sólo lectura, añadiendo la opción ‘ro’

$ sudo nano /etc/fstab

Salimos guardando los cambios y reiniciamos pulsando ESC para acceder durante el arranque al menú avanzado de Ubuntu (recovery mode) y seleccionar el acceso con root.

Una vez iniciado el sistema, ejecutamos zerofree nombre_particion (el nombre que tenga tu partición puedes comprobarlo con df -h). Esto puede tardar unos minutos, ten paciencia.

zerofree /dev/sda2

Y ahora, muy importante: hay que editar /etc/fstab para dejarlo como estaba antes de poner la opción ‘ro’ de solo lectura. Eso no vamos a poder hacerlo ahora porque hemos reiniciado el sistema después de editar fstab para montar el sistema de archivos en modo de solo lectura.

Para que se nos permita editar fstab y guardar los cambios, vamos a re-montar la partición en modo ‘rw’ (lectura-escritura) y después editaremos fstab para quitar la opción ‘ro’:

mount -o remount.rw /

Ahora ya podremos guardar los cambios que hagamos en fstab. Quitamos la opción ‘ro’ y lo dejamos como estaba inicialmente.

Al finalizar todo este proceso, podemos ver que el espacio libre en la partición sigue siendo el mismo si ejecutamos df -h. Para la máquina virtual no ha cambiado mucho, pero si ahora compactamos el disco virtual en el equipo anfitrión veremos que se nota lo que ha hecho zerofree.

Cómo compactar el disco virtual después de haber ejecutado Zerofree

Para compactar el disco virtual apagaremos primero la máquina virtual y después, ejecutaremos vboxmanage.exe que se encuentra en el directorio de instalación de VirtualBox, con los siguientes parámetros para indicar el disco virtual que queremos compactar:

vboxmanage.exe modifymedium disk C:\Ruta\De\Acceso\Nombre_del_disco.vdi -compact

Después de ejecutar este comando, ya podemos comprobar que el fichero VDI ha reducido su tamaño.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *