Previamente expliqué cómo utilizar la herramienta zerofree sobre un sistema de archivos raíz. El objetivo era recuperar el espacio en disco (físico) ocupado por bloques libres en el sistema de archivos virtual. Está claro que en un disco virtual (imagen en archivo) asignado dinámicamente (thin en jerga VMware), los bloques libres no contienen información útil y por ende no necesitan ser representados físicamente. De esta forma el archivo que contiene la imagen de disco aumenta su tamaño a medida que es necesario, hasta un límite que es el tamaño máximo asignado.

A continuación, voy a explicar cómo reducir una imagen de disco virtual (en VMware, VirtualBox y QEMU) para descartar el espacio ocupado por bloques libres rellenos con ceros.



VMware

Desde un host ESXi es posible utilizar la herramienta vmkfstools con la opción -K (--punchzero) indicando la ruta al disco (típicamente a partir de /vmfs/volumes):

vmkfstools -K /vmfs/volumes/...

En la jerga de VMware a este proceso se lo llama hole punching (pinchando, desinflando, agujeros de ceros).

VirtualBox

En un host VirtualBox se debe recurrir al utilitario VBoxManage (VBoxManage.exe en hosts Windows) junto con la opción --compact y la ruta a la imagen de disco:

VBoxManage modifyhd --compact disk.vdi

Por ejemplo:

emi@hal9000:/data/VM % ll -h
total 14880608
-rw-------  1 emi  wheel   8.5G Aug 10 13:49 W2008.vdi
-rw-------  1 emi  wheel   4.8G Aug 18 10:42 Devuan.vdi
-rw-r--r--  1 emi  wheel   931M Aug 12 10:06 Devuan.vdi.zip
emi@hal9000:/data/VM % VBoxManage modifyhd --compact Devuan.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
emi@hal9000:/data/VM % ll -h
total 12842336
-rw-------  1 emi  wheel   8.5G Aug 10 13:49 W2008.vdi
-rw-------  1 emi  wheel   2.8G Aug 23 12:56 Devuan.vdi
-rw-r--r--  1 emi  wheel   931M Aug 12 10:06 Devuan.vdi.zip

Se observa que, reduciendo el tamaño ocupado por los espacios en blanco (ceros), se recuperan 2 GB de espacio en disco en el host.

Cabe destacar que el subcomando modifyhd se llama ahora modifymedium, pero aún se mantiene por compatibilidad con versiones anteriores.

QEMU

Cuando se trata de máquinas virtuales QEMU, con discos virtuales en formato qcow2, no existe un subcomando específico de qemu-img para reducir la imagen descartando los bloques rellenos con ceros. Lo que debe hacerse es reconvertir la imagen utilizando el subcomando convert.

De acuerdo al manual de qemu-img:

    Image conversion is also useful to get smaller image when using a growable format such as "qcow" or "cow": the empty sectors are detected and suppressed from the destination image.

Por ejemplo, para compactar la imagen "alpine.qcow2" (por supuesto, siempre luego de haber ejecutado zerofree en el sistema operativo guest) ejecutar, con la máquina virtual apagada:

qemu-img convert -O qcow2 alpine.qcow2 alpine-compact.qcow2

Luego, una vez verificado el correcto funcionamiento de la máquina virtual y la integridad de los datos alojados en la imagen, reemplazar el archivo alpine.qcow2 por alpine-compact.qcow2 e iniciar la máquina virtual.

Referencias

VMware vSphere 5.5 Documentation Center - Removing Zeroed Blocks

VBoxManage modifymedium

qemu-img - QEMU disk image utility


Tal vez pueda interesarte


Compartí este artículo