Problém
Nástroj mdadm byl použit k vytvoření softwarového zrcadla RAID pomocí dvou zařízení-mapovač-multipath zařízení:
# /sbin/mdadm /dev/md0 --create --verbose --level=1 --raid-devices=2 /dev/mapper/ocrp1 /dev/mapper/ocrmirrorp1
Nastavení bylo poté potvrzeno:
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 253 2 0 active sync /dev/dm-2 1 253 3 1 active sync /dev/dm-3
Vzhledem k tomu, že jsou zobrazeny skutečné názvy vícecestných zařízení (/dev/dm-N), jsou také ověřena mapování přívětivějších názvů (/dev/mapped/ocrp1):
# /bin/ls -l /dev/mpath/ lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrp1 -> ../dm-2 lrwxrwxrwx 1 root root 7 Apr 23 11:15 ocrmirrorp1 -> ../dm-3
# /bin/ls -l /dev/mapper/ brw-rw---- 1 root disk 253, 2 Apr 23 11:15 ocrp1 brw-rw---- 1 root disk 253, 3 Apr 23 11:15 ocrmirrorp1
Protože se tyto pohodlné názvy mapují na stejná vícecestná zařízení, nastavení se ukázalo jako správné. Po restartu mdadm zobrazí následující:
# /sbin/mdadm --detail /dev/md0 ... Number Major Minor RaidDevice State 0 8 97 0 active sync /dev/sdg1 1 8 113 1 active sync /dev/sdh1
RAID je aktivní, ale nepoužívá vícecestná zařízení podle očekávání.
Řešení
To je ve skutečnosti problém s načasováním. Během spouštění systému se zobrazí soubor /etc/rcN.d skripty se spouštějí mdadm dříve, než jsou zařízení s více cestami detekována a připravena. Toto je v podstatě sporná podmínka, protože rozpoznání většího počtu vícecestných zařízení trvá déle a mdadm může být spuštěn před dokončením vícecestného zpracování.
Řešením je přidat potřebné ovladače a zařízení souborového systému do /initrd tak, aby byly dostupné jádru při bootování. To umožní jádru začít zpracovávat vícecestná zařízení dříve.
Poznámka :Soubor Linux kernel /vmlinuz je vytvořen s podporou pouze pro některá velmi základní zařízení. Obslužné nástroje souborového systému a běžné ovladače zařízení jsou kompilovány samostatně a zabaleny do souboru /initrd (počáteční ramdisk). Zavaděč GRUB nebo LILO musí nejprve umístit obsah souboru /initrd do paměti a poté načíst jádro. Jádro pak použije počáteční ramdisk k získání potřebných ovladačů zařízení pro přístup ke kořenovému systému souborů. Pak se jádro přepne na používání skutečného kořenového souborového systému a uvolní paměť používanou obrazem paměti /initrd.Tento chytrý přístup umožňuje poskytnout jednomu obrazu jádra sadu ovladačů zařízení přizpůsobenou pro každý systém, aniž by se plýtvalo systémovou pamětí pro uložení ovladače zařízení a kódu obslužného programu souborového systému, který se nikdy nepoužívá.
Chcete-li vytvořit vlastní soubor /initrd včetně podpory více cest, použijte níže uvedenou techniku:
1. Vytvořte nový soubor initrd včetně ovladače multipath, device-mapper-multipath a ovladače HBA:
# /sbin/mkinitrd -v /root/initrd-mp.img 2.6.18-prep --with=multipath --with=dm-multipath --with=lpfc --omit-raid-modules
Chcete-li udělat totéž na CentOS/RHEL 6 a 7, podívejte se na níže uvedený příspěvek.
Jak znovu sestavit „initramfs“ pomocí Multipath v CentOS/RHEL 6 a 72. Ověřte soubor /etc/mdadm.conf je nakonfigurován pro zařízení RAID:
# /bin/cat /etc/mdadm.conf DEVICE /dev/mapper/* ARRAY /dev/md0 uuid=ccfe8a98:ea584ff2:2fad9d51:305ea2da devices=/dev/mapper/ocrp1,/dev/mapper/ocrmirrorp1 level=raid1
3. Zkopírujte nový obraz ramdisku do spouštěcího umístění očekávaného zavaděčem:
# /bin/cp /root/initrd-mp.img /boot/
4. Chcete-li použít nový obraz ramdisku, přidejte do konfiguračního souboru zavaděče /boot/grub/grub.conf novou položku:
title MDADM-MP root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-mp.imgPoznámka :Podle potřeby změňte vzorovou stanzu GRUB. Vaše verze jádra a kořenové zařízení se budou jistě lišit od tohoto příkladu.
Při používání CentOS/RHEL 7 a grub2 si prosím přečtěte níže uvedený příspěvek pro přesné kroky.
CentOS / RHEL 7:Jak upravit argumenty GRUB2 pomocí grubby5. Restartujte systém a vyberte položku MDADM-MP z nabídky GRUB.
Nápověda :Pokud stále nevidíte používaná zařízení s více cestami, budete muset přidat spouštěcí skript ke spuštění mdadm jako poslední krok spouštění. Jedním ze způsobů, jak toho dosáhnout, je přidat potřebný příkaz do /etc/rc.local, pokud nechcete psát úplný servisní skript /etc/init.d/.