GNU/Linux >> Tutoriales Linux >  >> Linux

LVM y rutas múltiples:ejemplos de cadenas de filtro LVM

La publicación está destinada a los administradores de sistemas Linux que buscan configurar inicialmente u optimizar aún más los sistemas configurados LVM existentes. Se trata de:

  • la necesidad de una configuración de cadena de filtro LVM específica para el tipo de almacenamiento particular en uso.
  • proporcionar cadenas de filtro LVM de muestra para una variedad de dispositivos de almacenamiento comunes

Configuración LVM – parámetro de filtro

El archivo de configuración principal de LVM es /etc/lvm/lvm.conf . El archivo consta de varias secciones, cada una de las cuales contiene varios parámetros/valores. Este artículo se centra específicamente en el parámetro de filtro dentro de la sección de dispositivos.

El siguiente es un archivo lvm.conf de muestra:

devices {
    dir = "/dev"
    scan = [ "/dev" ]
    obtain_device_list_from_udev = 1
    preferred_names = [ ]
    filter = [ "a/.*/" ]
    cache_dir = "/etc/lvm/cache"
    cache_file_prefix = ""
    write_cache_state = 1
    sysfs_scan = 1
    multipath_component_detection = 1
    md_component_detection = 1
    md_chunk_alignment = 1
    default_data_alignment = 0
    data_alignment_detection = 1
    data_alignment = 0
    data_alignment_offset_detection = 1
    ignore_suspended_devices = 0
    disable_after_error_count = 0
    require_restorefile_with_uuid = 1
    pv_min_size = 2048
    issue_discards = 0
}
log {
    verbose = 0
    syslog = 1
    overwrite = 0
    level = 0
    indent = 1
    command_names = 0
    prefix = "  "
}
backup {
    backup = 1
    backup_dir = "/etc/lvm/backup"
    archive = 1
    archive_dir = "/etc/lvm/archive"
    retain_min = 10
    retain_days = 30
}
shell {
    history_size = 100
}
global {
    umask = 077
    test = 0
    units = "h"
    si_unit_consistency = 0
    activation = 1
    proc = "/proc"
    locking_type = 1
    wait_for_locks = 1
    fallback_to_clustered_locking = 1
    fallback_to_local_locking = 1
    locking_dir = "/var/lock/lvm"
    prioritise_write_locks = 1
    abort_on_internal_errors = 0
    detect_internal_vg_cache_corruption = 0
    metadata_read_only = 0
}
activation {
    checks = 0
    udev_sync = 1
    udev_rules = 1
    verify_udev_operations = 0
    missing_stripe_filler = "error"
    reserved_stack = 256
    reserved_memory = 8192
    process_priority = -18
    mirror_region_size = 512
    readahead = "auto"
    mirror_log_fault_policy = "allocate"
    mirror_image_fault_policy = "remove"
    snapshot_autoextend_threshold = 100
    snapshot_autoextend_percent = 20
    use_mlockall = 0
    monitoring = 1
    polling_interval = 15
}
dmeventd {
    mirror_library = "libdevmapper-event-lvm2mirror.so"
    snapshot_library = "libdevmapper-event-lvm2snapshot.so"
}

De forma predeterminada, al iniciar el sistema, LVM escanea los dispositivos definidos por el parámetro de filtro para descubrir dispositivos LVM. Usando la cadena de filtro predeterminada anterior (filter =[ “a/.*/” ] ), LVM escanea todos los dispositivos disponibles en el sistema. A medida que se descubren los PV, se ensamblan los VG, se activan los LV y luego se montan los sistemas de archivos (si existen).

Para sistemas con una cantidad considerable de dispositivos de almacenamiento (LUN) conectados, puede que no sea deseable o necesario que LVM escanee todos los dispositivos disponibles. En ese caso, la cadena de filtro LVM puede modificarse (optimizarse) para escanear un conjunto de dispositivos especificado por el usuario.

LVM y rutas múltiples

Aparte del almacenamiento local, los usuarios suelen crear dispositivos LVM en el almacenamiento SAN. Además, el acceso al almacenamiento SAN a menudo tiene múltiples rutas, es decir, existen múltiples rutas al mismo SAN LUN en el sistema. En el caso de device-mapper-multipath, la solución multirruta nativa de Oracle Linux, pueden existir los siguientes dispositivos que hacen referencia al mismo SAN LUN:

