LVM RAID-1 con Linux

Ya he hablado sobre LVM en Linux hace un tiempo. Hoy quiero darle un repaso a otras opciones del gestor de volúmenes lógicos. RAID-1 sobre LVM.

Aunque hace bastante que no escribo, (parece que tenía las ganas en confinamiento) este tema de los sistemas de ficheros me gusta bastante y no quiero desaprovechar la ocasión de aprender un poco más mientras lo comparto.

En esta ocasión cuento con tres discos virtuales. El disco donde tengo el sistema operativo, Debian 9, y dos discos de 4GB.

Y lo que pretendo conseguir hoy es:

  1. Crear un grupo volumen con dos volúmenes lógicos en RAID-1(espejo).
  2. Quitar uno de los discos e intentar recuperar el espejo en un nuevo disco vacío.
  3. Añadir un tercer disco e intentar extender el grupo volumen en los tres discos, incluido el RAID-1. (Aquí tengo la duda de cómo manejará lvm el RAID-1 con tres discos)

¡Vamos allá!

Instalando lvm2 en Debian 9

Empiezo recordando cómo instalar lvm en Debian GNU/Linux o familia.

sudo apt update sudo apt dist-upgrade sudo apt install lvm2

Preparar un grupo volumen

Instalado lvm2, vemos los discos con lsblk.

Ejecución de lsblk

Voy a usar dos discos, sdb y sdc, para hacer el grupo volumen. Empiezo creando los volúmenes físicos:

sudo pvcreate /dev/sd{b,c} sudo pvscan
pvcreate y pvscan

Ahora creo el grupo volumen y le asigno los volúmenes físicos que lo forman inicialmente.

vgcreate vg_raid-1_01 /dev/sdb /dev/sdc vgscan vgdisplay
vgcreate

Definir un volumen lógico con espejo (RAID-1)

Tenemos el grupo volumen formado por dos volúmenes físicos. Pero para poder ser utilizable, recordemos que hay que definir al menos un volumen lógico. En este caso, para un RAID-1 necesito ejecutar:

lvcreate --mirrors 1 --size 3.8G vg_raid-1_01

Traduzco: crea un volumen lógico, con un espejo, de 3.8Gigabytes en el grupo volumen vg_raid-1_01.

Con lvdisplay, podemos ver que el volumen lógico /dev/vg_raid-1_01/lvol0 tiene dos volúmenes en espejo de 3.8GB cada uno.

Como con cualquier unidad, tenemos que darle formato. Voy a usar ext4 por ser, quizás la más extendida.

mkfs.ext4 /dev/vg_raid-1_01/lvol0

Experimentos con lvm RAID-1

A continuación lo monto y escribo algún fichero para empezar a hacer pruebas.

mount -t ext4 /dev/vg_raid-1_01/lvol0 /mnt cd /mnt echo "Este es mi ficherito para hacer experimentos" > mi_ficherito_lere.txt cd umount /mnt shutdown -h now

Quitando un disco al lvm RAID

Con la máquina apagada, quito uno de los discos del grupo volumen y reinicio. A ver qué pasa:

Pues detecta que el volumen lógico está incompleto, y lo desactiva.

Como existe una copia completa en cada uno de los discos, en este caso puedo pedirle que active el volumen advirtiéndole que está degradado.

lvchange -ay --activationmode degraded /dev/vg_raid-1_01/lvol0 mount -t ext4 /dev/vg_raid-1_01/lvol0 /mnt cd /mnt ls

He podido comprobar que está todo correcto. El fichero es accesible sin problema. Así que puedo desmontar y reiniciar.

cd umount /mnt shutdown -h now

Reparar el RAID añadiendo un nuevo disco

Ahora voy a intentar reparar el RAID-1. Para ello uso otro disco. Este disco va a ser de 8GB en lugar de los 4GB que tenía el anterior. Para LVM esto no debería ser un problema.

En primer lugar, compruebo que el disco está conectado con lsblk.

Ahí está, como sdc.

Lo defino como volumen físico:

pvcreate /dev/sdc

Y lo añado al grupo volumen con vgextend.

vgextend vg_raid-1_01 /dev/sdc

