Perché un dispositivo raid 10 deve essere inizializzato?


9

Quando si crea un dispositivo raid software Linux come dispositivo raid10, sono confuso sul motivo per cui deve essere inizializzato. La stessa domanda vale per raid1 o raid0, davvero.

Alla fine la maggior parte delle persone metterebbe un file system di qualche tipo sopra di esso, e quel file system non dovrebbe assumere alcuno stato dei dati del disco. Ogni scrittura influenzerà entrambi i dischi in una configurazione raid10 o raid1, in cui vengono scritti gli N mirror. Non dovrebbe esserci alcun motivo per inizializzare un raid10 inizialmente, poiché accadrà nel tempo.

Posso capire perché per una configurazione raid5 / 6 in cui vi sia un requisito di parità, ma anche allora sembra che questo potrebbe essere fatto pigramente.

È solo così che le persone si sentono meglio al riguardo?


1
Buona domanda. È possibile saltare la sincronizzazione durante la creazione del RAID e ho trovato dei consigli per farlo nel caso in cui uno o più dispositivi sottostanti siano SSD. Non so se esistono scenari in cui è necessaria la sincronizzazione per il corretto funzionamento.
Kasperd,

Risposte:


2

È necessaria la sincronizzazione iniziale perché eventuali differenze tra i mirror verrebbero visualizzate come errori durante il controllo periodico.

E dovresti fare controlli periodici.


1
Vedo perché i controlli periodici per la leggibilità dei dati possono essere utili. Ma a che serve un controllo periodico per repliche identiche? Tali controlli possono essere utili se eseguiti da un file system che controlla i dati. Ma a livello RAID senza conoscenza del file system non puoi sapere quale delle due diverse repliche è buona, non puoi sapere come si è verificata la discrepanza in primo luogo e non puoi sapere quale file (se presente) è interessato. Quindi sembra che gli avvisi sulle incoerenze a questo livello siano per lo più inutili in quanto non c'è nulla che l'amministratore possa fare con gli avvisi comunque.
Kasperd,

Poiché è comunque necessario leggere i dati, il costo del confronto è minimo, ma può mostrare che uno dei dischi ha sviluppato un problema altrimenti non rilevato (ad es. RAM difettosa nella cache dell'unità). L'amministratore avrebbe quindi suddiviso l'array, esaminando manualmente le differenze e scegliendo quale unità sostituire.
Simon Richter,

Dovresti quindi approfondire questo nella tua risposta.
Kasperd,

So che sono passati molti anni, ma questa è l'unica ragione valida che posso vedere. Non penso che importi altrimenti se i dati non sono sincronizzati, dato che per definizione non sono ancora scritti, quindi il filesystem applicato all'unità raid non leggerà mai da quei blocchi. Accertarsi che i controlli periodici passino dall'inizio, tuttavia, è necessario. Grazie!
Michael Graff,

7

Raid 1, essendo un mirror, dipende dal fatto che tutti i dischi in un mirror siano copie esatte l'uno dell'altro. Prendi il tuo disco rigido casuale e un altro disco rigido casuale, e probabilmente hai dati diversi lì, violando così questa presunzione. Ecco perché è necessaria l'inizializzazione. Copia semplicemente i contenuti del primo disco ad altri. Nota che in alcune condizioni puoi evitare di inizializzare le unità: di solito i dispositivi nuovi di fabbrica hanno già degli zeri ovunque, quindi puoi semplicemente ignorarlo. L' mdadmopzione --assume-cleanfa questo, ma ti avverte:

   --assume-clean

Dì a mdadm che l'array preesisteva ed è noto per essere pulito. Può essere utile quando si tenta di ripristinare da un errore grave in quanto si può essere certi che nessun dato sarà interessato a meno che non si scriva effettivamente sull'array. Può essere utilizzato anche durante la creazione di un RAID1 o RAID10 se si desidera evitare la risincronizzazione iniziale, tuttavia questa pratica, sebbene normalmente sicura, non è consigliata. Usa questo solo se sai davvero cosa stai facendo.

Se non lo fai, c'è una discrepanza tra le unità e viene letta, non si sa cosa leggerà l'unità. Dovresti essere abbastanza al sicuro con un filesystem (ma nota sotto), perché molto probabilmente scriverai prima di leggere qualsiasi cosa da quel dispositivo, e poi sei chiaro.

Si noti che almeno Linux mdadminizializzerà l'array in background. Puoi creare felicemente FS sopra di esso il primo secondo. Le prestazioni soffriranno fino al termine dell'inizializzazione, ma è tutto.

Ma:

a) Quando si eseguono mkfsalcune utility verificare se c'è già qualcosa su quell'unità. Mentre questo tocca solo alcune regioni ben note di guida, legge prima di scrivere qualsiasi cosa, mettendoti in pericolo.

b) Se si esegue una risincronizzazione periodica dell'array, il dispositivo RAID non è a conoscenza del proprio FS. Legge semplicemente ogni blocco da ogni dispositivo e li confronta. E se non stai usando un FS copia-su-scrittura (es. ZFS o BTRFS) e non riempi mai il tuo FS, è perfettamente plausibile che un blocco rimanga non inizializzato dalla prospettiva FS per anni.

Perché risincronizzare con i dispositivi RAID1?

