Intro

Reconozco que quizás no sea lo más ortodoxo, pero tengo varios servidores proxmox corriendo como máquinas virtuales KVM en clusters de alta disponibilidad. Ésto me permite crear rápidamente nuevas máquinas virtuales lxc. El caso es que me funciona bien.

Sin embargo, a veces resulta que el espacio que habíamos asignado a la máquina proxmox se queda corto y hay que añadir más disco duro.

El proceso esquematizado es el siguiente:

  • Parar la máquina virtual proxmox
  • Aumentar el tamaño de la imagen de disco
  • Expandir la partición dentro del disco duro
  • Expandir el volumen virtual
  • Hacer que el sistema de archivos ocupe todo el espacio disponible

Vayamos por partes, como diría Jack el destripador.

Parar la máquina virtual proxmox

Esto que parece una tontada nos evitará problemas, ya que si tratamos de cambiar el tamaño de la imagen de disco de una máquina virtual en marcha la podemos liar parda.
Si está funcionando en el cluster, no debemos de olvidar decirle a éste que no gestione el recurso o la arrancará automáticamente tan pronto como la hayamos parado tantas veces como sea necesario.

Aumentar el tamaño de la imagen de disco

Primero copiamos la imagen original, no vaya a ser que la liemos:

# cp vm1.img vm1_20161116.img

Emplearemos el comando qemu-img resize. En nuestro caso la queremos aumentar en 100GB, por lo que haremos:

# qemu-img resize vm1.img +100G

Si hacemos un ls -lh veremos que el tamaño del archivo de imagen ha crecido en 100GB.

Expandir la partición dentro del disco duro

Una vez ampliado el disco, hemos de modificar la tabla de particiones del mismo. Para ello abrimos la imagen de disco en una máquina virtual nueva montada a partir de un Live CD de gparted.

No se nos debe olvidar desactivar la partición lvm que vamos a aumentar. Si no la desactivamos previamente, el sistema no nos dejará aumentar el tamaño. Para desactivarla seleccionamos la opción del desplegable que aparece al clicar con el botón derecho sobre ella.

Cuando apliquemos los cambios paramos la máquina virtual.

Expandir el volumen virtual

Por si gparted no hubiese ampliado el pv hasta el total disponible en el disco, empleamos el comando:

# pvresize /dev/vda3

En nuestro caso la partición que hemos aumentado es vda3

Expandir el volumen virtual

Para ello empleamos lvextend:

# lvextend -L+90G /dev/pve/data

El volumen que queríamos ampliar era data, que es donde se almacenan los contenedores lxc

Podríamos aumentar también root en el caso de que fuese necesario.

Hacer que el sistema de archivos ocupe todo el espacio disponible

Si miramos el espacio disponible después de expandir el volumen virtual nos llevaríamos un gran chasco. Resulta que el sistema no reconoce el total de GBs que hemos asignado. Si hacemos un lvdisplay el volumen LV datos tiene el nuevo tamaño, pero la salida del comando df -h nos indica que el nuevo espacio no está disponible para el sistema, por lo que tendríamos que expandir también el sistema de archivos.

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                                10M     0   10M   0% /dev
tmpfs                              2.4G  8.8M  2.4G   1% /run
/dev/dm-0                           25G   16G  7.3G  69% /
tmpfs                              5.9G   43M  5.9G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              5.9G     0  5.9G   0% /sys/fs/cgroup
/dev/mapper/pve-data                55G   51G  4.2G  93% /var/lib/vz
cgmfs                              100K     0  100K   0% /run/cgmanager/fs
/dev/fuse                           30M   28K   30M   1% /etc/pve

Para expandir el sistema de archivos empleamos el comando resize2fs:

# resize2fs /dev/pve/data

En algunos casos como CentOS, en lugar de resizefs hay the usar:

# xfs_growfs /dev/pve/data

Una vez acaba, el resultado muestra que si que se ha asignado a la partición correspondiente todo el espacio disponible:

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                                10M     0   10M   0% /dev
tmpfs                              2.4G  8.8M  2.4G   1% /run
/dev/dm-0                           25G   16G  7.3G  69% /
tmpfs                              5.9G   43M  5.9G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              5.9G     0  5.9G   0% /sys/fs/cgroup
/dev/mapper/pve-data               144G   51G   93G  36% /var/lib/vz
cgmfs                              100K     0  100K   0% /run/cgmanager/fs
/dev/fuse                           30M   28K   30M   1% /etc/pve

Pues como diría Bugs Bunny: Eso es todo, amigos.

Enlaces

Expanding a LVM partition to fill remaining drive space