Come posso ottenere un percorso di dispositivo coerente per il mio dispositivo MD, idealmente quello esatto che ho specificato ("/dev/md/myarray")?
Dopo mdadm --create /dev/md/foobar ...
, entrambi hostname
e name
sono memorizzati nei metadati mdadm, come dovresti verificare con mdadm --examine
o mdadm --detail
:
# mdadm --detail /dev/md/foobar
Name : ALU:foobar (local to host ALU)
ALU
sembra essere il nome host della mia macchina ArchLinux:
# hostname
ALU
Puoi specificare l'host che deve essere archiviato al momento della creazione:
# mdadm --create /dev/md/foobar --homehost=barfoo
# mdadm --detail /dev/md/foobar
Name : barfoo:foobar
...ma di solito nessuno si ricorda di farlo.
Ed è già qui che iniziano i problemi ... potresti aver creato il tuo array RAID da qualche LiveCD o altro, e il nome host in quell'ambiente non corrispondeva affatto alla tua installazione principale. E poi i metadati memorizzano un nome host completamente non correlato.
Allo stesso modo, se imposti tutto correttamente, ma poi riscontri problemi con il tuo RAID e avvii un sistema di salvataggio per verificare le cose, ancora una volta c'è una mancata corrispondenza con i nomi host.
O viceversa, il nome host potrebbe corrispondere anche se si tratta della macchina sbagliata, se hai utilizzato lo stesso nome host per due sistemi indipendenti e poi hai migrato le unità. Quindi gli array alieni assumono i nomi di quelli originali...
Ora, i metadati possono anche essere modificati successivamente utilizzando mdadm --assemble --update=homehost
o --update=name
, questo è un modo per affrontare il problema. Dovrebbe essere impostato correttamente, ma è difficile da modificare in quanto (per qualche motivo) a meno di modificare direttamente i metadati, può essere eseguito solo in fase di assemblaggio.
Un altro modo è ignorare i sistemi hostname
e specifica invece --homehost
sull'assembly o impostare HOMEHOST
in mdadm.conf
. Questo è descritto in dettaglio nella manpage mdadm.conf.
HOMEHOST
La riga homehost fornisce un valore predefinito per l'opzione --homehost=a mdadm. Normalmente dovrebbe esserci solo un'altra parola sulla riga. Dovrebbe essere un nome host o una delle parole speciali<system>
,<none>
e<ignore>
. Se<system>
viene fornito, quindi viene utilizzata la chiamata di sistema gethostname(2) per ottenere il nome dell'host. Questa è l'impostazione predefinita.
[...]
Quando vengono creati gli array, questo nome host verrà archiviato nei metadati. Quando gli array vengono assemblati utilizzando l'assemblaggio automatico, gli array che non registrano il nome homehost corretto nei loro metadati verranno assemblati utilizzando un nome "straniero". Un nome "straniero" termina sempre con una stringa di cifre preceduta da un carattere di sottolineatura per differenziarlo da un eventuale nome locale. per esempio. /dev/md/1_1 o /dev/md/home_0.
Quindi puoi provare a impostare HOMEHOST ALU
(nel mio caso), o il più generico HOMEHOST <ignore>
(o HOMEHOST <none>
) nel mdadm.conf
. Ma funzionerà solo quando quel mdadm.conf
è presente. E ancora, se imposti ignore e poi agganci un array da un'altra macchina, potresti incorrere in conflitti di nome.
Quindi sarebbe meglio impostare correttamente il nome host nei metadati e in mdadm.conf e non ignorarlo, e meglio ancora impostare il nome host effettivo in initramfs prima dell'assemblaggio, ma può essere difficile da mettere in pratica.
La mia preferenza personale è quella di attenersi al classico stile numerico. Identifica tramite UUID e nient'altro:
ARRAY /dev/md1 UUID=8fe790ca:f3fa3388:4ae125b6:2c3a5d44
ARRAY /dev/md2 UUID=f14bef5b:a5356e51:25fde128:09983091
ARRAY /dev/md3 UUID=0639c68d:4c844bb1:5c02b33e:00ab4a93
Anche questo è coerente (ma dipende anche dal fatto che sia stato creato in questo modo e/o impostato di conseguenza nei metadati, altrimenti potresti anche dover --update
esso). E gli array alieni che non corrispondono agli UUID forniti dovrebbero finire come /dev/md127+
.
Alla fine della giornata, qualunque cosa tu faccia, non dovresti affidarti ciecamente a /dev/mdX
o /dev/md/name
È lo stesso modo in cui non ti affidi ciecamente a /dev/sdX
lettere. Usa sempre gli UUID del filesystem per identificare qualsiasi cosa si trovi su quegli array.
Ci sono troppi casi limite in cui i nomi potrebbero cambiare inaspettatamente, quindi nella migliore delle ipotesi, questo può essere un aiuto di orientamento o un suggerimento per l'amministratore di sistema, non è la risposta a tutti i problemi.