Jak získám konzistentní cestu k zařízení pro své MD zařízení, ideálně přesně tu, kterou jsem zadal ("/dev/md/myarray")?
Po mdadm --create /dev/md/foobar ...
, oba hostname
a name
jsou uloženy v metadatech mdadm, jak byste měli ověřit pomocí mdadm --examine
nebo mdadm --detail
:
# mdadm --detail /dev/md/foobar
Name : ALU:foobar (local to host ALU)
ALU
je náhodou název hostitele mého počítače ArchLinux:
# hostname
ALU
Můžete určit hostitele, který má být uložen v čase vytvoření:
# mdadm --create /dev/md/foobar --homehost=barfoo
# mdadm --detail /dev/md/foobar
Name : barfoo:foobar
...ale obvykle si to nikdo nepamatuje.
A tady už začínají problémy... možná jste své pole RAID vytvořili z nějakého LiveCD nebo jiného a název hostitele v tomto prostředí vůbec neodpovídal vaší hlavní instalaci. A pak metadata ukládají nějaký zcela nesouvisející název hostitele.
Podobně, pokud vše nastavíte správně, ale pak narazíte na problémy s polem RAID a zavedete záchranný systém, abyste věci prověřili, opět dojde k neshodě s názvy hostitelů.
Nebo naopak, název hostitele se může shodovat, i když se jedná o nesprávný počítač – pokud jste použili stejný název hostitele pro dva nezávislé systémy a poté migrovali disky. Potom cizí pole převezmou jména původních...
Nyní lze metadata změnit také později pomocí mdadm --assemble --update=homehost
nebo --update=name
, to je jeden způsob, jak se s problémem vypořádat. Mělo by být nastaveno správně, ale je obtížné ho změnit, protože (z nějakého důvodu) chybí přímé hexeditování metadat, lze to provést pouze v době sestavování.
Dalším způsobem je ignorovat systémy hostname
a místo toho zadejte --homehost
při sestavování nebo nastavení HOMEHOST
v mdadm.conf
. Toto je podrobně popsáno v manuálové stránce mdadm.conf.
HOMEHOST
Řádek homehost poskytuje výchozí hodnotu pro volbu --homehost=mdadm. Normálně by na řádku mělo být pouze jedno další slovo. Měl by to být název hostitele nebo jedno ze speciálních slov<system>
,<none>
a<ignore>
. Pokud<system>
je zadáno, pak se k získání názvu hostitele použije systémové volání gethostname(2). Toto je výchozí nastavení.
[...]
Po vytvoření polí bude tento název hostitele uložen v metadatech. Když jsou pole sestavována pomocí automatického sestavení, pole, která nezaznamenají správný název hostitele ve svých metadatech, budou sestavena pomocí „cizího“ názvu. "Cizí" jméno vždy končí číselným řetězcem, kterému předchází podtržítko, aby se odlišilo od jakéhokoli možného místního jména. např. /dev/md/1_1 nebo /dev/md/home_0.
Můžete tedy zkusit nastavit HOMEHOST ALU
(v mém případě), nebo obecnější HOMEHOST <ignore>
(nebo HOMEHOST <none>
) v mdadm.conf
. Ale bude to fungovat pouze tehdy, když mdadm.conf
je přítomen. A znovu, pokud nastavíte ignorovat a poté připojíte pole z jiného počítače, můžete narazit na konflikty názvů.
Nejlepší by tedy bylo správně nastavit název hostitele v metadatech a mdadm.conf a neignorovat ho, a ještě lépe nastavit skutečný název hostitele v initramfs před sestavením, ale to může být těžké uvést do praxe.
Moje osobní preference je držet se klasického numerického stylu. Identifikujte se pomocí UUID a ničím jiným:
ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44
ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091
ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93
To je také konzistentní (ale také závisí na tom, zda byl vytvořen tímto způsobem a/nebo nastaven v metadatech, jinak byste také možná museli --update
to). A cizí pole, která neodpovídají daným UUID, by měla skončit jako /dev/md127+
.
Na konci dne, bez ohledu na to, co děláte, byste se neměli slepě spoléhat na /dev/mdX
nebo /dev/md/name
je to stejný způsob, jakým se slepě nespoléháte na /dev/sdX
písmena. Vždy používejte UUID souborového systému k identifikaci všeho, co je na těchto polích.
Existuje příliš mnoho rohových případů, kdy se jména mohou nečekaně změnit, takže v nejlepším případě to může být orientační nápověda nebo nápověda systémovému správci, není to odpověď na všechny problémy.