GNU/Linux >> Linux Esercitazione >  >> Linux

Modifica del nome del dispositivo MD per includere HOSTNAME:dopo il primo riavvio. Come ottengo un nome coerente?

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.


Linux
  1. Come ottengo il nome utente in un Makefile?

  2. Come ottenere il nome host dall'IP (Linux)?

  3. Come ottenere il PID in base al nome del processo?

  4. Come far funzionare di nuovo un dispositivo RAID inattivo?

  5. Come posso annullare l'impostazione o eliminare una funzione bash?

Come modificare il nome host su Debian Linux

Come rendere permanente il mio gateway predefinito in CentOS? In modo che dopo un riavvio non si perda

Come ottenere il nome di dominio in Windows usando il comando?

Come impedire la modifica dell'indirizzo MAC dopo la disconnessione?

Come ottenere il nome dell'utente da uid

Android - Come posso far rilevare il mio dispositivo da ADB su Linux?