GNU/Linux >> Znalost Linux >  >> Linux

Název zařízení MD se po prvním restartu změní tak, aby zahrnoval HOSTNAME:. Jak získám konzistentní jméno?

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.


Linux
  1. Linux – jak spolehlivě získat název operačního systému?

  2. Jak získám uživatelské jméno v souboru Makefile?

  3. Jak získat název hostitele z IP (Linux)?

  1. Jak získat pouze ID procesu v zadaném názvu procesu v linuxu?

  2. Jak nastavit svou výchozí bránu jako trvalou v CentOS? Aby se po restartu neztratil

  3. Jak změnit název zařízení MD (mdadm)

  1. Jak zajistit, aby rozhraní ťuknutí byla trvalá po restartu?

  2. Jak získat název počítače (ne jeho název hostitele)?

  3. Linuxový raid po restartu zmizí