GNU/Linux >> Znalost Linux >  >> Linux

LVM a multipathing – vzorové řetězce filtrů LVM

Příspěvek je určen pro správce systému Linux, kteří chtějí zpočátku nakonfigurovat nebo dále optimalizovat stávající systémy nakonfigurované LVM. Pojednává o:

  • potřebu specifické konfigurace řetězce filtru LVM pro konkrétní používaný typ úložiště.
  • poskytněte vzorové řetězce filtrů LVM pro různá běžná úložná zařízení

Konfigurace LVM – parametr filtru

Primární konfigurační soubor LVM je /etc/lvm/lvm.conf . Soubor se skládá z několika částí, z nichž každá obsahuje různé parametry/hodnoty. Tento článek se konkrétně zaměřuje na parametr filtru v sekci zařízení.

Následuje ukázkový soubor lvm.conf:

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

Ve výchozím nastavení při spuštění systému LVM prohledává zařízení definovaná parametrem filtru, aby zjistila zařízení LVM. Pomocí výše uvedeného výchozího řetězce filtru (filtr =[ “a/.*/” ] ), LVM prohledá všechna dostupná zařízení v systému. Jakmile jsou PV objeveny, VG jsou sestaveny, LV aktivovány a následně připojeny souborové systémy (pokud existují).

U systémů se značným počtem připojených úložných zařízení (LUN) nemusí být žádoucí nebo nutné, aby LVM skenoval každé dostupné zařízení. V takovém případě může být řetězec filtru LVM upraven (optimalizován) pro skenování uživatelem specifikované sady zařízení.

LVM a Multipathing

Kromě místního úložiště uživatelé běžně vytvářejí zařízení LVM na úložišti SAN. Kromě toho je přístup k úložišti SAN často vícecestný, tj. v systému existuje více cest ke stejné LUN SAN. V případě device-mapper-multipath, nativního vícecestného řešení Oracle Linux, mohou existovat následující zařízení, která všechna odkazují na stejnou SAN LUN:

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

Vícecestné implementace se liší – v případě EMC PowerPath mohou existovat následující zařízení, která všechna odkazují na stejnou SAN LUN:

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

Jak bylo uvedeno dříve, výchozí hodnota řetězce filtru lvm.conf dává pokyn LVM, aby prohledal všechna připojená/dostupná zařízení. Bohužel to může být problematické při použití LVM ve spojení s multipathingem. V závislosti na pořadí zjišťování zařízení (cesty) může LVM nakonec využívat jednocestná zařízení, např. /dev/sd[a,b] ke konstrukci VG namísto použití zamýšleného vícecestného zařízení, např. /dev/mapper/mpath1. Pokud k tomu dojde, zařízení LVM nezíská výhody multipathingu, tj. redundance ztráty cesty, vysoká dostupnost atd. Stejný problém se obdobně týká systémů konfigurovaných s bootováním ze SAN.

Zprávy jako následující jsou obvykle pozorovány, když systémy LVM používající více cest nejsou optimálně nakonfigurovány tak, aby vylučovaly zařízení s jednou cestou:

# 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

Výše uvedené LVM chybně používá jednocestné zařízení /dev/sdb místo vícecestného zařízení /dev/mapper/mpath1. Abyste zajistili, že LVM využívá zamýšlená úložná zařízení/cesty, přizpůsobte řetězec filtru LVM tak, aby konkrétně zahrnoval a/nebo vyloučil chtěná a/nebo nechtěná zařízení. Vzhledem k rozsahu a rozmanitosti dostupného místního úložiště a úložiště SAN nebude žádná konfigurace souboru LVM nutně vyhovovat každému možnému nasazení. Řetězec filtru LVM proto musí být přizpůsoben pro jednotlivé kombinace systém/úložiště.

Ukázkové řetězce filtrů LVM

Tato část nabízí neúplný rozsah vzorových hodnot řetězce filtrů LVM. Všimněte si, že LVM přijímá různé kombinace syntaxe regulárních výrazů pro hodnoty řetězců filtru. Následující příklady označují jednu takovou variantu, jsou však akceptovány i jiné varianty/kombinace. LVM si však v případě velkých syntaktických chyb snadno stěžuje.

