È possibile scollegare e ricollegare un disco ZFS senza richiedere un resilver completo?


10

Ho un pool con mirroring ZFS con quattro unità totali. Due delle unità sono destinate all'uso per la rotazione di backup offsite. La mia aspettativa era che dopo il resilver iniziale avrei potuto detache in seguito attachun disco e farlo fare solo un resilver incrementale - tuttavia nei test sembra che esegua un resilver completo indipendentemente dal fatto che il disco collegato contenga o meno quasi tutto il pool Contenuti.

Usando un approccio offline/ onlinemi darei il risultato desiderato aggiornando solo il disco - piuttosto che ricostruirlo completamente? O per avere questo lavoro come previsto avrò bisogno di fare qualcosa di completamente diverso - come usare ogni disco di backup come un pool da 1 disco e sendinserire le più recenti istantanee ad esso ogni volta che deve essere aggiornato?


5
-1 Non scollegare / collegare le unità per il backup, utilizzare i comandi di invio / ricezione come previsto dai progettisti ZFS.
Chris S,

2
@ChrisS invece di un -1 che ne dici di scrivere una risposta con alcune citazioni. Sembra che tu abbia detto che le uniche opzioni per i backup sono un pool online da qualche altra parte, il che sarebbe bello sapere se è vero, ma sospetto che non sia così.
STW

1
Siamo spiacenti, non intendo essere un cretino arrogante, ma Server Fault dovrebbe essere destinato esclusivamente agli amministratori di sistema professionali (et al). Il metodo di backup con mirroring di rottura è talmente ingestibile, soggetto a errori e poco professionale che non dovrebbe essere considerato un metodo di backup praticabile. Quello che sto suggerendo è di formattare le due unità di backup con qualsiasi file system desiderato e di utilizzare il zfs sendcomando per eseguire flussi di backup completi o incrementali salvati sui dischi di backup o utilizzare zfs recvper creare un disco duplicato. Consiglio vivamente di utilizzare un qualche tipo di software per gestire questo processo.
Chris S,

Penso che i tuoi punti siano validi, lo voterei come risposta. Sto pensando di riscrivere la mia domanda per concentrarmi di meno sul mio scenario specifico (che deriva da un budget ridotto per un server interno non critico, ma importante,) e più nel nucleo "posso ricollegare un'unità senza richiedere un pieno resilvering?"
STW

Risposte:


14

Non andare sulla strada della rottura dell'array ZFS per "ruotare" i dischi fuori sede. Come hai visto, il tempo di ricostruzione è alto e il processo di ripristino leggerà / verificherà la dimensione utilizzata del set di dati.

Se hai la possibilità, le istantanee e l'invio di dati a un sistema remoto è un approccio pulito e non invadente. Suppongo che potresti passare attraverso il processo di avere un pool a disco singolo dedicato, copiarlo e esportare / importare zpool ... ma non è molto elegante.


Sfortunatamente non posso usare un approccio snapshot-> send poiché non ho l'hardware o la larghezza di banda per eseguire un secondo server ZFS fuori sede. Tuttavia sembra che l'utilizzo offline / online funzionerà, con il compromesso che lo stato segnala come degradato. Vedrò come andrà per la prossima settimana o giù di lì.
STW

1
Inteso. Ma estrarre i dischi in esecuzione da un sistema come forma di backup non è una soluzione solida. Il tuo rischio aumenta drasticamente quando lo fai.
ewwhite,

Buon punto, il mio piano è di metterli offline, sospenderli, disinserire il loro vassoio di hot-swap e quindi dargli un minuto per assicurarmi un arresto completo prima di estrarlo completamente
STW

1
Riesci a gestire un secondo server in loco (o anche un secondo array ZFS nello stesso server)? Inserisci i tuoi alloggiamenti di hotswap, sincronizza tra esso e quello principale, quindi ruota l'intero array ZFS di backup dentro / fuori dal server come unità.
Dan Is Fiddling By Firelight,

11

Dopo ulteriori sperimentazioni ho trovato una soluzione equa, tuttavia viene fornito con un compromesso significativo. I dischi che sono stati offlinema che non sono stati staccati possono successivamente essere riportati in linea solo con un'operazione di ripristino progressivo (" Quando un dispositivo viene portato in linea, tutti i dati che sono stati scritti nel pool vengono risincronizzati con il dispositivo appena disponibile. "). Nei miei test questo riduce il tempo di ripristino di un mirror a 3 dischi da 28 ore a poco più di 30 minuti, con circa 40 GB di delta di dati.

Il compromesso è che qualsiasi pool con un disco offline verrà contrassegnato come degradato. A condizione che ci siano ancora almeno due dischi online (in un pool con mirroring), questo è effettivamente un avvertimento: integrità e ridondanza rimangono intatte.

