
Hace poco he empezado a administrar servidores que soportan BBDD Oracle, en este entorno se necesita una gran capacidad de escalabilidad ya que en muchos casos las BBDD crecen a TB por semana, por lo que se hace un gran uso de LVM, así que esta vez he tenido que repasar todos los comandos de gestión.
Básicamente en un entorno donde se usa Logical Volumen Manager, la arquitectura básica podría ser como la anterior mostrada en el gráfico. Tres PV, osea 3 discos físicos que pertenecen todos a un VG, donde ese VG esta dividido en 3 LV. Debemos tener en cuenta que para Linux cada LV es tratado como si fuese un disco físico, por lo que puede ser formateado con cualquier sistema de archivos deseado. Una vez ese sistema de archivos se llena, se puede ampliar perfectamente, por ejemplo añadiendo un PV más al VG y así aumentando su capacidad.
Los comandos de administración LVM se crean con un prefijo que determina el objeto y con un sufijo que determina la acción a realizar, tenemos la siguiente tabla:

Para este post, he creado una VM con un disco principal donde esta instalado el SO y otros tres discos de 10GB, que serán destinados para Backups:

Comprobamos que los discos hayan sido detectados:
root@deividsdocs:~# dmesg | grep "\[sd.*\].*blocks" [ 2.204715] sd 2:0:0:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB) [ 2.521547] sd 3:0:0:0: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB) [ 2.910475] sd 4:0:0:0: [sdc] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB) [ 3.319112] sd 5:0:0:0: [sdd] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)
Los 3 nuevos discos han sido detectados, son: sdb, sdc y sdd. Ahora vamos a indicar que estos 3 nuevos discos serán tratados como volumenes fisicos (PV):
root@deividsdocs:~# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created. root@deividsdocs:~# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created. root@deividsdocs:~# pvcreate /dev/sdd Physical volume "/dev/sdd" successfully created.
Ahora vamos a crear un grupo de volumenes que contenga estos tres volumenes físicos:
root@deividsdocs:~# vgcreate backups_vg /dev/sdb /dev/sdc root@deividsdocs:~# vgextend backups_vg /dev/sdd
La primera vez usamos vgcreate y para añadir el disco restante, podemos usar vgextend, siempre indicando el VG al que lo queremos añadir. Si echamos un vistazo ahora a nuestro volumen veremos que su capacidad total es de la suma de los tres discos, en este caso 30GB:
root@deividsdocs:~# vgdisplay --- Volume group --- VG Name backups_vg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size <29,99 GiB PE Size 4,00 MiB Total PE 7677 Alloc PE / Size 0 / 0 Free PE / Size 7677 / <29,99 GiB VG UUID zRLcF4-ShSK-OY3N-9zd8-7h1r-Anss-v8qTr4
Ahora vamos a crear dos LV, uno de 20GB y otro de 5GB:
root@deividsdocs:~# lvcreate -L20G -n datos_lv01 backups_vg Logical volume "datos_lv01" created. root@deividsdocs:~# lvcreate -L5G -n datos_lv02 backups_vg Logical volume "datos_lv02" created.
Ahora que ya estan creados los volumenes logicos podemos visualizarlos ejecutando lvdisplay o lvs (salida resumida):
root@deividsdocs:~# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert datos_lv01 backups_vg -wi-a----- 20,00g datos_lv02 backups_vg -wi-a----- 5,00g
Estos LV no tienen un formato de archivo ni están montados aun, así que vamos a darle formato a cada uno y los montamos en el sistema. Primero formateamos el volumen de 20GBG con EXT4:
root@deividsdocs:~# mkfs -t ext4 /dev/backups_vg/datos_lv01 mke2fs 1.44.6 (5-Mar-2019) Creating filesystem with 5242880 4k blocks and 1310720 inodes Filesystem UUID: 844a51e5-f598-44c9-965b-8840577dd646 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
Como podéis observar la ubicación que usamos del disco ya no es: /dev/sdb ni cualquier otra, en este caso los LV se ubican en la ruta: /dev/NOMBRE_VG/NOMBRE_LV. En este ejemplo: /dev/backups_vg/datos_lv01.
Ahora formateamos el otro en XFS:
root@deividsdocs:~# mkfs -t xfs /dev/backups_vg/datos_lv02 meta-data=/dev/backups_vg/datos_lv02 isize=512 agcount=4, agsize=327680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=1310720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
Y procedemos a montar ambos discos en el sistema:
root@deividsdocs:~# mkdir /mnt/datos_1 root@deividsdocs:~# mount -t ext4 /dev/backups_vg/datos_lv01 /mnt/datos_1 root@deividsdocs:~# mkdir /mnt/datos_2 root@deividsdocs:~# mount -t xfs /dev/backups_vg/datos_lv02 /mnt/datos_2
Ahora si ejecutamos un df -h podemos ver los LV montandos:
root@deividsdocs:~# df -h Filesystem Size Used Avail Use% Mounted on udev 862M 0 862M 0% /dev tmpfs 180M 1,1M 179M 1% /run /dev/sda1 9,8G 6,6G 2,8G 71% / tmpfs 898M 7,1M 891M 1% /dev/shm tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 898M 0 898M 0% /sys/fs/cgroup tmpfs 180M 8,0K 180M 1% /run/user/1000 tmpfs 180M 0 180M 0% /run/user/0 /dev/mapper/backups_vg-datos_lv01 20G 45M 19G 1% /mnt/datos_1 /dev/mapper/backups_vg-datos_lv02 5,0G 38M 5,0G 1% /mnt/datos_2
Ahora supongamos que uno de nuestro discos se llena, vamos a forzar que el de 5GB se llene:
root@deividsdocs:/mnt/datos_2# dd if=/dev/zero of=./backups.dmp bs=900M count=5 oflag=dsync 5+0 records in 5+0 records out 4718592000 bytes (4,7 GB, 4,4 GiB) copied, 11,2777 s, 418 MB/s
Con la orden anterior hemos escrito un fichero de 4,4GB que ha ocupado el 89% del LV. Ahora necesitamos ampliarlo, para ello añadiremos otro disco más a nuestra maquina virtual y realizaremos los mismos pasos para establecerlo como PV y añadirlo al VG:
root@deividsdocs:~# pvcreate /dev/sde root@deividsdocs:~# vgextend backups_vg /dev/sde
Ahora los extenderemos 10G más de la siguiente forma:
root@deividsdocs:~# lvextend -L10G /dev/backups_vg/datos_lv02
Ahora el LV ya tiene el nuevo espacio, pero este espacio libre aun no ha sido formateado en XFS, por lo que tendremos que redimensionar el sistema de archivos para que ocupe todo el espacio disponible. En este caso como era XFS, usaremos xfs_grow:
root@deividsdocs:~# xfs_grow /dev/backups_vg/datos_lv02
Estas son las operaciones más simples que podemos realizar con LVM. Así que si lo tenías un poco olvidado como yo, ¡A repasar! 😉