Přijmout(a) filtry

Filtr Význam
filtr =[ “a/.*/” ] Všechna zařízení
filtr =[ “a|^/dev/sd*|” ] Pouze všechna zařízení SCSI
filtr =[ “a|^/dev/sda|” ] Zařízení SCSI /dev/sda
filtr =[ “a|^/dev/sda[1-9]$|” ] Všechny oddíly pouze na zařízení SCSI /dev/sda
filtr =[ “a|^/dev/cciss/*|” ] Pouze zařízení ovládaná HP SmartArray (cciss)
filtr =[ “a|^/dev/loop*|” ] Všechna zařízení smyčky – /dev/loop*
filtr =[ “a|^/dev/loop1[0-2]$|” ] Opakovat pouze zařízení 10, 11, 12 – /dev/loop1[0-2]
filtr =[ “a|^/dev/hda1$|” ] Oddíl 1 na zařízení IDE /dev/hda
filtr =[ “a|^/dev/mapper/*|” ] vícecestná zařízení mapovače zařízení
filtr =[ “a|^/dev/emcpower*|” ] Všechna zařízení EMC PowerPath
filtr =[ “a|^/dev/vcesta[a-z]*|” ] Všechna zařízení IBM Subsystem Device Driver (SDD)
filtr =[ “a|^/dev/sddlm*|” ] Všechna zařízení Hitachi Dynamic Link Manager (HDLM)

Odmítnout(r) filtry

Filtr Význam
filtr =[ “r|^/dev/*|” ] Všechna zařízení
filtr =[ “r|^/dev/cdrom|” ] Zařízení CD/DVD /dev/cdrom
filtr =[ “r|^/dev/hdc|” ] Pouze zařízení IDE /dev/hdc

Řetězce filtrů LVM mohou být specifikovány jednotlivě nebo mohou být použity ve spojení podle potřeby více hodnot. Aby se předešlo nejednoznačnosti nebo nezamýšlenému skenování/použití zařízení, měla by být definována jakákoli zamýšlená zařízení (a) a poté by za nimi měl bezprostředně následovat explicitní vylučovací řetězec (r), aby se zabránilo skenování/použití jiných zařízení.

Pracovní příklady řetězců filtrů LVM

Systém se zařízeními LVM na místním úložišti SCSI a úložišti SAN pro mapování zařízení může definovat:

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

Systém HP se zařízeními LVM na místním úložišti Smart Array a vzdáleném úložišti EMC PowerPath SAN může definovat:

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

Systém se zařízeními LVM na místním úložišti SCSI a úložišti IBM Subsystem Device Driver SAN může definovat:

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

Ověření kandidátských řetězců filtru LVM

Při navrhování a testování řetězců filtrů LVM se ujistěte, že LVM najde/použije všechna (a pouze) zamýšlená zařízení a že nebudou skenována/použita jiná, nezamýšlená zařízení. Proces ověření by měl zahrnovat následující:

  • zálohujte původní soubor /etc/lvm/lvm.conf
  • volitelně použijte lvmpdump k zálohování celé konfigurace LVM
  • upravte řetězec filtru LVM podle potřeby, tj. /etc/lvm/lvm.conf:filter =[…]
  • odeberte soubor mezipaměti LVM, např. # /bin/rm /etc/lvm/cache/.cache
  • znovu prohledejte zařízení LVM, např. # /sbin/pvscan -vv

Zařízení uvedená v části „Procházení všech fyzických svazků“ výstupu pvscan označují, která zařízení byla skenována pomocí LVM. Koncová část výstupu pvscan obsahuje seznam všech nalezených fotovoltaických zařízení. Všimněte si, že nesprávný nebo neoptimálně nakonfigurovaný řetězec filtru LVM může mít za následek:

  • používání nechtěných zařízení, např. singlepath namísto multipath
  • zbytečné skenování zařízení LVM, což má za následek prodloužené spouštění systému
  • selhání odhalit zamýšlená zařízení LVM, což má za následek nedostupnost zařízení/systému souborů
  • selhání spuštění systému, tj. panika jádra atd.

Následující výstup systémové konzoly označuje typické zprávy o době spouštění, když systém nemůže najít zařízení LVM obsahující kořenový souborový systém:

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!

Implementace změn konfigurace LVM

Kopie souboru lvm.conf je uložena v souboru počátečního ram disku (initrd), který se používá při spouštění systému. Proto změna konfigurace LVM vyžaduje přebudování initrd, aby se změny projevily při bootování. Po definování/ověření vhodného filtru LVM proveďte následující akce:

1. Odeberte soubor mezipaměti LVM, např.

# rm /etc/lvm/cache/.cache

2. Znovu sestavte počáteční ramdisk (initrd) následovně

Všimněte si, že opětovné sestavení souboru initrd s nesprávně nakonfigurovaným filtrem LVM může vést k úplnému selhání zavádění systému. V souladu s tím jsou poskytnuty následující alternativní přístupy, které pomohou zabránit takovému selhání.

Možnost 1 (doporučeno)

Tato možnost zahrnuje definování nové zaváděcí položky jádra GRUB za účelem testování změn LVM bez přepsání aktuálního initrd.

# 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

Dále si prohlédněte konfigurační soubor GRUB /boot/grub/grub.conf. Zaváděcí položky jádra GRUB začínající názvem jsou uvedeny jedna po druhé. Hodnota výchozího parametru definuje aktuální výchozí zaváděcí jádro. Číslování zaváděcích položek GRUB začíná od nuly (0), proto:

– default=0 odkazuje na první uvedenou zaváděcí položku jádra GRUB.
– default=3 odkazuje na čtvrtou uvedenou zaváděcí položku jádra GRUB.

Zkopírujte všechny řádky výchozí zaváděcí položky jádra pod sebe. Upravte řádek initrd nové zaváděcí položky jádra tak, aby odrážel název nově vytvořeného souboru initrd. Upravte hodnotu výchozího parametru tak, aby odrážela nově vytvořenou zaváděcí položku jádra GRUB. Pokud byla původní výchozí hodnota parametru 0 a nová položka GRUB byla vytvořena bezprostředně pod ní, upravte výchozí hodnotu parametru na 1, například:

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

Po restartu se systém zavede pomocí nově vytvořené spouštěcí položky GRUB včetně nově vytvořeného initrd. V případě jakýchkoli problémů restartujte systém, přerušte proces spouštění, abyste se dostali do nabídky GRUB a vyberte možnost zavést systém pomocí původního zaváděcího záznamu.

Možnost 2 (expert)

Tato možnost zahrnuje přepsání stávající výchozí zaváděcí položky jádra GRUB a přepsání aktuálního 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
...

Po restartu se systém zavede pomocí stávajícího zavádění GRUB, ale použije nově přestavěný initrd.

3. Po restartu ověřte, že všechna zařízení LVM (PV, VG, LV) existují a používají zamýšlená fyzická a/nebo vícecestná zařízení. Opakujte výše uvedené akce pro jakoukoli další optimalizaci konfigurace filtru LVM nebo kdykoli další změny LVM/úložiště/reorganizace vyžadují rekonfiguraci.


Linux
  1. Ukázka konfigurace logrotate a řešení problémů

  2. Příkazy LVM selžou s „Nepodařilo se načíst konfigurační soubor /etc/lvm/lvm.conf“

  3. LVM a multipathing – vzorové řetězce filtrů LVM

  1. Jak porovnávat čísla a řetězce ve skriptu Linux Shell

  2. Trim s Lvm a Dm-crypt?

  3. Filtrujte a optimalizujte požadavky na statické soubory pomocí NGINX na Ubuntu 18.04

  1. LVM Snapshot:Zálohování a obnovení oddílu LVM v Linuxu

  2. LVM a klonování HD

  3. Nejlepší pořadí RAID, LVM a LUKS