GNU/Linux >> LINUX-Kenntnisse >  >> Linux

LVM und Multipathing – Beispiele für LVM-Filterzeichenfolgen

Die Stelle richtet sich an Linux-Systemadministratoren, die bestehende LVM-konfigurierte Systeme anfänglich konfigurieren oder weiter optimieren möchten. Er diskutiert:

  • die Notwendigkeit einer spezifischen LVM-Filterstring-Konfiguration für den jeweiligen verwendeten Speichertyp.
  • Stellen Sie Beispiel-LVM-Filterzeichenfolgen für eine Vielzahl gängiger Speichergeräte bereit

LVM-Konfiguration – Filterparameter

Die primäre LVM-Konfigurationsdatei ist /etc/lvm/lvm.conf . Die Datei besteht aus mehreren Abschnitten, die jeweils verschiedene Parameter/Werte enthalten. Dieser Artikel konzentriert sich speziell auf den Filterparameter im Geräteabschnitt.

Es folgt eine beispielhafte lvm.conf-Datei:

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"
}

Standardmäßig scannt LVM beim Systemstart Geräte, die durch den Filterparameter definiert sind, um LVM-Geräte zu erkennen. Verwenden Sie die obige Standardfilterzeichenfolge (filter =[ „a/.*/“ ] ), scannt LVM alle verfügbaren Geräte auf dem System. Wenn PVs entdeckt werden, werden VGs zusammengesetzt, LVs aktiviert und anschließend Dateisysteme (falls vorhanden) gemountet.

Bei Systemen mit einer beträchtlichen Anzahl angeschlossener Speichergeräte (LUNs) ist es möglicherweise nicht wünschenswert oder erforderlich, dass LVM jedes verfügbare Gerät scannt. In diesem Fall kann die LVM-Filterzeichenfolge modifiziert (optimiert) werden, um eine benutzerdefinierte Gruppe von Geräten zu scannen.

LVM und Multipathing

Abgesehen von lokalem Speicher erstellen Benutzer häufig LVM-Geräte auf SAN-Speicher. Darüber hinaus erfolgt der Zugriff auf SAN-Speicher häufig über mehrere Pfade, d. h. es existieren mehrere Pfade zu derselben SAN-LUN auf dem System. Im Fall von device-mapper-multipath, der nativen Multipath-Lösung von Oracle Linux, könnten die folgenden Geräte vorhanden sein, die alle auf dieselbe SAN-LUN verweisen:

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

Multipath-Implementierungen unterscheiden sich – im Fall von EMC PowerPath könnten die folgenden Geräte vorhanden sein, die alle auf dieselbe SAN-LUN verweisen:

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

Wie bereits erwähnt, weist der standardmäßige lvm.conf-Filterstringwert LVM an, alle angeschlossenen/verfügbaren Geräte zu scannen. Leider kann dies problematisch sein, wenn LVM in Verbindung mit Multipathing verwendet wird. Abhängig von der Erkennungsreihenfolge der Geräte (Pfade) kann LVM letztendlich Singlepath-Geräte verwenden, z. /dev/sd[a,b] um VGs zu erstellen, anstatt das beabsichtigte Multipath-Gerät zu verwenden, z. /dev/mapper/mpath1. Wenn dies auftritt, erhält das LVM-Gerät nicht die Vorteile des Multipathing, d. h. Pfadverlustredundanz, Hochverfügbarkeit usw. Dasselbe Problem gilt in ähnlicher Weise für Systeme, die mit Booten von SAN konfiguriert sind.

Meldungen wie die folgenden werden normalerweise beobachtet, wenn LVM-Systeme, die Multipath verwenden, nicht optimal konfiguriert sind, um Singlepath-Geräte auszuschließen:

# 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

Oben verwendet LVM fälschlicherweise das Singlepath-Gerät /dev/sdb anstelle des Multipath-Geräts /dev/mapper/mpath1. Um sicherzustellen, dass LVM beabsichtigte Speichergeräte/Pfade verwendet, passen Sie die LVM-Filterzeichenfolge an, um gewünschte und/oder unerwünschte Geräte ausdrücklich einzuschließen und/oder auszuschließen. Aufgrund des Umfangs und der Vielfalt der verfügbaren lokalen und SAN-Speicher ist keine einzige LVM-Dateikonfiguration notwendigerweise für jede mögliche Bereitstellung geeignet. Daher muss die LVM-Filterzeichenfolge für individuelle System-/Speicherkombinationen angepasst werden.

Beispiel-LVM-Filterzeichenfolgen

