Passa al contenuto principale
file-recoveryINFO

Recupero RAID 10: quanti dischi si possono rompere, e perché il manuale md rifiuta di dirlo

Il RAID 10 passa per il caso facile: coppie in mirror, si recupera ogni coppia come un RAID 1. Il driver md di Linux non funziona così. Accetta un numero di dischi che non è multiplo del numero di copie, offre tre layout sotto lo stesso numero di livello, e il manuale md scrive che la sopravvivenza al livello 10 dipende dalla configurazione.

Di Eric Gerard · Editore · Save My Disk8 min di letturaFoto via Pexels

Il RAID 10 ha fama di essere il livello facile. Nessuna parità da ricostruire, nessuna aritmetica di stripe, solo coppie in mirror: si trova la metà superstite di ogni coppia, si copiano i file, fine. Quella fama viene dalla definizione da manuale del RAID 1+0.

Il driver md di Linux, su cui gira la maggior parte degli array RAID 10 al di fuori dei controller hardware, non implementa quella definizione da manuale. Ne implementa una più ampia, che la contiene. Se il vostro piano di recupero presuppone delle coppie, potrebbe essere il piano di un array che non avete.

Il nome promette coppie, il driver non le pretende

Il manuale md apre la sezione esattamente come tutti si aspettano. Descrive il RAID10 come « a combination of RAID1 and RAID0, and is sometimes known as RAID1+0 », e aggiunge che « every datablock is duplicated some number of times, and the resulting collection of datablocks are distributed over multiple drives ».

Rileggete la seconda frase, perché è quella che fa il lavoro vero. Non dice che i dischi vengono raggruppati in mirror. Dice che le copie vengono distribuite. Il manuale enuncia poi la conseguenza senza giri di parole: « It should be noted that the number of devices in a RAID10 array need not be a multiple of the number of replica of each data block; however, there must be at least as many devices as replicas. »

Un RAID 10 di tre dischi con due copie di tutto è dunque un array legittimo e ordinario. Anche uno di cinque dischi. Nessuno dei due si scompone in coppie, per la semplice ragione che coppie non ce ne sono. La ridondanza è reale, ma è distribuita sull'insieme invece che chiusa in coppie, e ogni riflesso di recupero costruito su « trovare l'altra metà di questo mirror » non ha più nulla a cui aggrapparsi.

Tre layout si nascondono dietro un solo numero di livello

Alla creazione dell'array vengono decise due cose che poi non compaiono mai nel numero di livello: quante copie di ogni blocco esistono e dove finiscono. Il manuale è esplicito: « When configuring a RAID10 array, it is necessary to specify the number of replicas of each data block that are required (this will usually be 2) and whether their layout should be 'near', 'far' or 'offset'. »

I tre differiscono soltanto per la collocazione.

Near avvicina le copie. Il manuale le descrive disposte « consecutively ('as close to each other as possible') across the stripes of the array », e nota che con un numero pari di dischi finiscono probabilmente allo stesso offset su dischi diversi. È la disposizione che si comporta come il manuale scolastico, e lo stesso manuale md la chiama « the 'classic' RAID1+0 ».

Far le allontana deliberatamente, « quite distant ('as far as reasonably possible') from each other ». Il motivo è la velocità, non la sicurezza: « The advantage of this layout is that MD can easily spread sequential reads over the devices, making them similar to RAID0 in terms of speed. » Un array montato per il throughput in lettura è molto spesso un array far, e la sua seconda copia non si trova da nessuna parte vicino alla prima.

Offset è il compromesso, in cui « all the copies of a given chunk are striped consecutively ('offset by the stripe length after each other') over the devices ». Il manuale se ne attende caratteristiche di lettura vicine a far con una dimensione di chunk sufficientemente grande, senza altrettanti spostamenti di testina in scrittura.

Dal lato dei dati non cambia nulla tra i tre. Dal lato di dove cercarli cambia tutto.

File di cassetti per dischi montati a rack fotografate dall'alto con angolo radente, decine di slitte identiche con piccoli led verdi di attività, che si allontanano sfocate verso il fondo dell'armadio.
File di cassetti per dischi montati a rack fotografate dall'alto con angolo radente, decine di slitte identiche con piccoli led verdi di attività, che si allontanano sfocate verso il fondo dell'armadio.

Perché questo decide se la ricostruzione restituisce file o rumore

Ricostruire un array a stripe significa rispondere a tre domande: quali dischi, in quale ordine, con quale dimensione di chunk. Il RAID 10 ne aggiunge una quarta che i livelli con parità non hanno: dove si trova la seconda copia di ogni blocco. Sbagliatela, e la ricostruzione arriva comunque in fondo. Semplicemente intreccia blocchi presi da offset sbagliati, e il risultato è un volume che non monta nulla o, peggio, che monta un albero di cartelle pieno di file che si aprono su spazzatura.

È la ragione pratica per cui il layout va recuperato prima dei dati. È scritto nei metadati dell'array, ed è per questo che leggere i metadati di ogni membro prima di toccare qualsiasi cosa conta qui più che a ogni altro livello. Se i metadati sono spariti e il layout è ignoto, diventa un piccolo problema di ricerca: tre layout, una manciata di numeri di copie e dimensioni di chunk plausibili, provati su una copia finché non compare un filesystem. Quella ricerca è sicura solo sulle immagini, perché ogni tentativo è una scrittura nella direzione sbagliata se lo eseguite sui dischi.

A cosa sopravvive un RAID 10, e perché nessuno ve lo dirà in anticipo

L'affermazione più ripetuta sul RAID 10 è che sopravvive a un guasto per coppia, quindi un array di quattro dischi può perderne due purché non siano della stessa coppia. È vero di un RAID 1+0 classico, e il manuale md si guarda bene dal generalizzarlo.

Dove elenca quanti dischi ogni livello tollera di perdere, dà cifre concrete per gli altri: « this number is one for RAID levels 4 and 5, two for RAID level 6, and all but one (N-1) for RAID level 1. » Per il livello 10 si limita a indicare che la sopravvivenza « is dependent on configuration ».

È la risposta onesta, e discende da tutto quanto precede. Con due copie distribuite su cinque dischi in layout far, che due dischi morti siano recuperabili dipende dall'esistenza di un blocco che aveva entrambe le copie proprio su quei due. Due array che dichiarano lo stesso livello, lo stesso numero di dischi e la stessa capacità possono differire su questo. Si decide alla creazione e non si legge nel numero di livello.

La conseguenza operativa è semplice: dopo un secondo guasto al livello 10, non date per scontato né che vada tutto bene né che sia tutto perduto. Entrambe le conclusioni sono scommesse.

L'ordine che vi conserva le opzioni

Smettete di scrivere. Un array degradato lasciato in servizio è una ricostruzione in attesa di autorizzazione, e a questo livello potreste ignorare quale copia prenderà come sorgente.

Rilevate i metadati di ogni membro prima di ogni altra cosa. Layout, numero di copie, dimensione di chunk, ordine dei dischi e contatori di eventi. È l'informazione che trasforma il recupero in una procedura invece che in una ricerca, ed è anche quella che un recreate affrettato distrugge.

Fate un'immagine di tutti i membri, non solo dei superstiti. L'imaging è una lettura. Non può peggiorare nulla, e rende reversibile ogni errore successivo. Su un array in cui il layout corretto richiederà forse più tentativi, lavorare sulle immagini non è prudenza: è l'unico modo di avere diritto a più di un tentativo.

Assemblate in sola lettura e verificate di vedere un filesystem prima di credere ai parametri. Una ricostruzione con il layout sbagliato non si annuncia. Un filesystem montabile, esplorabile, i cui file si aprono: quello è il test.

Ricostruite per ultimo, su hardware già collaudato, una volta che i dati esistono altrove rispetto a questo array.

Scelta editoriale
4.5 / 5

Rileggere i file una volta fatte le immagini e trovato il layout

Funziona su un'immagine o su un volume che riuscite già a montare. Non determina al posto vostro il layout near, far o offset, e non sostituisce l'imaging preventivo dei membri.

Fondata nel 2004Garanzia di 30 giorniVersione gratuita da 2 GB
Vedi l'offerta

In sintesi

Il RAID 10 su Linux non è l'array di coppie in mirror che il nome suggerisce. Il manuale md ammette un numero di dischi che non è multiplo del numero di copie, il che produce array senza alcuna coppia da recuperare una alla volta. Offre i layout near, far e offset sotto lo stesso numero di livello, e solo near con un numero pari di dischi somiglia al RAID 1+0 classico.

Poiché le copie possono essere collocate lontane tra loro per progetto, il layout va conosciuto prima di qualunque tentativo di ricostruzione, altrimenti la ricostruzione arriverà in fondo e produrrà sciocchezze. E poiché la collocazione si decide alla creazione, il manuale rifiuta di dire quanti dischi un RAID 10 possa perdere: a questo livello, la sopravvivenza dipende dalla configurazione.

Rilevate i metadati di ogni membro, createne le immagini, provate i layout sulle copie e ricostruite solo quando i vostri file sono altrove.

La descrizione del RAID10 come combinazione di RAID1 e RAID0, l'affermazione che il numero di dischi non deve essere un multiplo del numero di copie, le definizioni dei layout near, far e offset, l'osservazione che near con un numero pari di dischi è il RAID1+0 classico, e l'affermazione che la sopravvivenza dipende dalla configurazione al livello 10, provengono tutte dalla pagina di manuale Linux md(4), consultata al momento della stesura. Le citazioni sono lasciate nella lingua originale. Verificate sulla versione di kernel e mdadm che state usando. I link commerciali portano l'attributo rel="sponsored nofollow"; può essere applicata una commissione di affiliazione, senza costi aggiuntivi per voi.

Guide correlate

Scelta editoriale
4.5 / 5

Recupera i tuoi file cancellati → EaseUS

Scansione gratuita · file cancellati, formattati, persi · Windows & Mac

Fondata nel 2004Garanzia di 30 giorniVersione gratuita da 2 GB
Vedi l'offerta

Domande frequenti

Il RAID 10 è la stessa cosa del RAID 1+0?

Su Linux no, e la differenza conta proprio al momento del recupero. Il manuale md presenta il livello così: « RAID10 provides a combination of RAID1 and RAID0, and is sometimes known as RAID1+0 », e subito dopo se ne allontana. Precisa che il numero di dischi di un array RAID10 non deve essere un multiplo del numero di copie di ciascun blocco, servono soltanto almeno tanti dischi quante sono le copie. Un RAID 1+0 classico è uno stripe costruito su coppie in mirror distinte, quindi richiede un numero pari di dischi. Un RAID10 md con tre dischi e due copie è del tutto legittimo, e non ha nessuna coppia da recuperare una alla volta.

Quanti dischi può perdere un RAID 10?

Non esiste una risposta unica, e il manuale md si rifiuta di darla. Dove elenca quanti dischi ogni livello tollera di perdere, indica una cifra per i livelli con parità e « all but one » per il RAID 1, ma per il livello 10 scrive che la sopravvivenza « is dependent on configuration ». Non è vaghezza. Con due copie, se due guasti simultanei siano sopravvivibili dipende da dove quelle due copie sono finite, quindi dal layout e dal numero di dischi. Due guasti possono essere innocui o fatali in array che dichiarano lo stesso livello.

Cosa sono i layout near, far e offset?

Sono tre modi di collocare le copie, scelti alla creazione dell'array. Con near, il manuale indica che le copie di uno stesso blocco vengono disposte consecutivamente, il più vicino possibile tra loro, attraverso gli stripe. Con far sono disposte il più lontano possibile in modo ragionevole, il che permette a md di distribuire le letture sequenziali sui dischi avvicinandosi alla velocità di un RAID0. Con offset, tutte le copie di un blocco vengono scritte consecutivamente, sfalsate della lunghezza di uno stripe, sui dischi. I dati sono identici nei tre casi. La loro posizione sui piatti no.

Posso estrarre un disco da un RAID 10 e leggerci i file?

Solo con layout near e numero pari di dischi, e comunque in modo parziale. In quella disposizione un membro contiene blocchi interi che uno strumento di filesystem può riconoscere, ma contiene al massimo metà dell'array: si ottengono frammenti di file, non file. Con far e offset le copie sono spostate di proposito, quindi un disco letto da solo non è un pezzo coerente del filesystem. Un disco che in questa situazione sembra vuoto è di norma intatto e letto male.

Conviene lasciare che il controller ricostruisca prima di tentare il recupero?

No. Una ricostruzione scrive, e al livello 10 potreste non sapere quale copia il driver tratterà come riferimento. Fate prima un'immagine di ogni membro, dato che l'imaging è una lettura e costa solo tempo, poi lavorate sulle copie. Ricostruite quando i vostri dati esistono già in un posto che non è l'array.