La ruta del SysAdmin - LVM
¿Qué es LVM?
LVM son las siglas de Logical Volume Manager
, el gestor de volúmenes lógicos.
LVM es otra forma de abstraer de forma lógica el soporte físico en los discos, la ventaja de LVM es la transparencia y flexibilidad que tiene a la hora de poder aumentar la capacidad de un volumen de datos.
Con LVM se puede añadir un nuevo disco y ampliar el tamaño de un punto de montaje sin tener que migrar datos, eliminar discos antiguos y sin necesidad de desmontar el volumen. Además se puede realizar "en caliente".
Conceptos de LVM
- PV: Volúmen Físico o
Physical Volume
- VG: Grupo de Volúmenes o
Volume Group
- LV: Volumen Lógico o
Logical Volume
El PV sería lo más cercano al hardware, puede sen un disco, una partición, un dispositvo de bloque o incluso un Array completo.
Se deben configurar y gestionar unicamente mediante los comandos de lvm
El VG lo podemos considerar como un disco virtual que es extensible.
Son abstractos
en el sistema y no aparecen en /dev
Los LV forman parte de los VG y para entenderlo serían como particiones de un Volume Group.
Los LV aparecen como dispositivos de bloques
en /dev
para poderlos usar del mismo modo que se usa cualquier otra partición física.
Esquema LVM
![](https://soloconlinux.org.es/content/images/2024/07/Esquema-LVM.webp)
Cómo utilizar LVM
Vamos a utilizar el gráfico anterior para explicar como funciona y como se usa LVM.
En un equipo vamos a necesitar 4 particiones (y sus puntos de montaje respectivos) en las que posiblemente haya que aumentar el tamaño de estas particiones pues se prevee un crecimiento de los datos en el futuro:
- /opt/app_data
- /var/lib/mysql
- /var/log
- /var/repo
Disponemos de almacenamiento hardware que puede asignarse a nuestro Linux y en caso necesario se pueden agregar más dispositivos al equipo.
Creación de los PV
Seleccionaremos cada uno de los dispositivos hardware que queramos usar en LVM y con ellos crearemos un PV physical volume
para poder usarlo mediante los comandos de LVM.
Para crear un PV utilizaremos el comando pvcreate
Para visualizar los PV usaremos el comando pvdisplay
Ejemplo:
# Creamos con bucle un PV para los 4 primeros discos y 2 particiones
for PV in sda sdb sdc sdd sde1 sde2; do pvcreate /dev/$PV; done
# Visualizamos los PV creados
pvdisplay -C
PV VG Fmt Attr PSize PFree
/dev/sda lvm2 a-- 640g 640.0g
/dev/sdb lvm2 a-- 2000g 2000.0g
/dev/sdc lvm2 a-- 820g 820.0g
/dev/sdd lvm2 a-- 640g 640.0g
/dev/sde1 lvm2 a-- 524g 524.0g
/dev/sde2 lvm2 a-- 524g 524.0g
Creación de los VG
Ahora podemos agrupar si lo deseamos varios PV en un VG Volume Group
Para crear un VG usaremos el comando vgcreate
Para visualizar los VG usaremos vgdisplay
Ejemplo:
# Creamos VG y asignamos nombres
vgcreate vg_aplicaciones /dev/sda
vgcreate vg_mysql /dev/sdb
vgcreate vg_grupo1 /dev/sdc /dev/sde1
vgcreate vg_grupo2 /dev/sdd /dev/sde2
Podemos agrupar los discos en grupos de volúmenes como queramos, lo ideal sería agrupar discos dependiendo de las velocidades de escritura.
Creación de los LV
Ahora tan solo nos faltaría crear los volúmenes lógicos o LV Logical Volume
que serán los que vamos a usar para realizar el montaje.
Para crear un volumen lógico usaremos el comando: lvcreate
Para ver los LV disponibles el comando a usar es: lvdisplay
Ejemplo:
# Creamos LV y asignamos la capacidad de disco deseada
# LV para mysql asignamos solo la mitad disponible
lvcreate -n lv_mysql -L 1000G vg_mysql
# Visualizamos el/los LV disponibles
lvdisplay
--- Logical volume ---
LV Path /dev/vg_mysql/lv_mysql
LV Name lv_mysql
VG Name vg_mysql
LV UUID 3349a0-CB9o-YkeD-f451-05vn-cWTp99
LV Write Access read/write
LV Status available
LV Size 1000.0 GiB
....
En cuanto se crean los LV
estos aparecen como dispositivos de bloques en:/dev/mapper/
ls -l /dev/mapper
...
lrwxrwxrwx 1 root root 16 jul 19:03 vg_mysql-lv_mysql -> ../dm-0
ls -l /dev/dm-0
...
brw-rw---- 1 root root 16 jul 19:03 /dev/dm-0
Todo preparado para usar los LV
Con todo el proceso realizado de PV => VG => LV
podemos usar los LV como si fuesen particiones estándar del sistema.
- Formatear un LV:
mkfs.ext4 /dev/vg_mysql/lv_mysql
- Montar un LV:
mount /dev/vg_mysql/lv_mysql /var/lib/mysql
- Revisar el LV:
df -h /var/lib/mysql
Este proceso serviría de comprobación, para que el montaje se realizase automáticamente, deberíamos incluirlo en el fichero /etc/fstab
:
...
/dev/vg_mysql/lv_mysql /var/lib/mysql ext4 defaults 0 0
...
Ampliación del tamaño en LVM
Todo este proceso inicial, nos servirá para que el futuro si uno de nuestros puntos de montaje necesita más capacidad de almacenamiento la podamos extender en caliente.
Comandos para extender el LVM: lvresize
y resize2fs
Para poder ampliar un LV es necesario que el VG que usa tenga espacio libre disponible.
En nuestro ejemplo anterior, habíamos reservado la mitad del grupo de volumen, aproximadamente unos 1000g, si necesitamos ampliar el LV, siempre comprobaremos si hay espacio libre disponible:
## Ampliación del LV
# 1. Revisar espacio disponible en el VG
vgdisplay -C vg_mysql
Nos fijaremos en la última columna VFree
en nuestro caso indicará: 1000g
, como hay espacio disponible podemos proceder a asignar al LV
todo el espacio disponible:
# 2. Indicamos al LV el tamaño que debe de tener (toda la capacidad)
lvresize -L +100% vg_mysql/lv_mysql
# 3. Adaptar el LV al nuevo tamaño asignado
resize2fs /dev/vg_mysql/lv_mysql
Tras la ampliación comprobaremos con el comando df -h /var/lib/mysql
y veremos que su tamaño actual es de 2.000 Gb aprox.
Incluir nuevos discos
Si por algún motivo todo el espacio disponible ha sido consumido, podemos incluir nuevos discos mediante los comandos LVM para asignarlos a los VG
y los LV
que lo necesiten.
El procedimiento sería el siguiente:
- Crear un nuevo PV
Physical Volume
con el disco deseado:pvcreate /dev/sdN
- Extender un VG
Volume Group
con el nuevo PV creado:vgextend vg_mysql /dev/sdN
- Comprobar el tamaño disponible del VG expandido:
vgdisplay -C vg_mysql
- Proceder a ampliar el tamaño del LV
Logical Volume
en el que nos faltaba espacio, tal y como hicimos en el apartado anterior.
¿Cómo practicar todo esto?
No necesitas disponer de un servidor con un array de discos disponibles.
Recuerda que puedes virtualizar un servidor con VirtualBox, puedes agregar a la máquina virtual tantos discos virtuales como desees y así practicar sin miedo a romper nada.