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.