Gestión eficiente de dispositivos de bloque con LVM
Aprenda a administrar dispositivos de bloque con LVM en esta guía práctica y práctica.
LVM o Logical Volume Management es una solución para una fácil gestión de dispositivos de bloques dentro del entorno GNU/Linux mediante bloques virtuales. La administración de discos en entornos Linux que utilizan LVM proporciona una vista de alto nivel de la estructura de los discos presentes en un sistema. Esto brinda mucha más flexibilidad a la hora de asignar almacenamiento a aplicaciones y usuarios. Los volúmenes creados con LVM se pueden cambiar de tamaño y mover casi a voluntad.
En este tutorial detallado, aprenderá cómo administrar eficientemente dispositivos de bloque usando LVM.
Te guiaré a través del proceso paso a paso de
Instalación de LVM
-
Creando LV lineal y rayado.
Resolviendo el problema del disco lleno
Eliminación de VI.
Antes de que veas algo de eso, repasemos rápidamente el concepto básico de LVM.
Conceptos básicos de LVM
Cualquiera que haya formateado un disco en el entorno Linux sabe que implica ciertos pasos y limitaciones como la cantidad de particiones virtuales y extendidas. Además, si crea la partición incorrecta, tendrá problemas.
Por ejemplo, si dejó poco espacio para /var/log, sus servicios web se detendrán si se queda sin espacio en disco.
¿Y cuál sería la solución? Agregue otro disco, formatee, partición y luego mueva su /var/log a esa ubicación. Es mucho trabajo, pero resuelve el problema. Ahora imagina si sucediera con particiones más importantes como tu ruta de base de datos de PostgreSQL (/var/lib/postgresql/XX/main), tu MongoDB (/var/ lib/mongo) o MySQL (/var/lib/mysql).
La ventaja de LVM es precisamente la gestión de estos dispositivos de bloques de una forma más inteligente que permite facilidades como la expansión de discos.
Básicamente, se toman los dispositivos de bloque, que pueden ser HDD, SSD o NVMe, y se agrupan en grupos de volúmenes que luego se consumen en volúmenes lógicos.
Por tanto, en la arquitectura LVM tenemos 3 elementos importantes, PV, VG y LV vinculados a sistemas de archivos:
PV: Volumen físico volumen físico o nuestro disco duro sin estar particionado.
VG: Grupo de volúmenes, grupo de volúmenes o conjunto de PV.
LV: Volumen Lógico, volumen lógico, es decir, nuestra partición.
En esta estructura, el LV termina siendo algo similar a la partición que tendrías en un disco duro. Pero en este caso forma parte de una estructura que puede involucrar uno o más discos.
En el orden de creación deberás seguir esta misma secuencia, crear tus PV, agruparlos en uno o más VG y finalmente crear los LV.
LV lineales y rayados
Dentro de LVM, tienes dos formas de consumir discos, o PV, una Lineal y otra Rayada.
El formato lineal hace que los discos que forman parte de un VG se consuman uno a uno. Digamos que si tengo dos discos de 1 TiB, primero se consumiría todo el 1 TiB del primer disco y solo entonces comenzaría a hacer uso del segundo disco.
El formato seccionado tiene la distribución de datos entre los dos discos, lo que lleva a un mejor uso del recurso y aumenta las IOP (operaciones de entrada/salida por segundo), una métrica de rendimiento del disco muy importante.
Creando el laboratorio LVM
Exploremos un poco de LVM ensuciándonos las manos. Cree una máquina virtual y agregue 3 discos adicionales además del disco principal.
En VirtualBox, debería verse similar a la siguiente imagen:
Si está en un entorno Linux con Vagrant y VirtualBox instalados, puede usar el Vagrantfile a continuación para crearlo de una sola vez:
Vagrant.configure("2") do |config|
config.vm.box = "centos/8"
config.vm.network "private_network", ip: "192.168.100.10"
config.vm.disk :disk, name: "disk01", size: "100MB"
config.vm.disk :disk, name: "disk02", size: "100MB"
config.vm.disk :disk, name: "disk03", size: "100MB"
config.vm.provider "virtualbox" do|vb|
vb.cpus = "1"
vb.memory = "512"
end
end
En este tutorial, utilizará la marca experimental para habilitar la función de creación de disco adicional. Para hacer lo mismo en tu terminal, exporta la variable VAGRANT_EXPERIMENTAL="disks"
antes de iniciar la máquina.
Una vez que tenga la máquina en funcionamiento, acceda a su terminal y, como usuario root, identifique si los discos están presentes con el comando lsblk:
Los tres discos sdb, sdc y sdd se utilizarán para crear LVM en mi caso.
Instalación de LVM
Instalar LVM es muy sencillo y básicamente consiste en instalar el paquete lvm2
presente en la mayoría de distribuciones de Linux.
Como uso Centos, usaré dnf para la instalación.
dnf install -y lvm2
Una vez que termine de instalar LVM, las siguientes utilidades estarán disponibles en la terminal:
Creando el primer volumen lógico
Como ya se mencionó, para crear el LV, primero debe crear el PV y el VG. Por lo tanto, comience creando el PV para cada disco adicional presente en nuestro sistema.
pvcreate /dev/sdd /dev/sdc /dev/sdb
Es posible ver estos PV mediante dos comandos: pvs y pvdisplay:
Ahora cree el VG agrupando estos HD en un solo grupo. Para hacer esto, use el comando vgcreate:
vgcreate /dev/sdb /dev/sdc /dev/sdd
Verifique los grupos de volúmenes usando los comandos vgs y vgdisplay:
Básicamente, en este punto, el grupo de volúmenes, vg01, actúa como un dispositivo de bloque grande que se dividirá en LV que se comportan como particiones. Al crear LV, debe especificar su nombre y tamaño:
lvcreate -L 50Mib -n lv_var_log vg01
De los parámetros reportados, tienes:
-L 50MiB: Determina el tamaño del espacio que se creará, en este caso 50MiB.
-n lv_var_log: Este es el nombre que se le da a LVM.< br>vg01: El grupo de volúmenes que se utilizará para crear este LV.
En este caso, al no especificarse la forma de consumo, te queda el Lineal por defecto.
Ahora puede formatear esta partición y montarla para su uso, pero primero visualicemos el nuevo disco que se encuentra en la ruta /dev/vg01/lv_var_log.
Utilice los comandos lvs y lvdisplay y podrá ver su formato lineal a través de dmsetup, una utilidad de administración de discos de bajo nivel.
Formatear y usar la partición es muy sencillo. Utilice el comando mkfs.xfs y luego podrá montar este LVM con el comando mount.
Resolviendo el problema de 'disco lleno' en LVM
Ahora que tiene un directorio montado, simulemos el famoso problema inicial del disco lleno.
Primero, consume tus 50 MiB de espacio. Puede utilizar el comando dd para este propósito.
dd if=/dev/urandom of=/mnt/var_log/large_file bs=1MiB count=50
En este comando, tiene los siguientes parámetros:
if=/dev/random: Dispositivo de caracteres para el archivo de entrada
of=/mnt/var_log/large_file: archivo de salida
bs=1MiB: Cantidad de datos para leer/escribir a la vez
count=50: Número de bloques que se escribirán
Leerás y escribirás 1 MiB a la vez, 50 veces, intentando generar un archivo de 50 MiB. Inmediatamente encontrará el siguiente problema:
Esto indica que no tienes más espacio en disco. A diferencia de una instalación sin LVM donde sería necesario agregar otro disco para solucionar este problema, con LVM simplemente expandirás tu lv_var_log con el comando lvextend:
lvextend -L +50MiB vg01/lv_var_log
Los argumentos son similares a lvcreate, pero en este caso. agregará más espacio en disco, de ahí los +50MiB.
Esto por sí solo no resolverá el problema. Debe informar a File Systems que debe utilizar este espacio. Utilice xfs_growfs:
vxfs_growfs /mnt/var_log
Esto resolverá el problema de espacio en disco y podrá crear su archivo. Utilizando el propio lvs, puede comprobar qué discos se están utilizando para servir este LV:
lvs vg01 -o +devices
Aquí, está agregando la salida de los dispositivos a la salida lvs.
Crear un volumen lógico seccionado
Como se mencionó, el LV rayado aprovechará la distribución de datos en un grupo de discos, aprovechando mejor el espacio y permitiendo mayores IOP.
Para crear un LV rayado, use el mismo lvcreate, pero ahora con el parámetro --stripes 2:
lvcreate -L 50MiB -n lv_striped --stripes 2 vg01
Si observa los discos a través de dmsetup, verá que el formato utilizado está rayado, lo que indica que los datos se distribuyeron. También puedes verlo a través de lvs como ya se mencionó.
Eliminación de VI
Eliminar un volumen lógico es sencillo. Simplemente use el comando lvremove e ingrese el LV que desea eliminar junto al VG:
lvremove vg01/lv_striped
Ultimas palabras
LVM es un poderoso aliado en la gestión de discos. Aunque la mayoría de las tecnologías en la nube no usan LVM directamente, todavía usan alguna variante de LVM como cLVM para soluciones de clúster.
Comprender cómo utilizar LVM no solo mejora su capacidad para administrar recursos de disco de manera efectiva, sino que también sienta una base sólida para comprender conceptos más avanzados como cLVM, que son integrales en soluciones de clúster complejas.