Con lvscan, vemos que el volumen lógico vuelve a estar inactivo. Parece que es necesario que esté activo para poder actuar sobre él y repararlo. Repito el comando para activarlo degradado.

lvchange -ay --activationmode degraded /dev/vg_raid-1_01/lvol0

Pese a los errores y advertencias, el volumen está ahora activo.

Puedo pasar a reparar el RAID usando el nuevo volumen físico, /dev/sdc.

lvconvert --repair /dev/vg_raid-1_01/lvol0 /dev/sdc/

Al hacer vgscan, vamos a ver que todavía se detecta la falta del disco duro anterior en el grupo volumen. Esto no queda bien. Voy a evitar que salga este error quitando los volúmenes físicos que no estén disponibles del grupo volumen.

vgreduce --removemissing vg_raid-1_01

Leo por ahí que es conveniente forzar una resincronización de los discos. Para conocer el estado de sincronización, uso el comando lvs, o lvs -a. Si el parámetro Cpy%Sync está al 100,00%, está todo correcto, si no, será recomendable forzar la sincronización con:

lvchange --syncaction repair /dev/vg_raid-1_01/lvol0

LVM RAID-1 con tres discos

Aquí se dan varias posibilidades. Las enumero:

Tres discos iguales y tres copias en espejo: Una copia en cada disco.

| mirror 0 | mirror 1 | mirror 2 |
|              lv01              |
|               vg               |
|   pv-1   |   pv-2   |   pv-3   |
| /dev/sdb | /dev/sdc | /dev/sdd |

Tres discos distintos y tres copias en espejo. Cada copia no puede ser más grande que el disco más pequeño.

| mirror 0 | mirror 1 |000000| mirror 2 |00000000000|
|======= lv01 ========|000000|== lv01 ==|00000000000|
|======================= vg ========================|
|   pv-1   |       pv-2      |         pv-3         |
| /dev/sdb |    /dev/sdc     |       /dev/sdd       |

Tres discos iguales y dos copias. Se hacen espejos pero ningún disco tiene una copia completa de toda la información… Esto, para mi, es raro.

|    mirror 0    |   mirror 1    |
|              lv01              |
|               vg               |
|   pv-1   |   pv-2   |   pv-3   |
| /dev/sdb | /dev/sdc | /dev/sdd |

En este caso, en el disco físico sdc, contendría parte del espejo, pero un fallo en este disco, daría al traste con la seguridad que aporta RAID-1.

Pero, ¿por qué andarse con suposiciones? Vamos a ver qué hace realmente lvm si intento crear este esquema

Añado dos nuevos discos de 4GB. Ahora la máquina tiene cinco discos, tres de 4GB, uno de 8GB y el que tiene instalado el sistema operativo.

Deshago la configuración LVM anterior:

lvremove /dev/vg_raid-1_01/lvol0 vgremove vg_raid-1_01 pvremove /dev/sd{b,c,d,e}

Y vuelta a empezar:

pvcreate /dev/sd{b,c,d,e} vgcreate vg_3D_RAID /dev/sd{b,d,e} vgdisplay

Ya tengo un nuevo grupo volumen formado por tres volúmenes físicos. A ver qué pasa al intentar hacer un mirror.

Pues, como parecía lógico, al intentar crear un RAID-1, la unidad o volumen más grande que se puede construir está limitado por el tamaño del disco físico más pequeño.

Añadir un segundo espejo

Aquí, tengo un disco de 4GB que me sobra. ¿Y si añado un nuevo espejo al RAID? Pues tengo que convertir el volumen lógico a un volumen con dos espejos.

lvconvert -m2 /dev/vg_3D_RAID/lvol0 lvdisplay

Y hasta aquí la función de hoy. En otra ocasión, intentaré otras configuraciones, como RAID-5, 10… Y, ¿Podré trasladar los discos a otra máquina y volver a montar el tenderete?

¡A pasarlo bien!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: Carlos Alberto Sobrino Lusquiños
  • Finalidad: Gestión de consentimiento para la publicación y moderación de comentarios.
  • Legitimación: Gestión de consentimiento
  • Destinatarios: No se cederán los datos a terceros, excepto por obligación legal.
  • Derechos: Acceso, rectificación, supresión y portabilidad.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad