GNU/Linux >> Linux Esercitazione >  >> Linux

Perché è necessario inizializzare un dispositivo raid 10?

Soluzione 1:

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 potresti avere dati diversi lì, violando così questa presunzione. Questo è il motivo per cui è necessaria l'inizializzazione. Copia semplicemente i contenuti della prima unità su altri. Nota che in alcune condizioni puoi farla franca senza inizializzare le unità - di solito i dispositivi nuovi di fabbrica hanno già zeri dappertutto, quindi puoi semplicemente ignorarlo. Il mdadm opzione --assume-clean fa questo, ma ti avverte:

   --assume-clean

Dì a mdadm che l'array esisteva già ed è noto per essere pulito. Può essere utile quando si tenta di eseguire il ripristino da un errore grave poiché si può essere certi che nessun dato verrà influenzato a meno che non si scriva effettivamente sull'array. Può anche essere utilizzato durante la creazione di un RAID1 o RAID10 se si desidera evitare la risincronizzazione iniziale, tuttavia questa pratica, sebbene normalmente sicura, non è consigliata. Usalo solo se sai davvero cosa stai facendo.

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

Nota che almeno il mdadm di Linux inizializzerà l'array in background. Puoi tranquillamente creare FS su di esso il primo secondo. Le prestazioni ne risentiranno fino al termine dell'inizializzazione, ma questo è tutto.

Ma:

a) Quando si esegue mkfs alcune utilità controllano se c'è già qualcosa su quell'unità. Sebbene questo tocchi solo alcune aree di guida ben note, legge prima che tu scriva qualsiasi cosa, mettendoti così in pericolo.

b) Se esegui una risincronizzazione periodica del tuo array, il dispositivo RAID non sa nulla del tuo FS. Legge semplicemente ogni blocco da ogni dispositivo e li confronta. E se non utilizzi un FS copy-on-write (ad es. ZFS o BTRFS) e non riempi mai il tuo FS, è perfettamente plausibile che un blocco rimanga non inizializzato dal punto di vista di FS per anni.

Perché risincronizzare con i dispositivi RAID1?

Per lo stesso motivo ti risincronizzi con i dispositivi RAID5 o qualsiasi altro livello (eccetto RAID0). Legge tutti i dati e confronta/verifica i checksum RAID (in RAID 5 o 6). Se un bit è 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 interferito accidentalmente su questa particolare regione del piatto, qualunque cosa) rileverà l'incoerenza, ma non sarà in grado di farlo Aiutarti. Se, OTOH, uno dei dischi rigidi riporterà semplicemente "Non riesco a leggere quel blocco", il che è più probabile con un'unità guasta, hai appena rilevato un errore in anticipo e hai ridotto il tempo di esecuzione in modalità degradata (contando da il guasto dell'unità, non da quando te ne accorgi). Raid non ti aiuterà se un'unità si guasta e un mese dopo si guasta l'altra se non noti il ​​primo guasto in quel mese.

RAID10

Ora, per RAID10 vale tutto quanto sopra. Dopotutto RAID10 è solo un modo intelligente per 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 software potrebbero comportarsi diversamente. Altre versioni del kernel Linux e/o mdadm anche gli strumenti che sto usando potrebbero comportarsi in modo diverso.

Soluzione 2:

Ricorda che RAID 1 è un mirror e che RAID 10 è una striscia di mirror.

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

Ricorda anche che RAID opera a un livello molto basso; non sa nulla dei filesystem o di qualsiasi dato possa essere memorizzato sul disco. Potrebbe anche non esserci essere un filesystem in uso.

Pertanto, l'inizializzazione in questi array consiste nella copia dei dati da un disco in ciascun mirror così come sono sull'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) ha un'opzione per questo, o lo fa automaticamente.

Soluzione 3:

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

E dovresti fare controlli periodici.


Linux
  1. Che cos'è un server Linux e perché la tua azienda ne ha bisogno?

  2. Perché Unix Time inizia al 1970-01-01?

  3. Perché Ubuntu ha bisogno di due kernel?

  4. Perché clang ha ancora bisogno di libgcc.a per compilare il mio codice?

  5. Impossibile fermare il dispositivo raid

Perché `esce &` non funziona?

La modifica dello scambio richiede un riavvio?

Perché abbiamo bisogno di mktemp?

Perché stdout necessita di uno svuotamento esplicito quando viene reindirizzato al file?

Perché abbiamo bisogno di un bootloader in un dispositivo integrato?

Perché abbiamo bisogno del file .so.1 in Linux?