Recuperar espacio en disco de imágenes raw en linux/proxmox

Para rentabilizar los costes asociados a cualquier proveedor de servicios cloud la mayoría (por no decir todos) juegan con vender mas recursos de los que se disponen físicamente en su infraestructura, es lo que comúnmente se conoce como «overprovisioning». Se juega con la idea que no todos los clientes consumirán el máximo de recursos asignados permitiendo así vender mas espacio en disco, memoria RAM o CPU de la que realmente se dispone.

Con este planteamiento luego cada proveedor deberá hilar fino para ofrecer un buen servicio optimizando sus costes y a su vez ofreciendo lo que promete sin caer en fallos de saturación de los recursos, pero eso es otro tema.

En esta entrada hablaré sobre como optimizar el uso en disco de los ficheros imágenes raw y como ejemplo utilizaré Proxmox, una muy buena plataforma para instalar un completo hypervisor con el que poder gestionar tus contenedores y vms virtuales.

Proxmox ofrece múltiples opciones para almacenar los «discos» de sus contenedores/vms sobre diferentes «storages backends»: zfs, btrfs, lvm, dir, ceph… cada uno con sus ventajas e inconvenientes recomendados según el caso de utilización de cada proyecto.

El mas sencillo es utilizar un directorio local, generalmente /var/lib/vz donde almacenar ficheros imágenes raw para cada contenedor o en el caso de vms como opción imágenes qcow2. Nos centraremos en el formato raw que básicamente son sparse files que aunque se puedan definir de un espacio «virtual» de varios gigas su contenido real será inicialmente mínimo y crecerá conforme se escriban datos en él.

El problema viene en que este tipo de ficheros, por defecto solo «crece» y no libera de forma automática el espacio ocupado por los datos borrados. De esta forma puedes tener ficheros raw que aunque su contenido en datos sea de por ejemplo 20 Gigas, tras varios meses de uso creando y borrando datos, su tamaño en el disco del hypervisor sea de muchos mas.

Para remediar este problema podremos utilizar la aplicación fstrim. Este programa libera los bloques no utilizados de los sistemas de ficheros montados. El procedimiento es sencillo, montamos el fichero raw, ejecutamos fstrim en el punto de montaje y desmontamos el fichero raw. Con esta sencilla operación podremos jugar con mejores garantías y optimizar el uso de disco par permitir «vender» de forma mas óptimas mas espacio del que realmente disponga el hypervisor.

Aquí un sencillo script para realizar esta operación en proxmox de forma automatizada:

#!/bin/bash
vmid=$(ls /etc/pve/nodes/`hostname`/lxc/)
list=$(echo "$vmid" | sed -r 's/.conf//g')
for i in $list; do
pct mount $i
fstrim /var/lib/lxc/$i/rootfs
pct unmount $i
done

Deja una respuesta

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

Este formulario guarda los datos que indiques de nombre, email y comentario para poder realizar un seguimiento de los comentarios dejados en cada entrada.