/dev/mapper/mpath1
/dev/dm-1
/dev/sda
/dev/sdb

Las implementaciones de múltiples rutas difieren:en el caso de EMC PowerPath, es posible que existan los siguientes dispositivos que hagan referencia al mismo SAN LUN:

/dev/emcpowera
/dev/sda
/dev/sdb

Como se indicó anteriormente, el valor predeterminado de la cadena de filtro lvm.conf le indica a LVM que escanee todos los dispositivos conectados/disponibles. Desafortunadamente, esto puede ser problemático cuando se usa LVM junto con rutas múltiples. Según el orden de descubrimiento del dispositivo (ruta), LVM puede utilizar dispositivos de ruta única, p. /dev/sd[a,b] para construir VG en lugar de usar el dispositivo de rutas múltiples previsto, p. /dev/mapper/mpath1. Si esto ocurre, el dispositivo LVM no obtiene los beneficios de rutas múltiples, es decir, redundancia de pérdida de ruta, alta disponibilidad, etc. Este mismo problema se aplica de manera similar a los sistemas configurados con arranque desde SAN.

Por lo general, se observan mensajes como los siguientes cuando los sistemas LVM que usan rutas múltiples no están configurados de manera óptima para excluir dispositivos de ruta única:

# pvs
  Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/dm-1 not /dev/sda
  Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/mapper/mpath1 not /dev/dm-1
  Found duplicate PV Yvq85ssLqAXeBvZpVtAqBIbm44KU8cd5: using /dev/sdb not /dev/mapper/mpath1
  PV                  VG         Fmt  Attr PSize  PFree
  /dev/sdb            VolGroup01 lvm2 a--   1.00G 1.00G
  /dev/cciss/c0d0p2   VolGroup00 lvm2 a--  48.81G    0

Arriba, LVM usa erróneamente el dispositivo de ruta única /dev/sdb en lugar del dispositivo de ruta múltiple /dev/mapper/mpath1. Para asegurarse de que LVM utilice los dispositivos/rutas de almacenamiento previstos, personalice la cadena de filtro de LVM para incluir y/o excluir específicamente los dispositivos deseados y/o no deseados. Debido a la gama y variedad de almacenamiento local y SAN disponible, ninguna configuración de archivo LVM se adaptará necesariamente a todas las implementaciones posibles. Por lo tanto, la cadena de filtro LVM debe personalizarse para combinaciones individuales de sistema/almacenamiento.

Cadenas de filtro LVM de muestra

Esta sección ofrece un rango incompleto de valores de cadena de filtro LVM de muestra. Tenga en cuenta que LVM acepta varias combinaciones de sintaxis de expresiones regulares para valores de cadena de filtro. Las siguientes muestras indican una de esas variaciones; sin embargo, se aceptan otras variaciones/combinaciones. Sin embargo, LVM se quejará fácilmente en presencia de errores de sintaxis importantes.

Aceptar(a) filtros

