Cuando se afronta la configuración de una máquina virtual, una de las dudas que se suelen plantear gira en torno a la definición de los discos virtuales. Hoy en día, todos los software de máquinas virtuales (VirtualBox, VMWare, ...) ofrecen la posibilidad de elegir si los ficheros de imagen de los discos virtuales van a ser estáticos o dinámicos.
Los discos virtuales estáticos reservan el espacio
completo de la capacidad de la máquina virtual en el momento de su
creación. Por el contrario, las imágenes dinámicas se inicializan con
un tamaño pequeño y, según va siendo necesario más espacio, la imagen
del disco dinámico va creciendo. Este crecimiento es siempre 'a más' ,
ya que por mucho que se libere espacio en el sistema guest la imagen no va a ver reducido su tamaño salvo que se realice un procedimiento de compactación .
En
entornos virtualizados de producción la decisión más adecuada suele ser
la definición de discos con tamaño estático.El rendimiento de este tipo
de imágenes es más rápido y no se pierde rendimiento en reservas de
nuevo espacio en el host .
Sin embargo, en entornos de desarrollo, en los que el espacio de los discos del host suele ser un factor limitante, suele ser más interesante reservarlos de manera dinámica.
Situación
En
un entorno de trabajo con una máquina virtual con imágenes dinámicas es
probable que en un cierto momento el disco crezca de tamaño - por
ejemplo, en una instalación de un software - para después volver a ver
reducido su tamaño. Cuando esto ocurre, la imagen no ve reducido su
tamaño de nuevo.
Por ejemplo:
sobre una máquina Linux vacía,
con un disco dinámico de tamaño máximo 20GB y tamaño real de 1GB, vamos
a instalar un WAS. Para ello, es necesario copiar los binarios a la
máquina (1,5 GB ) , descomprimirlos (4 GB) , e instalarlos ( 2 GB) .
Además, durante el proceso de instalación se crean un conjunto de
ficheros temporales que pueden ocupar algún giga más. Al terminar el
proceso de instalación, es probable que el disco ocupe unos 10 GB,
cuando realmente sólo harían falta unos 3 GB.
¿Para qué
necesitamos un disco ocupando 10 GB en este caso? Podríamos borrar los
ficheros que no usamos. Escribimos los comandos rm que procedan y dejaríamos la máquina con esos 3GB ocupados - por ejemplo, se podría comprobar con el comando df de Linux - .Pero
el fichero de imagen sigue ocupando 10GB. ¿Cómo solucionarlo?
Utilizando las herramientas de compactación del software de máquina
virtual.
Compactando... (I)
Las
herramientas de compactación que ofrecen tanto VMWare como VirtualBox
localizan bloques en disco con ceros escritos, y liberan ese espacio del
fichero de imagen dinámica.
Por ejemplo, la herramienta de VirtualBox tiene la sintaxis
C:\Program Files\Oracle\VirtualBox\VBoxManage.exe modifyhd <ficheroImagen.vdi> -compact
Si
pasamos esta herramienta por nuestra imagen de disco gigante debería
devolverla a los 3GB esperados. Sin embargo, al ejecutarla sobre la
imagen de disco y después de un rato, vemos con gran pena que el tamaño
permanece inmutable.
¿Por qué?
Por la forma en la que los
sistemas operativos borran ficheros. Cuando un sistema operativo borra
un fichero lo que suele hacer es eliminarlo de las tablas de asignación
de ficheros, de manera que sus sectores vuelven a estar disponibles para
nuevos ficheros. Sin embargo, el espacio de disco no se escribe con
ceros.
¿Y entonces?
Pues habrá que escribir con ceros el espacio de disco no usado antes de compactar.
Zero-filling
Aunque
en Windows la solución es análoga, nos vamos a centrar en la solución
para Linux. Hay dos maneras principales de hacer la operación de
escritura a cero de la información de los bloques de disco vacíos. O
haciendo un wiping -borrado seguro- en cada operación de
borrado de ficheros - que degrada mucho el rendimiento de la máquina
virtual- , o haciendo una operación de mantenimiento de zerofilling de los bloques borrados antes de hacer la compactación. Esta será nuestra opción.
Los pasos siguientes son para CentOS / RHEL , aunque en otras distribuciones va a ser muy similar.
- Reiniciar la máquina virtual
- Pulsar <ESC> en el menú de grub.
- Seleccionar la opción en grub que arranque el sistema en modo rescue , o si no existe, localizar la opción que arranque el sistema de modo normal y pulsar la tecla <a> . Esto entrará el modo append de grub .
- Añadir, al final de la linea, la palabra single . Esto hará que Linux arranque en modo single user, sin red, pero con la posibilidad de desmontar el sistema de ficheros raíz.
- Una
vez que el sistema haya arrancado y esté en el prompt - un signo de
que todo ha ido correctamente es que llega al prompt sin pasar por una
pantalla de login - , habrá que desmontar el sistema de ficheros y
volver a montarlo en modo readonly. Para comprobar en qué
sistema de ficheros está montado / habrá que lanzar un comando mount y
comprobar la linea que contiene 'on / type'.
[root@virtual01 /]# mount/dev/mapper/vg_virtual01-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
(...)
En el caso del ejemplo, el sistema de ficheros a compactar es /dev/mapper/vg_virtual01-lv_root , que es un volumen LVM, aunque sería exactamente igual con volúmenes IDE , /dev/hdxY , SCSI o SATA, /dev/sdxY , etc. - A
continuación, habría que montar ese volumen en modo sólo lectura y lanzar el comando zerofill sobre el sistema de ficheros.
[root@virtual01 /]# mount -n -o remount,ro -t ext4 /dev/mapper/vg_virtual01-lv_root /
[root@virtual01 /]# zerofree /dev/mapper/vg_virtual01-lv_root - Sólo faltaría apagar la máquina
[root@virtual01 /]# shutdown -h -P 0
Una vez hecho esto, el sistema está listo para volver a intentar la operación de compactación.
Compactando... (y II)
Ahora si, podemos volver a intentar hacer la operación de compactación
C:\Program Files\Oracle\VirtualBox\VBoxManage.exe modifyhd <ficheroImagen.vdi> -compact
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%...
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%...
Si
todo ha ido bien el fichero de imagen de disco tendrá ahora un tamaño
muy similar al tamaño usado dentro del sistema de ficheros, y que se
puede consultar desde el sistema guest con, por ejemplo para Linux, un df .
No hay comentarios:
Publicar un comentario