Comment puis-je obtenir un chemin d'accès de périphérique cohérent pour mon périphérique MD, idéalement celui que j'ai spécifié ("/dev/md/myarray") ?
Après mdadm --create /dev/md/foobar ...
, les deux hostname
et name
sont stockés dans les métadonnées mdadm, comme vous devez le vérifier avec mdadm --examine
ou mdadm --detail
:
# mdadm --detail /dev/md/foobar
Name : ALU:foobar (local to host ALU)
ALU
se trouve ê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 à partir d'un LiveCD ou autre, et le nom d'hôte dans cet environnement ne correspondait pas du tout à votre installation principale. Et puis les métadonnées stockent un nom d'hôte complètement indépendant.
De même, si vous configurez tout correctement, mais que vous rencontrez ensuite des problèmes avec votre RAID et démarrez un système de secours pour vérifier les choses, il y a encore une fois une incompatibilité avec les noms d'hôte.
Ou inversement, le nom d'hôte peut correspondre même s'il s'agit de la mauvaise machine - si vous avez utilisé le même nom d'hôte pour deux systèmes indépendants, puis migrez les lecteurs. Ensuite, les tableaux extraterrestres reprennent les noms des originaux...
Désormais, les métadonnées peuvent également être modifiées ultérieurement à l'aide de mdadm --assemble --update=homehost
ou --update=name
, c'est une façon de traiter le problème. Il doit être défini correctement, mais il est difficile de le modifier car (pour une raison quelconque) à moins d'éditer directement les métadonnées en hexadécimal, cela ne peut être fait qu'au moment de l'assemblage.
Une autre façon est d'ignorer les systèmes hostname
et spécifiez à la place --homehost
sur montage ou ensemble HOMEHOST
en mdadm.conf
. Ceci est décrit en détail dans la page de manuel mdadm.conf.
HÔTE D'ACCUEIL
La ligne homehost donne une valeur par défaut pour l'option --homehost=à mdadm. Il ne devrait normalement y avoir qu'un seul autre mot sur la ligne. Il doit s'agir soit d'un nom d'hôte, soit de l'un des mots spéciaux<system>
,<none>
et<ignore>
. Si<system>
est donné, alors l'appel système gethostname(2) est utilisé pour obtenir le nom d'hôte. C'est la valeur par défaut.
[...]
Lorsque les baies sont créées, ce nom d'hôte sera stocké dans les métadonnées. Lorsque les baies sont assemblées à l'aide de l'auto-assemblage, les baies qui n'enregistrent pas le nom d'hôte d'accueil correct dans leurs métadonnées seront assemblées à l'aide d'un nom "étranger". Un nom "étranger" se termine toujours par une chaîne de chiffres précédée d'un trait de soulignement pour le différencier de tout nom local éventuel. par exemple. /dev/md/1_1 ou /dev/md/home_0.
Vous pouvez donc essayer de définir HOMEHOST ALU
(dans mon cas), ou le plus générique HOMEHOST <ignore>
(ou HOMEHOST <none>
) dans le mdadm.conf
. Mais cela ne fonctionnera que lorsque ce mdadm.conf
est présent. Et encore une fois, si vous définissez ignore puis connectez un tableau à partir d'une autre machine, vous risquez de rencontrer des conflits de noms.
Il serait donc préférable de définir correctement le nom d'hôte dans metadata et mdadm.conf et de ne pas l'ignorer, et mieux encore de définir le nom d'hôte réel dans initramfs avant l'assemblage, mais cela peut être difficile à mettre en pratique.
Ma préférence personnelle est de m'en tenir au style numérique classique. Identifiez-vous 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 dépend également du fait qu'il a été créé de cette façon et/ou défini en conséquence dans les métadonnées, sinon vous devrez peut-être également --update
ce). Et les tableaux étrangers qui ne correspondent pas aux UUID donnés devraient se retrouver sous la forme /dev/md127+
.
En fin de compte, quoi que vous fassiez, vous ne devriez pas vous fier aveuglément à /dev/mdX
ou /dev/md/name
c'est de la même manière que vous ne vous fiez pas aveuglément à /dev/sdX
des lettres. Utilisez toujours les UUID du système de fichiers pour identifier tout ce qui se trouve sur ces baies.
Il y a trop de cas où les noms peuvent changer de manière inattendue, donc au mieux, cela peut être une aide d'orientation ou un indice pour l'administrateur système, ce n'est pas la réponse à tous les problèmes.