zpool non disponibile dopo aver aggiunto un nuovo disco al server (punto di montaggio modificato)


1

Ho un homeserver con Proxmox con due zpools. Voglio sostituire un pool esistente con HDD più piccoli con uno nuovo. Ma quando inserisco uno dei due nuovi dischi rigidi SATA, i miei zpools non funzionano. I registri affermano che manca un disco importante. Quando invio il nuovo disco, tutto funziona bene.

Ho scoperto che il mio nuovo disco è montato su sda. Ma uno dei vecchi dischi nello zpool esistente è anche montato sdaquando il nuovo non è collegato. Cosa posso fare per evitare questo conflitto? Devo dire a Linux che sdaè riservato per il vecchio disco dallo zpool e che dovrebbe usare sdgper quello nuovo.

Sono confuso che questo comportamento potrebbe persino accadere. Di conseguenza, Linux non sembra associare punti di montaggio a unità come le lettere di unità in Windows. Penso che sia stato un errore usare il mount point e dovrei usare un identificatore univoco (UUID?) In zpool. Ma come posso farlo? Ho pool di zfs esistenti in cui ho usato i punti di mount.

Risposte:


2

Alcune conoscenze di base sul problema

Dopo un po 'di ricerche e tentativi, ho scoperto che zfs ha usato i punti di mount. Quindi la mia teoria aveva ragione: i punti di mount non sono statici come le lettere di unità in Windows. Invece, Linux li assegna nell'ordine di rilevamento durante l'avvio. L'aggiunta o la rimozione di dischi può mescolare i punti di montaggio.

Esempio semplice:

sda -> Drive #1
sdb -> Drive #2
sdc -> Drive #3

Ora aggiungiamo una nuova unità # 4. Potrebbe essere inserito in questo modo:

sda -> Drive #1
sdb -> Drive #4
sdc -> Drive #2
sde -> Drive #3

Se dipendiamo dal punto di montaggio, ora siamo nei guai: il nostro sistema prevede l'unità n. 2 sdb, ma ne ha una completamente diversa (unità n. 4). Secondo l'arch wiki, questo può accadere anche durante un avvio regolare, senza alcuna modifica agli hdds.

Cosa possiamo fare?

Bene, usare quei punti di montaggio sembra una cattiva idea. Dovremmo usare invece la denominazione persistente del dispositivo a blocchi , che sono disponibili usando udev. Dovrebbe essere disponibile su qualsiasi distribuzione linux moderna. I nomi di blocco persistenti non usano nomi neutri come sdao sdb. Al contrario, crea alcuni tipi di nomi, che sono costantemente associati all'unità. Sono paragonabili alle lettere di unità in Windows (sì, tieni presente che le lettere di unità sono associate a partizioni, in cui i nomi dei blocchi identificano un'unità, ma entrambi sono persistenti!).

by-ide by-uuidsembra più rilevante per risolvere questo problema, ma ce ne sono anche altri. Puoi leggere una spiegazione più dettagliata nella pagina wiki collegata dall'Arch. È un articolo generale, che può applicarsi anche ad altre distribuzioni. Per questo problema è importante sapere che uuidssono una specie di ID univoco generato. E possiamo usare idscome alternativa leggibile meglio, perché usano informazioni specifiche su hdd come produttore, modello e numero di serie.

ZFS

Come descritto qui , era necessario esportare tutti i pool e quindi reimportarli, ma con lo -dswitch. Indica a zpool dove cercare i dispositivi:

zpool export <poolname>
zpool import -d /dev/disk/by-id <poolname>

L'utilizzo di zpool statusquesto può essere verificato: prima dell'esportazione / importazione, dovresti vedere i punti di montaggio come /dev/sdaper i dispositivi. Questo dovrebbe cambiare agli ID disco dopo quella procedura.

Volumi regolari (facoltativo)

Per me questo non era abbastanza: ho anche un hdd chiamato buffer per cose come le immagini ISO. Nessun dato importante, solo per alleviare il mio SSD. Quindi questo era un classico volume ext3. Ciò scoraggia l'avvio del mio server, poiché qui si verifica esattamente lo stesso problema: il punto di montaggio ha cambiato la causa dei nuovi dischi, il che ha impedito il montaggio.

Ho risolto questo semplicemente rimuovendo questa unità. Comunque questa è stata la mia idea, dato che i nuovi hdd sono abbastanza grandi e ho potuto risparmiare un po 'di energia con meno dischi. Per fare ciò, dobbiamo rimuovere la memoria da proxmox usando il /etc/pve/storage.cfgfile. Nel mio caso, la parte pertinente si presenta così:

dir: buffer
path /buffer
content iso

Dopo averlo rimosso, dobbiamo dare un'occhiata /etc/fstab. Questo file monta il nostro /buffervolume, dove si verifica la causa principale:

/dev/sdf /buffer ext3 rw 0 0

Come puoi vedere, il punto di montaggio /dev/sdfè presente qui. Se non vuoi rifiutare il disco come faccio io, usa semplicemente un punto di montaggio unico qui! Ad esempio / dev / disk / by-id . È un esempio di nomi di dispositivo a blocchi persistenti. Sono generati sulla base di dati dipendenti dal dispositivo. by-idad esempio utilizza il numero seriale dell'hardware. Quindi siamo persino in grado di connettere due dischi uguali. Maggiori informazioni nel primo paragrafo per informazioni di base.

Nel mio caso, semplicemente rimuovendo questa linea si impedisce a linux di montare il mio hdd. Se si dispone di più volumi, è necessario ripetere tali passaggi per ciascuno di essi, per essere sicuri di non incorrere in problemi dopo il riavvio.


1
Bello scrivere Lion +1 !!
Pimp Juice IT

Ho avuto un'esperienza simile anche se non ho nemmeno aggiunto alcuna unità. Ho fatto un aggiornamento apt Ubuntu per ottenere le ultime correzioni di sicurezza e ha richiesto un riavvio. Dopo il riavvio, le lettere dell'unità sono state riassegnate! La mia unità di avvio era / dev / sda e ora è / dev / sdm ma l'array di unità ora era basato su / dev / sda. Fortunatamente un'importazione di zpool mi ha permesso di riportare le cose online.
AlanObject il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.