Come altri hanno già detto, questo approccio globale è tutt'altro che ideale: inviare istantanee a un pool remoto sarebbe molto più adatto, ma nel mio caso non è fattibile.

Riassumendo, se è necessario rimuovere un disco da un pool e successivamente aggiungerlo di nuovo senza richiedere un resilver completo, l'approccio che consiglierei è:

  • offline il disco nel pool: zpool offline pool disk
  • gira giù l'unità (se deve essere tirata fisicamente): hdparm -Y /dev/thedisk
  • lasciare il pool in uno stato degradato con l'unità non allineata
  • per aggiungere nuovamente il disco al pool: zpool online pool disk

E, poiché questo non è ancora stato testato, esiste il rischio che l'operazione del resilver delta non sia accurata. Il pool "live" e / oi dischi offline possono presentare problemi. Aggiornerò se ciò accade a me, ma per ora sperimenterò questo approccio.


1
Se il resilver introdurrà errori nei dati, questi guariranno automaticamente nel tempo o con uno scrub di zpool.
the-wabbit,

Ho capito il valore di uno scrub; Attendo fino a dopo una corretta pulizia su offline e rimuovo il disco di backup
STW,

2
Solo un rapido aggiornamento: nell'ultimo anno questo approccio ha funzionato abbastanza bene. I test di ripristino mensili del backup fuori sede hanno avuto esito positivo e coerente. Ruotare un array (piuttosto che un singolo disco) sarebbe meglio fornire un livello di ridondanza nella copia offsite, e raccomanderei di farlo se possibile. Nel complesso, questo è ancora un approccio hacker e presenta alcuni rischi, ma ha fornito un backup offsite ragionevolmente sicuro ed economico dei nostri dati.
STW,

Direi di non ruotare tutte le unità nell'array poiché il trasporto può danneggiarle lentamente. Non farei la rotazione anche se le unità rimarranno sul posto.
Costin Gușă,

2

Aggiornamento del 15 ottobre 2015: oggi ho scoperto il zpool splitcomando, che divide un nuovo pool (con un nuovo nome) da un pool esistente. splitè molto più pulito di offlinee detach, poiché entrambi i pool possono quindi esistere (ed essere lavati separatamente) sullo stesso sistema. Il nuovo pool può anche essere pulito (e correttamente) export[ed]prima di essere scollegato dal sistema.

(Il mio post originale segue di seguito.)

Avvertimento! Vari commenti su questa pagina implicano che è (o potrebbe essere) possibile zpool detachun'unità, quindi in qualche modo ricollegare l'unità e accedere ai dati in essa contenuti.

Tuttavia, secondo questo thread (e la mia sperimentazione) zpool detachrimuove le "informazioni sul pool" dall'unità staccata. In altre parole, a detachè come una rapida riformattazione dell'unità . Dopo che detachmolti dati potrebbero essere ancora sull'unità, ma sarà praticamente impossibile rimontare l'unità e visualizzare i dati come un file system utilizzabile.

Di conseguenza, mi sembra detachpiù distruttivo di quanto destroy, credo, zpool importpossa recuperare le piscine distrutte!

A nondetach è un , un , un .umountzpool exportzpool offline

Nella mia sperimentazione, se prima ho zpool offlineun dispositivo e poi zpool detachlo stesso dispositivo, il resto del pool dimentica che il dispositivo sia mai esistito. Tuttavia, poiché il dispositivo stesso era offline[d]prima di quello che era detach[ed], il dispositivo stesso non viene mai informato del detach. Pertanto, il dispositivo stesso ha ancora le sue informazioni sul pool e può essere spostato su un altro sistema e quindi import[ed](in uno stato degradato).

Per una maggiore protezione contro di detachte, puoi persino scollegare fisicamente il dispositivo dopo il offlinecomando, ma prima di emettere il detachcomando.

Spero di utilizzare questo offline, quindi detach, quindi importeseguire il backup per il mio pool. Come il poster originale, intendo utilizzare quattro unità, due in uno specchio costante e due per backup mensili, rotanti, off-site (e off-line). Verificherò ogni backup importandolo e pulendolo su un sistema separato, prima di trasportarlo fuori sede. A differenza del poster originale, non mi dispiace riscrivere l'intera unità di backup ogni mese. In effetti, preferisco le riscritture complete in modo da avere nuovi bit.


0

Nella stessa macchina, hai provato a creare un nuovo pool con le 2 unità in un mirror? Quindi, crea uno snapshot sul tuo pool di lavoro, quindi invia lo snapshot al nuovo pool, ripeti, quindi il successivo invio di snapshot sarà incrementale. Questo non è lo stesso con "l'invio di dati a un sistema remoto" poiché si tratta di un pool all'interno dello stesso sistema / server / macchina. Con questa configurazione, puoi ancora applicare zpool split / offline / detach / attach ma lo fai solo nel secondo pool (copia) e non nel pool di origine.

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.