Apuntes de como crear y modificar filtros de dispositivos LVM en sistemas GNU/Linux, concretamente en las distribuciones del sombrero rojo, esto es, Red Hat.

¿Cómo funciona el sistema de filtros de dispositivos en LVM?

En el inicio, el comando vgscan se ejecuta para escanear los dispositivos de bloque en el sistema en busca de etiquetas LVM, para determinar cuáles de ellos son volúmenes físicos y para leer los metadatos y construir una lista de grupos de volúmenes. Los nombres de los volúmenes físicos se almacenan en el archivo de caché LVM de cada nodo en el sistema, /etc/lvm/cache/.cache. Los comandos subsiguientes pueden leer ese archivo para evitar volver a escanear.

Podemos controlar qué dispositivos escanea LVM configurando filtros en el archivo de configuración lvm.conf. Los filtros en el archivo lvm.conf consisten en una serie de expresiones regulares simples que se aplican a los nombres de dispositivos en el directorio /dev para decidir si aceptar o rechazar cada dispositivo de bloque encontrado.

El siguiente filtro agrega todos los dispositivos descubiertos, que es el comportamiento predeterminado ya que no hay ningún filtro configurado en el archivo de configuración:

1 filter = [ "a/.*/" ] filter = [ "a/.*/" ]

El siguiente filtro elimina el dispositivo de cdrom para evitar retrasos si la unidad no contiene ningún medio:

1 filter = [ "r|/dev/cdrom|" ] filter = [ "r|/dev/cdrom|" ]

El siguiente filtro agrega todos los bucles y elimina todos los demás dispositivos de bloque:

1 filter = [ "a/loop.*/" , "r/.*/" ] filter = [ "a/loop.*/", "r/.*/" ]

El siguiente filtro agrega todos los bucles e IDE y elimina todos los demás dispositivos de bloque:

1 filter = [ "a|loop.*|" , "a|/dev/hd.*|" , "r|.*|" ] filter =[ "a|loop.*|", "a|/dev/hd.*|", "r|.*|" ]

El siguiente filtro agrega solo la partición 8 en la primera unidad IDE y elimina todos los demás dispositivos de bloque:

1 filter = [ "a|^/dev/hda8$|" , "r/.*/" ] filter = [ "a|^/dev/hda8$|", "r/.*/" ]

Si en cambio utilizamos almacenamiento de EMC con PowerPath, podemos utilizar este filtro:

1 global_filter = [ "a/sda[1-9]$/" , "a/emcpower.*/" "r/.*/" ] global_filter = [ "a/sda[1-9]$/", "a/emcpower.*/" "r/.*/" ]

Lvmetad: La solución a los quebraderos de cabeza en RHEL 7

Esta nota os pueda salvar la tarde en más de una ocasión si tenéis problemas con los filtros de LVM, en sistemas RHEL en su versión 7. Y esto os lo digo por experiencia.

Cuando se ejecuta el demonio lvmetad, la configuración de filter = en el archivo /etc/lvm/lvm.conf no se aplica cuando ejecuta el comando pvscan –cache device. Para filtrar dispositivos, debemos usar la configuración global_filter =. Los dispositivos que fallan en el filtro global no son abiertos por LVM y nunca son escaneados. Es posible que debamos usar un filtro global, por ejemplo, cuando utiliza dispositivos LVM en máquinas virtuales y no desea que el host físico analice el contenido de los dispositivos en las máquinas virtuales.

Utilizando el ejemplo de almacenamiento con PowerPath en RHEL 7

1 global_filter = [ "a/sda[1-9]$/" , "a/emcpower.*/" , "r/.*/" ] global_filter = [ "a/sda[1-9]$/", "a/emcpower.*/", "r/.*/" ]

Una vez modificado el filtro debemos ejecutar el comando psvscan y listar los volúmenes físicos con pv.

Espero que el artículo os sea de utilidad en algún momento.

Fuentes consultadas:

Redhat.com – CONTROLLING LVM DEVICE SCANS WITH FILTERS