RAID significa Redundant Array of Independent Disks. L’idea è combinare più dispositivi a blocchi in un unico volume logico per ottenere, a seconda del livello scelto, più prestazioni, più capacità, ridondanza oppure una combinazione di queste proprietà.
La parola più importante è però ridondanza, e va interpretata correttamente. Un RAID può mantenere disponibile un filesystem quando uno o più dischi si guastano. Non protegge invece da cancellazioni, corruzione logica, ransomware, furto del server o errori applicativi. Per questi eventi serve un backup separato.
Hardware RAID e Software RAID
Nel RAID hardware la logica viene gestita da un controller dedicato che presenta al sistema operativo uno o più volumi virtuali. Nel Software RAID Linux, invece, il kernel gestisce direttamente i dispositivi attraverso il driver md e lo strumento amministrativo più comune è mdadm.
Il Software RAID moderno non va considerato automaticamente una soluzione di serie B. Ha il vantaggio di essere trasparente, documentabile e indipendente da uno specifico controller. Il RAID hardware mantiene invece vantaggi in alcuni scenari enterprise, ma introduce anche una dipendenza dal controller, dal suo firmware e dalla disponibilità di hardware compatibile in caso di guasto.
Striping, mirroring e parità
I livelli RAID combinano tre idee fondamentali:
- striping: i blocchi vengono distribuiti su più dischi, aumentando parallelismo e capacità;
- mirroring: gli stessi blocchi vengono conservati in più copie;
- parità: informazioni aggiuntive permettono di ricostruire i dati mancanti dopo il guasto di uno o più dischi.
RAID 0
RAID 0 usa striping puro. Con N dischi della stessa dimensione S, la capacità utile è circa N × S. Non esiste ridondanza: il guasto di un solo componente rende l’array inutilizzabile.
È utile soltanto quando prestazioni e capacità sono più importanti della disponibilità oppure quando i dati possono essere ricreati facilmente. Chiamarlo “RAID ridondante” sarebbe quasi ironico: è l’unico livello comune in cui la R dell’acronimo non si applica.
RAID 1
RAID 1 conserva copie speculari dei dati. Nel caso tipico di due dischi, la capacità utile equivale alla dimensione del disco più piccolo e l’array sopravvive al guasto di uno dei due. La lettura può beneficiare della presenza di più copie; la scrittura deve invece raggiungere tutte le repliche necessarie.
È semplice da capire, semplice da ricostruire e molto adatto a piccoli server quando la capacità persa rispetto al numero di dischi è accettabile.
RAID 5
RAID 5 distribuisce dati e parità tra almeno tre dischi. Con N dischi uguali la capacità utile è approssimativamente (N - 1) × S e l’array tollera il guasto di un singolo dispositivo.
Il vantaggio è un buon rapporto capacità/ridondanza. Lo svantaggio emerge soprattutto durante le scritture e i rebuild: la parità deve essere calcolata e, quando un disco manca, i dati devono essere ricostruiti leggendo gli altri componenti. Su array grandi il periodo degradato può durare a lungo, aumentando l’esposizione a un secondo problema.
RAID 6
RAID 6 aggiunge una seconda informazione di ridondanza distribuita. Richiede almeno quattro dischi, offre una capacità utile di circa (N - 2) × S e può sopportare la perdita di due componenti.
Paghiamo questa sicurezza con più overhead di scrittura e due dischi equivalenti dedicati alla ridondanza. Su array capienti può essere preferibile a RAID 5 proprio perché il rebuild di dischi moderni di grande capacità può essere lungo.
RAID 10
RAID 10 combina mirroring e striping. Nella configurazione classica con quattro dischi, le coppie vengono replicate e i dati distribuiti tra i mirror. La capacità utile è normalmente circa la metà della capacità grezza.
La tolleranza ai guasti non si riassume semplicemente con “due dischi”: dipende da quali componenti si rompono. Possiamo perdere più dischi se appartengono a copie differenti, ma non possiamo perdere tutte le repliche dello stesso blocco. Questo è uno dei motivi per cui bisogna capire il layout reale invece di fermarsi al nome “RAID10”.
Tabella riassuntiva
| Livello | Minimo dischi | Capacità indicativa | Tolleranza |
|---|---|---|---|
| RAID 0 | 2 | N × S | nessun guasto |
| RAID 1 | 2 | S nel mirror classico | una o più copie, dipende dal numero di repliche |
| RAID 5 | 3 | (N – 1) × S | 1 disco |
| RAID 6 | 4 | (N – 2) × S | 2 dischi |
| RAID 10 | 4 | circa N/2 × S | dipende dalla distribuzione dei guasti |
Il momento più delicato: il rebuild
Quando sostituiamo un disco guasto l’array deve ricostruire le informazioni mancanti. In questa fase gli altri dischi vengono letti intensamente e il sistema resta degradato. Il rischio operativo non è quindi soltanto “si è rotto un disco”, ma anche “quanto tempo resteremo senza la ridondanza prevista e quanto stress subiranno gli altri componenti?”.
Per questo un array non va semplicemente creato e dimenticato. SMART, stato md, alert e controlli periodici devono far parte della gestione.
Software RAID Linux con mdadm
Linux implementa il Software RAID attraverso il driver md. Prima di qualsiasi comando distruttivo identifichiamo con precisione i dispositivi:
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
cat /proc/mdstat
mdadm --detail --scan
mdadm --detail /dev/md0
La creazione di un array cancella o rende inaccessibili i dati presenti sui dispositivi coinvolti. Gli esempi seguenti sono quindi da laboratorio o da utilizzare soltanto dopo aver verificato più volte i device.
# Esempio RAID1
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# Esempio RAID10 classico a 4 dischi
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
La sincronizzazione iniziale può essere osservata da /proc/mdstat:
watch -n 2 cat /proc/mdstat
mdadm --detail /dev/md0
Configurazione e assemblaggio al boot
Su Debian/Ubuntu possiamo aggiornare la configurazione mdadm con l’array rilevato e rigenerare initramfs quando necessario:
mdadm --detail --scan
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u
Prima di aggiungere automaticamente l’output controlliamo sempre che mdadm.conf non contenga già la stessa definizione. Duplicare righe non migliora la ridondanza, migliora soltanto il disordine.
Scrub e controllo di consistenza
Gli array md espongono un controllo di consistenza. Il comando seguente avvia una verifica senza effettuare volutamente una riparazione:
echo check > /sys/block/md0/md/sync_action
watch -n 5 cat /proc/mdstat
cat /sys/block/md0/md/mismatch_cnt
Questi controlli vanno pianificati tenendo conto del carico I/O. Su un server molto occupato uno scrub può influire sulle prestazioni.
RAID non è backup
Se un utente cancella una directory, il RAID replica perfettamente la cancellazione. Se un ransomware cifra i file, il mirror conserva più copie cifrate. Se il server viene rubato, anche tutti i dischi dell’array spariscono insieme.
RAID serve soprattutto a continuità e disponibilità durante alcuni guasti hardware. Per recuperare uno stato precedente serve una strategia di backup con retention e almeno una copia separata. La guida successiva è Backup: come e perché implementarlo.
Per l’implementazione dettagliata di un array RAID10 Linux e per la sostituzione di un componente puoi proseguire con Software RAID 10 e Sostituire un disco RAID.

