Añadir espacio de disco a una partición LVM

lvm partition
Table of Contents

Que es una partición LVM?

Una partición LVM, es como una capa de abstracción entre los discos físicos (disco duro de la computadora) y las particiones presentadas al sistema operativo. Lo que permite, por ejemplo:

  • fusionar varias particiones un un solo volumen lógico
  • cambiar el tamaño de las particiones
  • crear instantáneos
  • ….

Y todo eso mientras el sistema operativo este funcionando, lo que puede ser bastante útil el el caso de servidores por ejemplo.

Caso concreto

Aquí vamos a tomar un caso concreto, tengo una maquina virtual en VMware Workstation Player 17, con el sistema operativo Ubuntu Server funcionando y me falta espacio de disco.

En este caso, tendremos que parar la maquina virtual, ya que vamos a tener que expandir el tamaño del disco duro primero, antes de poder trabajar con la partición LVM.

Se puede proceder de varias formas, pero aquí para simplificar vamos a usar otra maquina virtual con una interfaz gráfica instalada, para poder modificar la tabla de particiones con GParted.

1. Añadir espacio de disco a la maquina virtual

Para expandir el disco virtual tendremos que ir en las opciones de configuración de la maquina virtual (y debe estar parada).

Una vez en los parámetros de configuración, hay que elegir el disco duro principal en los dispositivos de la maquina virtual, y picar en el botón «Expand».

En esa nueva ventana, vamos a poder incrementar la capacidad máxima del disco duro virtual, sin afectar al tamaño de las particiones. Es decir estado no asignado, en la tabla de particiones.

El siguiente paso sera modificar la tabla de particiones. Para incrementar el tamaño de la partición principal con el espacio libre añadido aquí.

2. Expandir la partición principal

Para lograrlo, hay varios métodos, aquí vamos a usar otra maquina virtual Linux con interfaz gráfica instalada, usando GParted.

2.1 Uso de GParted

En nuestro caso tendremos que añadir el primer disco virtual (el que hemos expandido) a esa maquina virtual. Y así poder modificarlo. Para eso hay que entrar en el menú de configuración de la maquina virtual. Luego, hay que añadir, un nuevo dispositivo, actuando en el botón «Add…», en la parte inferior.

Añadimos un disco duro, y picamos en el botón siguiente.

Luego tenemos que elegir la opción «Añadir disco existente» y «Siguiente». Finalmente elegir el archivo correspondiente al disco virtual de la otra maquina virtual. Antes de picar el botón «Finish» para agregarlo. Ahora el disco virtual aparece en la lista de dispositivos. Podemos cerrar esta ventana, arrancar la maquina virtual y abrir GParted. En este caso vamos a tener dos discos virtuales visibles en la aplicación :

  • /dev/sdba: el disco de la maquina virtual que estamos usando.
  • /dev/sdb: el disco que queremos modificar

Según el caso puede que haber mas discos, en la parte superior. Tendremos que elegir el disco que hemos añadido anteriormente (el que hemos expandido con mas espacio).

Aquí he añadido 20 Gb de memoria al disco, y como podemos ver, aparece en el estado no asignado. Tendremos ahora que expandir la partición principal /dev/sdb3. Para eso hay que hacer un clic derecho en esta partición y elegir la opción «Re dimensionar/Mover». Luego tendremos que expandir la partición hasta que el espacio libre siguiente sea a 0. Aceptar los cambios picando en el botón «Re dimensionar». En este momento los cambios están pendientes de validación. Podemos ver los detalles de las operaciones pendientes en la parte de abajo. Y Finalmente validar los cambios si to es correcto.

2.2 Extender la LVM

Ultima etapa para que el espacio añadido al disco duro sea efectivo. Es expandir el volumen lógico (LV) de la LVM, usando el shell Linux.

Primero vamos a usar el comando lsblk, para tener un mapa de la tabla de partición actual.

user@user:~$ lsblk
  NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  sda                         8:0    0   60G  0 disk 
  ├─sda1                      8:1    0    1M  0 part 
  ├─sda2                      8:2    0  513M  0 part /boot/efi
  └─sda3                      8:3    0 59,5G  0 part /
  sdb                         8:16   0  100G  0 disk 
  ├─sdb1                      8:17   0    1M  0 part 
  ├─sdb2                      8:18   0    2G  0 part 
  └─sdb3                      8:19   0   98G  0 part 
    └─ubuntu--vg-ubuntu--lv 253:0    0   78G  0 lvm  
  sr0                        11:0    1 1024M  0 rom

Aquí vemos, que el volumen físico sdb3 tiene un tamaño de 98 Gb. Que corresponde al tamaño inicial mas el espacio añadido anteriormente. Luego el volumen lógico ubuntu--lv dentro del grupo de volumen ubuntu--vg dispone solo de 78Gb de espacio. Que corresponde al tamaño inicial del volumen.

Vamos a usar un par de comandos mas para verlo con mas precisión. Pero a partir de este momento vamos a necesitar el acceso como usuario root usando sudo.

Volúmenes lógicos (LV) :

user@user:~$ sudo lvs
  LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv ubuntu-vg -wi-a----- <78,00g

Volúmenes físicos (PV):

user@user:~$ sudo pvs
  PV         VG        Fmt  Attr PSize   PFree 
  /dev/sdb3  ubuntu-vg lvm2 a--  <98,00g 20,00g

Grupos de volumen (VG):

user@user:~$ sudo vgs
  VG        #PV #LV #SN Attr   VSize   VFree 
  ubuntu-vg   1   1   0 wz--n- <98,00g 20,00g

Aquí tenemos toda la información para seguir adelante :

  • ubuntu-lv : El volumen lógico que queremos expandir con el espacio libre disponible (78 Gb -> 98 Gb).
  • ubuntu-vg : El grupo de volumen que contiene nuestro volumen lógico (98Gb).
  • /dev/sdb3 : El volumen físico que hemos expandido (98Gb).

Aquí podemos ver que la tabla de partición esta correcta. El espacio que hemos añadido al volumen físico es igual al del grupo de volumen. Y corresponde a la realidad. Pero en algunos casos, si modificamos la tabla de partición con fdisck por ejemplo. Según los casos, podemos tener valores diferentes y que la tabla de partición no este al día. En este caso usaremos el comando :

user@user:~$ sudo pvresize /dev/sdb3
  Physical volume "/dev/sdb3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
Una vez tenemos valores correctos tanto el grupo de volumen que en el volumen físico podemos extender el volumen lógico :
user@user:~$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from <78,00 GiB (19967 extents) to <98,00 GiB (25087 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.

Y finalmente re dimensionar el sistema de archivos :

user@user:~$ sudo e2fsck -f /dev/ubuntu-vg/ubuntu-lv
  e2fsck 1.46.5 (30-Dec-2021)
  Passe 1 : vérification des i-noeuds, des blocs et des tailles
  Passe 2 : vérification de la structure des répertoires
  Passe 3 : vérification de la connectivité des répertoires
  Passe 4 : vérification des compteurs de référence
  Passe 5 : vérification de l'information du sommaire de groupe
  /dev/ubuntu-vg/ubuntu-lv : 332341/5111808 fichiers (0.4% non contigus), 4872372/20446208 blocs
user@user:~$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
  En train de redimensionner le système de fichiers sur /dev/ubuntu-vg/ubuntu-lv à 25689088 (4k) blocs.
  Le système de fichiers sur /dev/ubuntu-vg/ubuntu-lv a maintenant une taille de 25689088 blocs (4k).

Ahora, todo listo el volumen lógico de la LVM se ha expandido con todo el espacio que le hemos añadido.