Per lo stesso motivo, esegui la risincronizzazione con i dispositivi RAID5 o qualsiasi altro livello (tranne RAID0). Legge tutti i dati e confronta / verifica i checksum RAID (in RAID 5 o 6). Se un po 'è stato capovolto in qualche modo (perché la memoria HD ha avuto un capovolgimento spontaneo, perché i cellulari di te e dei tuoi 5 vicini hanno appena interferito accidentalmente su questa particolare regione del piatto, qualunque cosa) rileverà l'incoerenza, ma non sarà in grado di Aiutarti. Se, OTOH, uno dei dischi rigidi riporta semplicemente "Non riesco a leggere quel blocco", che è più probabile con un'unità guasta, hai appena rilevato un guasto in anticipo e ridotto il tempo di esecuzione in modalità degradata (contando da il guasto dell'unità, non da quando lo noti). Il raid non ti aiuterà se un'unità si guasta e un mese dopo l'altra non funziona se non

RAID10

Ora, per RAID10 vale tutto quanto sopra. Dopotutto RAID10 è solo un modo intelligente di dire "Sto mettendo i miei due dispositivi RAID1 in una coppia RAID0".

Avvertimento:

Questo è tutto un comportamento indefinito. Perché ho controllato su Linux, usando mdadm, altre implementazioni RAID del software potrebbero comportarsi diversamente. Anche altre versioni del kernel e / o mdadmstrumenti di Linux che sto usando potrebbero comportarsi diversamente.


1
Si prega di fornire una citazione per If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Credo che questa affermazione sia errata. Almeno fornire un esempio del messaggio di errore in modo che sia possibile consultare la fonte per verificare in quali circostanze viene prodotta.
Kasperd,

1
Così va meglio. Hai verificato l'affermazione sulla scrittura di zeri? Penso che non scriva zero ma piuttosto copia uno dei dischi negli altri.
Kasperd,

1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.In pericolo di cosa? Mi rendo conto che la lettura potrebbe comportare qualcosa, ma perché ciò comporterebbe un qualche tipo di pericolo per l'utente se (a) le informazioni da leggere non vengono utilizzate da nessuna parte e (b) sta per accadere una scrittura?
Vegard,

1
@kasperd hai ragione, copia il primo dispositivo nel secondo. Test su urandomdispositivo inizializzato, con linux mdadm mostra che i primi 80k rimangono diversi, così come gli ultimi 48k. Quest'ultimo probabilmente a causa dell'arrotondamento delle dimensioni del RAID per bloccare le dimensioni. Non ho testato con diverse dimensioni del dispositivo, ma l'80 + 48 è esattamente la differenza di dimensioni tra il dispositivo RAID e il dispositivo a blocchi sottostante.
Torinthiel,

1
Una cosa da considerare è che di solito durante l'inizializzazione, il sistema di raid leggerà SEMPRE il disco A e lo copierà sul disco B. Perché? Poiché è possibile utilizzare il disco durante l'inizializzazione, è possibile che siano stati scritti dati nel blocco 100.000. Una volta che il raid init arriva a quel blocco, sia A che B sono già identici, quindi non succede nulla. Se invece azzerasse i blocchi, cancellerebbe i dati validi. Quindi, ancora una volta, vedo due motivi per garantire che i blocchi siano identici: "è sempre stato fatto" e "in modo da poter eseguire un controllo in un secondo momento" - Metto anche in dubbio l'utilità di quel controllo. La lettura è buona, a confronto? non sono sicuro.
Michael Graff,

5

Ricordare che RAID 1 è un mirror e che RAID 10 è una serie di mirror.

La domanda è: su quale disco in ciascun mirror sono validi i dati? In un array appena creato, questo non può essere noto, poiché i dischi potrebbero avere dati diversi.

Ricorda anche che RAID funziona a un livello molto basso; non sa nulla di filesystem o di qualunque dato possa essere archiviato sul disco. Potrebbe non esserci nemmeno un filesystem in uso.

Pertanto, l'inizializzazione in questi array consiste nel fatto che i dati di un disco in ciascun mirror vengono copiati così come sono nell'altro disco.

Ciò significa anche che l'array è sicuro da usare dal momento della creazione e può essere inizializzato in background; la maggior parte dei controller RAID (e Linux mdraid) hanno un'opzione per questo, o lo fanno automaticamente.


I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Michael Hampton,

1

Detto semplicemente perché non ci si aspetta che due nuovi dischi siano copie perfette l'uno dell'altro dall'inizio.

Devono essere trasformati in copie perfette l'uno dell'altro.

Inoltre, l'inizializzazione include l'impostazione del superblocco dei metadati con informazioni sulla configurazione dell'array.

Il file / proc / mdstat dovrebbe dire che il dispositivo è stato avviato, che il mirror è in fase di ricostruzione e un ETA del completamento della ricostruzione. La ricostruzione viene eseguita utilizzando la larghezza di banda I / O inattiva. Quindi, il tuo sistema dovrebbe essere ancora reattivo, anche se i LED del tuo disco mostreranno anche molta attività.

Il processo di ricostruzione è trasparente, quindi puoi effettivamente utilizzare il dispositivo anche se il mirror è attualmente in fase di ricostruzione.


2
Ma perché devono essere copie perfette l'una dell'altra? Cosa potrebbe discostarsi dal fatto che i due siano incoerenti in settori che non sono mai stati utilizzati dal file system?
Kasperd,

@kasperd RAID è implementato a un livello inferiore rispetto a qualsiasi file system. Quindi la domanda diventa: qual è il "file system" a cui ti riferisci.
Taemyr,

@Taemyr Non mi riferisco ad alcun file system specifico. Scegli quello che preferisci e spiega cosa si romperà usandolo su un RAID-1 in cui le repliche non erano sincronizzate prima di inizializzare il file system.
Kasperd,

@kasperd Non esiste alcun file system da interrompere a livello di RAID.
Taemyr,

1
Nel mio caso, come poster originale, non mi interessa quale file system. Non conosco file system in grado di leggere settori in cui non è mai stato scritto, quindi non importa qualsiasi stato indeterminato di quei settori non scritti.
Michael Graff,
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.