web-dev-qa-db-fra.com

Nom du périphérique MD changeant pour inclure "Nom d'hôte:" Après le redémarrage du premier redémarrage. Comment puis-je obtenir un nom cohérent?

Sur Ubuntu 18.04, je crée un tableau RAID 1 comme ceci:

mdadm --create /dev/md/myarray --level=1 --run --raid-devices=2 /dev/sdc /dev/sdd

J'ajoute ensuite la sortie de mdadm --detail --scan /dev/md/myarray à /etc/mdadm/mdadm.conf. Cela ressemble à ceci:

ARRAY /dev/md/myarray metadata=1.2 name=MYHOSTNAME:myarray UUID=...

Le nom du périphérique a été préfixe avec "MyHostName:". À ce stade, le Symlink /dev/md/myarray existe toujours, mais après la première fois que je le redémarre devient /dev/md/MYHOSTNAME:myarray, casser des choses. Pour que cela aggrave, cela ne se produit que sur certains Machines - sur d'autres, le symbole de Symlink reste /dev/md/myarray. Tous fonctionnent Ubuntu 18.04, donc je ne sais pas pourquoi.

Comment obtenir un chemin de périphérique cohérent pour mon appareil MD, idéalement exactement celui que j'ai spécifié ("/ dev/md/mraparray")? J'ai essayé de modifier mdadm.conf pour supprimer le nom d'hôte, mais même si la ligne dit

ARRAY /dev/md/myarray metadata=1.2 name=myarray UUID=...

le Symlink change toujours sur le redémarrage - sur des machines qui "veulent" le nom d'hôte. J'ai aussi essayé d'aller dans l'autre sens et d'ajouter le nom d'hôte à la fois:

ARRAY /dev/md/HOSTNAME:myarray metadata=1.2 name=HOSTNAME:myarray UUID=...

mais encore une fois sur des machines qui "ne veulent pas" le nom d'hôte, le symlink devient/dev/md/mraparray après un redémarrage!

Je ne peux pas utiliser le périphérique numérique (/ dev/md127) soit parce que lorsqu'il y a plusieurs périphériques MD créés, ils ont tendance à alterner entre MD126 et MD127! C'est fou!

6
EM0

Comment obtenir un chemin de périphérique cohérent pour mon appareil MD, idéalement exactement celui que j'ai spécifié ("/ dev/md/mraparray")?

Après mdadm --create /dev/md/foobar ..., les deux hostname et name sont stockés dans les métadonnées Mdadm, comme vous devez vérifier avec mdadm --examine ou mdadm --detail:

# mdadm --detail /dev/md/foobar
           Name : ALU:foobar  (local to Host ALU)

ALU arrive à être le nom d'hôte de ma machine Archlinux:

# hostname
ALU

Vous pouvez spécifier l'hôte qui doit être stocké au moment de la création:

# mdadm --create /dev/md/foobar --homehost=barfoo
# mdadm --detail /dev/md/foobar
               Name : barfoo:foobar

... Mais généralement, personne ne se souvient de le faire.


Et c'est déjà là que les problèmes commencent ... Vous avez peut-être créé votre matrice RAID de certains LiveCD ou autre, et le nom d'hôte dans cet environnement ne correspond pas à votre installation principale du tout. Et puis, les métadonnées stockent un nom d'hôte totalement indépendant.

De même si vous définissez tout correctement, mais rencontrez des problèmes avec votre raid et démarrez un système de sauvetage pour vérifier les choses, et encore une fois, il y a une inadéquation avec les noms d'hôtes.

Ou l'inverse, le nom d'hôte peut correspondre même s'il s'agit de la mauvaise machine - si vous utilisez le même nom d'hôte pour deux systèmes indépendants, puis migrer les lecteurs. Ensuite, les tableaux extraterrestres reprennent les noms des originaux ...


Maintenant, les métadonnées peuvent également être modifiées ultérieurement en utilisant mdadm --assemble --update=homehost ou --update=name, c'est un moyen de faire face à un problème. Il devrait être correctement fixé, mais il est difficile de changer comme (pour une raison quelconque) à court de métadonnées hexagonales directement, elle ne peut être effectuée qu'au temps de montage.

Une autre façon est d'ignorer les systèmes hostname et spécifiez plutôt --homehost sur montage ou ensemble HOMEHOST dans mdadm.conf. Ceci est décrit dans certains détails dans le manche MDADM.CONF.

HOMEHOST
[.____] La ligne HomeHost donne une valeur par défaut pour l'option --HomeHost = Option à Mdadm. Il ne devrait normalement être que d'un autre mot sur la ligne. Il devrait être soit un nom d'hôte, soit l'un des mots spéciaux <system>, <none> et <ignore>. Si <system> est donné, alors le gethostname (2) SystemCall est utilisé pour obtenir le nom d'hôte. Ceci est la valeur par défaut.
[...]
[.____] Lorsque des tableaux sont créés, ce nom d'hôte sera stocké dans les métadonnées. Lorsque des tableaux sont assemblés à l'aide de l'assemblage automatique, des tableaux qui n'enregistrent pas le nom de la maison correct de leurs métadonnées seront assemblés à l'aide d'un nom "étranger". Un nom "étranger" se termine toujours avec une chaîne de chiffres précédée d'un soulignement pour la différencier de tout nom local possible. par exemple./dev/md/1_1 ou/dev/md/home_0.

Donc, vous pouvez essayer de définir HOMEHOST ALU (dans mon cas) ou plus générique HOMEHOST <ignore> (ou HOMEHOST <none>) dans le mdadm.conf. Mais cela ne fonctionnera que lorsque mdadm.conf est présent. Et encore une fois si vous définissez Ignorer puis connectez-vous une matrice d'une autre machine, vous pourriez rencontrer des conflits de noms.

Il serait donc préférable de définir correctement le nom d'hôte dans les métadonnées et Mdadm.conf et ne pas l'ignorer, et mieux encore définir le nom d'hôte réel dans InitiDramfs avant l'assemblage, mais il peut être difficile de mettre en pratique.

Ma préférence personnelle consiste à coller au style numérique classique. Identifier par UUID et rien d'autre:

ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44
ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091
ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93

Ceci est également cohérent (mais cela dépend également d'avoir été créé de cette manière et/ou défini en conséquence dans les métadonnées, sinon vous pourriez également avoir à --update ce). Et des tableaux extraterrestres qui ne correspondent pas aux Uuids donnés devraient se retrouver comme /dev/md127+.


À la fin de la journée, peu importe ce que vous faites, vous ne devriez pas conserver aveuglément sur /dev/mdX ou /dev/md/names la même chose que vous ne vous aveuglez pas aveuglément sur /dev/sdX des lettres. Utilisez toujours des uuids de système de fichiers pour identifier tout ce qui est sur ces tableaux.

Il y a trop de cas d'angle où les noms peuvent changer de manière inattendue, alors au mieux, cela peut être une aide d'orientation ou une allusion à la sysadmin, ce n'est pas la réponse à tous les problèmes.

4
frostschutz