Dieser Abschnitt bietet einen unvollständigen Bereich von Beispielwerten für LVM-Filterzeichenfolgen. Beachten Sie, dass LVM verschiedene Kombinationen der Syntax regulärer Ausdrücke für Filterzeichenfolgenwerte akzeptiert. Die folgenden Muster stellen eine solche Variation dar, andere Variationen/Kombinationen werden jedoch akzeptiert. LVM wird sich jedoch bereitwillig beschweren, wenn größere Syntaxfehler vorhanden sind.

Akzeptiere(a) Filter

Filtern Bedeutung
filter =[ „a/.*/“ ] Alle Geräte
filter =[ „a|^/dev/sd*|“ ] Nur alle SCSI-Geräte
filter =[ „a|^/dev/sda|“ ] SCSI-Gerät /dev/sda
filter =[ „a|^/dev/sda[1-9]$|“ ] Nur alle Partitionen auf dem SCSI-Gerät /dev/sda
filter =[ „a|^/dev/cciss/*|“ ] Nur von HP SmartArray gesteuerte Geräte (cciss)
filter =[ „a|^/dev/loop*|“ ] Alle Loop-Geräte – /dev/loop*
filter =[ „a|^/dev/loop1[0-2]$|“ ] Nur Loop-Geräte 10, 11, 12 – /dev/loop1[0-2]
filter =[ „a|^/dev/hda1$|“ ] Partition 1 auf IDE-Gerät /dev/hda
filter =[ „a|^/dev/mapper/*|“ ] Device-Mapper-Multipath-Geräte
filter =[ „a|^/dev/emcpower*|“ ] Alle EMC PowerPath-Geräte
filter =[ „a|^/dev/vpath[a-z]*|“ ] Alle IBM Subsystem Device Driver (SDD)-Geräte
filter =[ „a|^/dev/sddlm*|“ ] Alle Hitachi Dynamic Link Manager (HDLM)-Geräte

Filter ablehnen

Filtern Bedeutung
filter =[ „r|^/dev/*|“ ] Alle Geräte
filter =[ „r|^/dev/cdrom|“ ] CD/DVD-Gerät /dev/cdrom
filter =[ „r|^/dev/hdc|“ ] Nur IDE-Gerät /dev/hdc

LVM-Filterzeichenfolgen können einzeln angegeben oder mehrere Werte in Verbindung nach Bedarf verwendet werden. Um Mehrdeutigkeiten oder unbeabsichtigte Scans/Verwendungen von Geräten zu vermeiden, sollten alle beabsichtigten Geräte (a) definiert werden, denen dann unmittelbar eine explizite Ausschlusszeichenfolge (r) folgt, um zu verhindern, dass andere Geräte gescannt/verwendet werden.

Arbeitsbeispiele für LVM-Filterzeichenfolgen

Ein System mit LVM-Geräten auf lokalem SCSI-Speicher und Device-Mapper-Multipath-SAN-Speicher könnte Folgendes definieren:

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

Ein HP-System mit LVM-Geräten auf lokalem Smart Array-Speicher und Remote-EMC PowerPath-SAN-Speicher könnte Folgendes definieren:

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

Ein System mit LVM-Geräten auf lokalem SCSI-Speicher und IBM Subsystem Device Driver-SAN-Speicher könnte Folgendes definieren:

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

Validierung von Kandidaten-LVM-Filterzeichenfolgen

Stellen Sie beim Entwickeln und Testen von LVM-Filterzeichenfolgen sicher, dass LVM alle (und nur) vorgesehenen Geräte erkennt/verwendet und dass andere, unbeabsichtigte Geräte nicht gescannt/verwendet werden. Der Validierungsprozess sollte Folgendes beinhalten:

  • Sichern Sie die Originaldatei /etc/lvm/lvm.conf
  • Erstellen Sie optional einen lvmpdump, um die gesamte LVM-Konfiguration zu sichern
  • Passen Sie die LVM-Filterzeichenfolge nach Bedarf an, d. h. /etc/lvm/lvm.conf:filter =[…]
  • Entfernen Sie die LVM-Cache-Datei, z. # /bin/rm /etc/lvm/cache/.cache
  • Suche erneut nach LVM-Geräten, z. # /sbin/pvscan -vv

Geräte, die im Abschnitt „Alle physischen Volumes durchlaufen“ der pvscan-Ausgabe aufgeführt sind, geben an, welche Geräte von LVM gescannt wurden. Der abschließende Abschnitt der pvscan-Ausgabe listet alle/alle erkannten PV-Geräte auf. Beachten Sie, dass eine falsche oder suboptimal konfigurierte LVM-Filterzeichenfolge zu Folgendem führen kann:

  • Verwendung nicht vorgesehener Geräte, z. singlepath statt multipath
  • unnötiges Scannen von LVM-Geräten, was zu einem verlängerten Systemstart führt
  • Fehler beim Erkennen beabsichtigter LVM-Geräte, was zur Nichtverfügbarkeit von Gerät/Dateisystem führt
  • Fehler beim Booten des Systems, d. h. Kernel Panic usw.

Die folgende Systemkonsolenausgabe zeigt typische Startzeitmeldungen, wenn ein System das LVM-Gerät mit dem Root-Dateisystem nicht finden kann:

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!

Implementieren von LVM-Konfigurationsänderungen

Eine Kopie der lvm.conf-Datei wird in der System-Initial-RAM-Disk-Datei (initrd) gespeichert, die während des Systemstarts verwendet wird. Daher erfordert eine LVM-Konfigurationsänderung die Neuerstellung der initrd, damit die Änderungen beim Booten wirksam werden. Nachdem ein geeigneter LVM-Filter definiert/validiert wurde, führen Sie die folgenden Aktionen aus:

1. Entfernen Sie die LVM-Cache-Datei, z.

# rm /etc/lvm/cache/.cache

2. Erstellen Sie die anfängliche Ramdisk (initrd) wie folgt neu

Beachten Sie, dass die Neuerstellung der initrd-Datei mit einem falsch konfigurierten LVM-Filter zu einem vollständigen Systemstartfehler führen kann. Dementsprechend werden die folgenden alternativen Ansätze bereitgestellt, um einen solchen Fehler zu verhindern.

Option 1 (empfohlen)

Bei dieser Option wird ein neuer GRUB-Kernel-Boot-Eintrag definiert, um LVM-Änderungen zu testen, ohne die aktuelle initrd zu überschreiben.

# 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

Überprüfen Sie als Nächstes die GRUB-Konfigurationsdatei /boot/grub/grub.conf. GRUB-Kernel-Boot-Einträge, beginnend mit dem Titel, werden nacheinander aufgelistet. Der Wert des Parameters default definiert den aktuellen Standard-Boot-Kernel. Die Nummerierung der GRUB-Starteinträge beginnt bei Null (0), daher:

– default=0 bezieht sich auf den ersten aufgelisteten GRUB-Kernel-Boot-Eintrag.
– default=3 bezieht sich auf den vierten aufgelisteten GRUB-Kernel-Boot-Eintrag.

Kopieren Sie alle Zeilen des standardmäßigen Kernel-Starteintrags unter sich. Ändern Sie die initrd-Zeile des neuen Kernel-Starteintrags so, dass sie den Namen der neu erstellten initrd-Datei widerspiegelt. Ändern Sie den Wert des Standardparameters so, dass er den neu erstellten GRUB-Kernel-Starteintrag widerspiegelt. Wenn der ursprüngliche Standardwert des Parameters 0 war und der neue GRUB-Eintrag direkt darunter erstellt wurde, ändern Sie den Standardwert des Parameters auf 1, zum Beispiel:

# 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
...

Beim Neustart bootet das System mit dem neu erstellten GRUB-Starteintrag, einschließlich der neu erstellten initrd. Falls Probleme auftreten, starten Sie das System neu, unterbrechen Sie den Startvorgang, um auf das GRUB-Menü zuzugreifen, und wählen Sie aus, das System mit dem ursprünglichen Starteintrag zu starten.

Option 2 (Experte)

Diese Option umfasst das Überschreiben des vorhandenen standardmäßigen GRUB-Kernel-Starteintrags und das Überschreiben der aktuellen initrd.

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

Beim Neustart bootet das System mit dem vorhandenen GRUB-Boot, verwendet aber die neu erstellte initrd.

3. Überprüfen Sie nach dem Neustart, ob alle LVM-Geräte (PVs, VGs, LVs) vorhanden sind und die beabsichtigten physischen und/oder Multipath-Geräte verwenden. Wiederholen Sie die obigen Aktionen für jede weitere Optimierung der LVM-Filterkonfiguration oder wann immer weitere LVM-/Speicheränderungen/Reorganisationen eine Neukonfiguration rechtfertigen.


Linux
  1. Trimmen mit Lvm und Dm-Crypt?

  2. Beispiel für eine logrotate-Konfiguration und Fehlerbehebung

  3. LVM-Befehle schlagen fehl mit „Failed to load config file /etc/lvm/lvm.conf“

  4. LVM und Multipathing – Beispiele für LVM-Filterzeichenfolgen

  5. LVM und das Klonen von HDs

Erstellen und erweitern Sie das XFS-Dateisystem basierend auf LVM

Ansehen und Filtern von Protokollen in Plesk

Wie man nach mehreren Zeichenfolgen und Mustern grep

So verwenden Sie bash if -z und if -n zum Testen von Zeichenfolgen in Linux

DNS RPZ:Eine DNS-Firewall zum Filtern von Sites und Benutzern

Sicherung und Wiederherstellung von LVM-Snapshots unter Linux