Filtro Significado
filtro =[ “a/.*/” ] Todos los dispositivos
filtro =[ “a|^/dev/sd*|” ] Solo todos los dispositivos SCSI
filtro =[ “a|^/dev/sda|” ] Dispositivo SCSI /dev/sda
filtro =[ “a|^/dev/sda[1-9]$|” ] Todas las particiones en dispositivo SCSI /dev/sda solamente
filtro =[ “a|^/dev/cciss/*|” ] Solo dispositivos controlados por HP SmartArray (cciss)
filtro =[ “a|^/dev/loop*|” ] Todos los dispositivos de bucle:/dev/loop*
filtro =[ “a|^/dev/loop1[0-2]$|” ] Solo dispositivos de bucle 10, 11, 12:/dev/loop1[0-2]
filtro =[ “a|^/dev/hda1$|” ] Partición 1 en dispositivo IDE /dev/hda
filtro =[ “a|^/dev/mapper/*|” ] dispositivos de rutas múltiples del mapeador de dispositivos
filtro =[ “a|^/dev/emcpower*|” ] Todos los dispositivos EMC PowerPath
filtro =[ “a|^/dev/vpath[a-z]*|” ] Todos los dispositivos IBM Subsystem Device Driver (SDD)
filtro =[ “a|^/dev/sddlm*|” ] Todos los dispositivos Hitachi Dynamic Link Manager (HDLM)

Filtros de rechazo(r)

Filtro Significado
filtro =[ “r|^/dev/*|” ] Todos los dispositivos
filtro =[ “r|^/dev/cdrom|” ] Dispositivo de CD/DVD /dev/cdrom
filtro =[ “r|^/dev/hdc|” ] Solo dispositivo IDE /dev/hdc

Las cadenas de filtros LVM se pueden especificar individualmente o se pueden usar múltiples valores en conjunto según sea necesario. Para evitar la ambigüedad o el escaneo/uso no intencionado del dispositivo, cualquier dispositivo previsto (a) debe definirse y luego ir inmediatamente seguido de una cadena de exclusión explícita (r) para evitar que se escanee/utilice cualquier otro dispositivo.

Ejemplos de trabajo de cadenas de filtro LVM

Un sistema con dispositivos LVM en almacenamiento SCSI local y almacenamiento SAN multirruta de asignador de dispositivos podría definir:

filter = [ "a|^/dev/sda[1-9]$|", "a|^/dev/mapper/*|", "r|^/dev/*|" ]

Un sistema HP con dispositivos LVM en almacenamiento Smart Array local y almacenamiento SAN EMC PowerPath remoto podría definir:

filter = [ "a|^/dev/cciss/*|", "a|^/dev/emcpower*|", "r|^/dev/*|" ]

Un sistema con dispositivos LVM en almacenamiento SCSI local y almacenamiento SAN de IBM Subsystem Device Driver podría definir:

filter = [ "a|^/dev/sda[1-9]$|", "a|^/dev/vpath[a-z]*|", "r|^/dev/*|" ]

Validación de cadenas de filtro LVM candidatas

Al diseñar y probar cadenas de filtros LVM, asegúrese de que LVM descubra/utilice todos (y solo) los dispositivos previstos y que otros dispositivos no previstos no se exploren/utilicen. El proceso de validación debe incluir cosas como:

  • haga una copia de seguridad del archivo /etc/lvm/lvm.conf original
  • opcionalmente, tome un lvmpdump para hacer una copia de seguridad de toda la configuración de LVM
  • personalice la cadena de filtro LVM según sea necesario, es decir, /etc/lvm/lvm.conf:filter =[…]
  • elimine el archivo de caché LVM, p. # /bin/rm /etc/lvm/cache/.cache
  • volver a escanear en busca de dispositivos LVM, p. # /sbin/pvscan-vv

Los dispositivos enumerados en la sección "Recorriendo todos los volúmenes físicos" de la salida de pvscan indican qué dispositivos fueron escaneados por LVM. La sección final de la salida de pvscan enumera todos los dispositivos fotovoltaicos descubiertos. Tenga en cuenta que una cadena de filtro LVM incorrecta o configurada de manera subóptima puede resultar en:

  • uso de dispositivos no previstos, p. ruta única en lugar de ruta múltiple
  • escaneo innecesario de dispositivos LVM, lo que resulta en un arranque prolongado del sistema
  • falla al descubrir los dispositivos LVM deseados, lo que resulta en la indisponibilidad del dispositivo/sistema de archivos
  • fallo al iniciar el sistema, es decir, kernel panic, etc.

La siguiente salida de la consola del sistema indica mensajes típicos de tiempo de arranque cuando un sistema no puede encontrar el dispositivo LVM que contiene el sistema de archivos raíz:

root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/root 3 crashkernel=128@16M elevator=deadline
 [Linux-bzImage, setup=0x1e00, size=0x1fd6fc]
initrd /initrd-2.6.18-348.el5.img
 [Linux-initrd @ 0x37a7c000, 0x57396d bytes]

Warning: pci_mmcfg_init marking 256MB space uncacheable.
Red Hat nash version 5.1.19.6 starting.
lpfc 0000:06:00.0 0:1303 Link Up Event x1 received Data : x1 xf7 x10 x9 x0 x0 0
lpfc 0000:06:00.1 1:1303 Link Up Event x1 received Data : x1 xf7 x10 x9 x0 x0 0
Unable to access resume device (/dev/VolGroup00/swap)
mount: could not find filesystem '/dev/root'
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing: Attempted to kill init!

Implementación de cambios en la configuración de LVM

Una copia del archivo lvm.conf se almacena en el archivo del disco ram inicial del sistema (initrd) que se usa durante el arranque del sistema. Por lo tanto, el cambio de configuración de LVM garantiza la reconstrucción de initrd para que los cambios sean efectivos en el momento del arranque. Una vez que se haya definido/validado un filtro LVM apropiado, realice las siguientes acciones:

1. Elimine el archivo de caché LVM, p.

# rm /etc/lvm/cache/.cache

2. Reconstruya el ramdisk inicial (initrd) de la siguiente manera

Tenga en cuenta que la reconstrucción del archivo initrd con un filtro LVM configurado incorrectamente puede provocar una falla completa en el arranque del sistema. En consecuencia, se proporcionan los siguientes enfoques alternativos para ayudar a prevenir dicha falla.

Opción 1 (recomendado)

Esta opción implica definir una nueva entrada de arranque del kernel de GRUB para probar los cambios de LVM sin sobrescribir el initrd actual.

# cd /boot
# mkinitrd -v -f /boot/initrd-`uname -r`.LVM.img `uname -r`
Creating initramfs
...
# ls -lart
...
-rw-------  1 root root 3805700 Nov  1 16:40 initrd-2.6.18-348.el5.LVM.img

A continuación, revise el archivo de configuración de GRUB /boot/grub/grub.conf. Las entradas de arranque del kernel de GRUB, que comienzan con el título, se enumeran una tras otra. El valor del parámetro predeterminado define el kernel de arranque predeterminado actual. La numeración de las entradas de arranque de GRUB comienza desde cero (0), por lo tanto:

– default=0 se refiere a la primera entrada de arranque del kernel de GRUB de la lista.
– default=3 se refiere a la cuarta entrada de arranque del kernel de GRUB de la lista.

Copie todas las líneas de la entrada de arranque del núcleo predeterminada debajo de sí mismo. Modifique la línea initrd de la nueva entrada de arranque del kernel para reflejar el nombre del archivo initrd recién creado. Modifique el valor del parámetro predeterminado para reflejar la entrada de arranque del kernel GRUB recién creada. Si el valor del parámetro predeterminado original era 0 y la nueva entrada de GRUB se creó inmediatamente debajo, modifique el valor del parámetro predeterminado a 1, por ejemplo:

# cat /etc/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
#default=0
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Oracle Linux Server (2.6.18-348.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/LogVol00 crashkernel=128M@32 numa=off
        initrd /initrd-2.6.18-348.el5.img
title Oracle Linux Server (2.6.18-348.el5) LVM
        root (hd0,0)
        kernel /vmlinuz-2.6.18-348.el5 ro root=/dev/VolGroup00/LogVol00 crashkernel=128M@32 numa=off
        initrd /initrd-2.6.18-348.el5.LVM.img
...

Al reiniciar, el sistema se iniciará utilizando la entrada de inicio de GRUB recién creada, incluido el initrd recién creado. En caso de problemas, reinicie el sistema, interrumpa el proceso de inicio para acceder al menú de GRUB y seleccione iniciar el sistema utilizando la entrada de inicio original.

Opción 2 (experto)

Esta opción implica sobrescribir la entrada de arranque del kernel GRUB predeterminada existente y sobrescribir el initrd actual.

# cd /boot
# mv initrd-`uname -r`.img initrd-`uname -r`.img.orig
# mkinitrd -v -f /boot/initrd-`uname -r`.img `uname -r`
Creating initramfs
...

Al reiniciar, el sistema arrancará usando el arranque GRUB existente pero usará el initrd recién reconstruido.

3. Después de reiniciar, verifique que todos los dispositivos LVM (PV, VG, LV) existan y estén utilizando dispositivos físicos y/o de múltiples rutas previstos. Repita las acciones anteriores para cualquier otra optimización de la configuración del filtro LVM o cuando más LVM/cambios de almacenamiento/reorganización justifiquen la reconfiguración.


Linux
  1. ¿Recortar con Lvm y Dm-crypt?

  2. Ejemplo de configuración y solución de problemas de logrotate

  3. Filtre y optimice las solicitudes de archivos estáticos con NGINX en Ubuntu 18.04

  4. Instantánea de LVM:copia de seguridad y restauración de la partición LVM en Linux

  5. LVM y clonación de HD

Crear y ampliar el sistema de archivos XFS basado en LVM

Cómo ver y filtrar registros en Plesk

Cómo hacer Grep para múltiples cadenas y patrones

Cómo usar bash if -z y if -n para probar cadenas en Linux

DNS RPZ:un DNS Firewall para filtrar Sitios y Usuarios

Copia de seguridad y restauración de instantáneas LVM en Linux