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
qemu-img - QEMU disk image utility
Tal vez pueda interesarte