📈 Telemetria (sim)
⏱ Verifica
Prova con: help · scenario list · cat /proc/mdstat · mdadm --detail /dev/md0 · smartctl -a /dev/sdX · dmesg | tail · mdadm --remove/--add/--rebuild.
Disponibile quando RAID5 è selezionato.
cat /proc/mdstat. Questo permette di capire immediatamente se l'array è
clean, degraded oppure in fase di
rebuild.
Quando si lavora con sistemi RAID su Linux, la prima abilità che deve sviluppare un amministratore di sistema è la capacità di capire rapidamente lo stato dell'array e individuare eventuali problemi. Questa guida rapida descrive il flusso logico che normalmente si segue durante una fase di diagnosi.
Questo comando legge il file virtuale /proc/mdstat, che viene generato dal kernel Linux e contiene informazioni sugli array RAID software gestiti dal sistema.
Gli stati più comuni che potresti vedere sono:
Il comando mdadm è lo strumento principale utilizzato in Linux per gestire RAID software. Con l'opzione --detail è possibile visualizzare una descrizione completa dell'array.
Questo passaggio serve soprattutto per identificare quale disco ha causato il problema e verificare se l'array è ancora in grado di garantire ridondanza.
Il comando lsblk mostra la struttura dei dispositivi di storage presenti nel sistema. Guardando questo output è possibile vedere quali dischi partecipano all'array e verificare se qualche dispositivo risulta mancante.
Il comando dmesg permette di leggere i messaggi prodotti dal kernel Linux. Questi messaggi spesso contengono informazioni preziose su errori hardware, problemi di lettura o malfunzionamenti dei dischi.
Il comando smartctl utilizza il sistema SMART integrato nei dischi moderni per raccogliere statistiche interne e individuare segnali di degrado prima che il dispositivo smetta completamente di funzionare.
RAID sta per Redundant Array of Independent Disks (in origine "Inexpensive"). È una tecnologia che combina più dischi fisici in un unico sistema logico, gestito dal sistema operativo o da un controller hardware dedicato.
Lo scopo può essere uno o più di questi obiettivi: aumentare le prestazioni distribuendo le operazioni su più dischi in parallelo, garantire la ridondanza dei dati (fault tolerance) così che il guasto di uno o più dischi non provochi perdita di informazioni, oppure entrambe le cose insieme.
Attenzione: RAID non è un backup. Protegge da guasti hardware dei dischi, non da cancellazioni accidentali, ransomware o disastri fisici che coinvolgono l'intero server. Un sistema di backup separato è sempre necessario.
I dati vengono suddivisi in blocchi e scritti su più dischi in parallelo. Ogni disco riceve una porzione differente del dato ("stripe").
Vantaggio: velocità di lettura e scrittura aumentata, poiché più dischi lavorano contemporaneamente.
Rischio: se un disco si guasta, tutti i dati dello stripe sono irrecuperabili (nessuna ridondanza da solo).
I dati vengono copiati in modo identico su due o più dischi. Ogni scrittura aggiorna tutti i dischi mirror in modo sincrono.
Vantaggio: alta ridondanza — finché almeno un disco del mirror funziona, i dati sono accessibili.
Svantaggio: la capacità utile è dimezzata (o ridotta al numero di copie), e le scritture sono più lente.
Un blocco speciale di parità viene calcolato tramite l'operazione logica XOR dei blocchi dati. Non è una copia, ma un'informazione matematica che permette di ricostruire un blocco mancante.
Vantaggio: ridondanza con meno spreco di spazio rispetto al mirroring.
Esempio: A XOR B = P. Se perdo A, lo ricostruisco: B XOR P = A.
I dati vengono distribuiti equamente su tutti i dischi senza alcuna informazione di parità o copia. Non esiste ridondanza: il guasto di qualsiasi disco causa la perdita totale dell'array.
Viene usato quando si vuole la massima velocità e la perdita dei dati è accettabile (es. cache temporanee, rendering, editing video su workstation con backup separato).
Ogni dato viene scritto in modo identico su tutti i dischi dell'array. Se un disco si guasta, i dati sono ancora disponibili su quello rimanente. La lettura può essere parallelizzata su più dischi aumentando le performance in read.
È il livello più semplice e affidabile per proteggere i dati. Il costo è che si sfrutta solo la capacità di un disco, indipendentemente da quanti dischi sono nell'array.
RAID 2 utilizza la codifica di correzione degli errori di Hamming (ECC) distribuita su dischi dedicati. I dati vengono distribuiti bit per bit (bit-level striping), e i bit di parità ECC vengono scritti su dischi separati dedicati.
Questo livello era studiato per rilevare e correggere errori sui singoli bit direttamente a livello hardware, prima che i dischi moderni integrassero la correzione ECC internamente. Oggi non viene più utilizzato in pratica: l'ECC è gestita dall'elettronica interna di ogni disco, rendendo RAID 2 inutilmente complesso e costoso.
RAID 3 usa lo striping a livello di byte (byte-level striping) con un disco dedicato esclusivamente alla parità. Tutti i dati sono distribuiti byte per byte tra i dischi dati, e la parità corrispondente viene sempre scritta sullo stesso disco fisso.
Il problema principale è che il disco di parità diventa un collo di bottiglia: ogni singola operazione di lettura/scrittura richiede un accesso a quel disco, che si deteriora prima degli altri. RAID 3 è stato largamente sostituito da RAID 5, che distribuisce la parità su tutti i dischi.
Simile a RAID 3 ma con striping a livello di blocco anziché byte. I dati vengono distribuiti a blocchi sui dischi dati, con un disco fisso dedicato alla parità. Permette letture parallele di blocchi indipendenti, ma le scritture soffrono ancora del collo di bottiglia del disco di parità.
RAID 4 è rimasto in uso in alcune implementazioni di storage specializzato (es. vecchi NetApp WAFL) ma oggi è quasi completamente soppiantato da RAID 5.
RAID 5 distribuisce i dati e la parità su tutti i dischi dell'array, eliminando il collo di bottiglia di un disco di parità dedicato. Per ogni stripe, la parità (calcolata con XOR) ruota su un disco diverso.
Con un disco guasto, tutti i dati possono essere ricostruiti matematicamente dagli altri. Questo processo si chiama rebuild e può richiedere ore o giorni per array di grandi dimensioni.
Attenzione: durante il rebuild l'array è in stato DEGRADED e un secondo guasto causerebbe la perdita totale dei dati. Per questo motivo si consiglia sempre un disco spare hot-standby.
RAID 6 estende RAID 5 aggiungendo un secondo blocco di parità indipendente per ogni stripe (parità P e parità Q, calcolate con algoritmi diversi — es. Reed-Solomon). Questo permette di tollerare il guasto simultaneo di due dischi qualsiasi.
È particolarmente indicato per array con molti dischi di grande capacità, dove il rischio di un secondo guasto durante il rebuild (che dura ore o giorni) è statisticamente significativo.
RAID 10 (o RAID 1+0) combina mirroring e striping. I dischi vengono prima organizzati in coppie mirror, poi le coppie vengono messe in stripe. Il risultato è un array ad altissime prestazioni con ridondanza garantita per ogni coppia.
Un guasto è tollerato per ciascuna coppia mirror (fino a N/2 dischi, ma mai entrambi della stessa coppia). Se entrambi i dischi di una coppia mirror si guastano, l'array è FAILED.
È il livello preferito per database ad alto I/O e applicazioni che richiedono sia velocità che affidabilità, quando il costo di avere metà capacità non è un problema.
| Livello | Min dischi | Capacità utile | Fault tolerance | Lettura | Scrittura | Uso tipico | Note |
|---|---|---|---|---|---|---|---|
| RAID 0 | 2 | N × size | 0 dischi | Eccellente | Eccellente | Cache, editing | No backup = disastro |
| RAID 1 | 2 | 1 × size | N-1 dischi | Buona | Normale | OS, database | Costoso per TB |
| RAID 2 | 3+ | Variabile | 1 disco | Media | Media | Obsoleto | Solo teorico |
| RAID 3 | 3 | (N-1) × size | 1 disco | Buona seq. | Bottleneck P | Obsoleto | Parità fissa |
| RAID 4 | 3 | (N-1) × size | 1 disco | Buona | Bottleneck P | Raro | Sostituito da RAID5 |
| RAID 5 | 3 | (N-1) × size | 1 disco | Eccellente | Buona | NAS, file server | Standard di fatto |
| RAID 6 | 4 | (N-2) × size | 2 dischi | Eccellente | Più lenta di R5 | Enterprise, cloud | Doppia parità P+Q |
| RAID 10 | 4 (pari) | (N/2) × size | 1 per coppia | Eccellente | Eccellente | DB, virtualiz. | Mirror pair perso = FAILED |
smartctl e pianificare sostituzione.
Una volta montato: ls /mnt, touch /mnt/file, echo "testo" > /mnt/file, cat /mnt/file, rm /mnt/file, df -h.
La diagnosi è il primo passo obbligatorio davanti a qualsiasi problema. Prima di toccare qualsiasi cosa, bisogna capire cos'è successo, quale disco è coinvolto e qual è lo stato attuale dell'array. Usare sempre i comandi in questo ordine.
cat /proc/mdstat
Legge il file virtuale /proc/mdstat generato in tempo reale dal kernel Linux. Contiene lo stato di tutti gli array RAID software attivi nel sistema. È il primo comando da eseguire in qualsiasi situazione.
Sempre come primo passo: all'avvio del turno, dopo un allarme, dopo una modifica all'array, durante il rebuild per monitorare l'avanzamento.
status=: OK, DEGRADED, FAILED[U] = disco attivo, [_] = disco mancante, [R] = disco in rebuildrecovery = con la percentuale durante il rebuildmdadm --detail /dev/md0
Mostra informazioni dettagliate sull'array: livello RAID, capacità, stato di ogni disco, numero di guasti, spare presenti e stato del rebuild. È il comando di diagnosi più completo.
Dopo cat /proc/mdstat per identificare esattamente quale disco è in stato FAILED, REBUILDING o SPARE. Necessario prima di qualsiasi operazione di recovery.
State per ogni disco: active sync, faulty, spare rebuildingState : dell'array: clean, degradedFailed Disks : e Spare Disks :Rebuild : con la percentuale se attivolsblk
Mostra la struttura ad albero di tutti i dispositivi di blocco (dischi, partizioni, array RAID, volumi LVM). Permette di vedere quali dischi fisici partecipano all'array e quali risultano mancanti o non montati.
Per verificare che tutti i dischi siano visibili al sistema e per controllare se il filesystem è montato. Utile anche per scoprire il nome corretto dei dispositivi (es. sda, sdb…).
TYPE: disk = disco fisico, raid5 = array RAIDMOUNTPOINT: se l'array è montato e dovedmesg | tail
Mostra gli ultimi messaggi del buffer del kernel Linux. Il kernel registra in tempo reale tutto ciò che accade: errori di I/O, problemi SATA, errori CRC, temperature, eventi RAID. È la fonte più diretta di informazioni su cosa è andato storto.
Quando un disco risulta FAILED o in stato anomalo, o quando si vuole capire come e quando è avvenuto il guasto. Indispensabile per distinguere un guasto fisico del disco da un problema di cavo/connessione.
I/O error su un dispositivo → guasto disco o cavoUDMA CRC error count increased → problema cavo SATAtemperature critical → disco in overheatmd/raid: md0: Disk failure → RAID ha marcato il disco come guastosmartctl -a /dev/sdX
Interroga il sistema SMART (Self-Monitoring, Analysis and Reporting Technology) integrato nel disco. Legge attributi interni come settori ricollocati, temperatura, errori CRC, ore di utilizzo e test diagnostici. Permette di prevedere guasti imminenti prima che si manifestino.
Per ogni disco sospetto identificato da mdadm --detail o dmesg. Sostituire sdX con il nome del disco da analizzare (es. sda, sdb…).
SMART overall-health: PASSED o FAILED!Il recovery si esegue solo dopo aver completato la diagnosi. L'ordine delle operazioni è preciso e non va invertito: prima rimuovere il disco guasto, poi aggiungere il nuovo, poi avviare il rebuild. Monitorare sempre fino al completamento.
mdadm /dev/md0 --fail /dev/sdX
(o: mdadm --fail /dev/md0 /dev/sdX)
Forza il kernel a marcare un disco come FAILED all'interno dell'array RAID. Questo non rimuove il disco, ma lo disabilita logicamente. L'array entra in stato DEGRADED.
Quando un disco mostra segni di degrado (overheat, CRC, slow) ma non è ancora entrato in FAILED automaticamente. Permette di controllare la situazione prima della rimozione.
Se il disco è già in stato FAILED (marcato automaticamente dal kernel), questo comando non è necessario. Procedere direttamente con --remove.
mdadm /dev/md0 --remove /dev/sdX
(o: mdadm --remove /dev/md0 /dev/sdX)
Rimuove logicamente un disco FAILED dall'array RAID. Dopo questo comando il disco è in stato REMOVED e può essere fisicamente sostituito. L'array rimane DEGRADED.
Solo dopo che il disco è in stato FAILED (automatico o forzato con --fail). Non è possibile rimuovere un disco attivo senza prima marcarlo come guasto.
Sostituire fisicamente il disco (o usarne uno nuovo), poi eseguire --add per inserire il nuovo disco come spare e avviare il rebuild.
mdadm /dev/md0 --add /dev/sdY
(o: mdadm --add /dev/md0 /dev/sdY)
Aggiunge un nuovo disco all'array come spare. Se l'array è in stato DEGRADED, il rebuild può partire automaticamente o può essere avviato manualmente. Il disco deve avere dimensione uguale o maggiore al disco originale.
Dopo aver rimosso il disco guasto e inserito fisicamente il nuovo. Il disco nuovo (sdY) deve essere un disco vuoto, non formattato, non parte di altri array.
Se il nuovo disco è più piccolo del disco originale, il rebuild fallirà con un errore di dimensione. Verificare sempre la capacità con lsblk prima di procedere.
watch cat /proc/mdstat
⚠ non disponibile nel simulatore
Il comando watch esegue ripetutamente un comando (ogni 2 secondi per default) e aggiorna l'output a schermo. Usato con cat /proc/mdstat crea un monitor in tempo reale del rebuild su un sistema Linux reale, mostrando la percentuale di avanzamento e l'ETA aggiornati ogni 2 secondi.
Durante un rebuild attivo su un vero server Linux, per monitorare l'avanzamento senza dover rieseguire manualmente il comando ogni volta. Si esce con Ctrl+C.
Il comando watch non è supportato nel terminale simulato. Per monitorare il rebuild, usare ripetutamente cat /proc/mdstat. La barra di avanzamento del rebuild è visibile anche nella dashboard in tempo reale.
conclude restore da backup.
Non tutti i problemi richiedono la sostituzione immediata del disco. Alcuni errori sono segnali di avvertimento che permettono di intervenire in modo preventivo. Ignorarli, però, può portare a un guasto definitivo. Capire la differenza è fondamentale.
CRC (Cyclic Redundancy Check) è un meccanismo di controllo dell'integrità dei dati trasmessi sul cavo SATA. Un errore CRC significa che un blocco di dati è arrivato corrotto durante il trasferimento tra il disco e il controller. Non necessariamente il disco è guasto.
dmesg | tail e smartctl -a /dev/sdXsmartctl se il contatore si azzera o continua a crescereUn disco funziona in modo ottimale tra 20°C e 50°C. Sopra i 55°C entra in zona di rischio; sopra i 60°C può registrare errori di lettura/scrittura o ridurre la propria affidabilità in modo permanente. L'overheat è un segnale di rischio imminente ma non è ancora un guasto.
smartctl -a /dev/sdX → attributo 194 Temperature_CelsiusUn disco lento non ha ancora smesso di funzionare, ma risponde ai comandi in modo più lento del normale. Questo degrada le prestazioni dell'intero array, poiché tutte le operazioni devono aspettare il disco più lento (in RAID, l'array è veloce quanto il disco più lento).
Current_Pending_Sector > 0)Monitorare con smartctl, verificare Current_Pending_Sector. Se il contatore cresce: pianificare sostituzione preventiva prima che il disco passi a FAILED.
Il RAID gestisce la ridondanza e la distribuzione dei dati a livello fisico, ma da solo non basta per usare un disco. Sopra il RAID bisogna creare un filesystem (es. ext4) e montarlo in una directory. Solo a quel punto è possibile leggere e scrivere file.
mkfs.ext4 /dev/md0
Crea un filesystem ext4 sull'array RAID. Formatta il volume logico /dev/md0 scrivendo le strutture dati del filesystem (superblock, inode table, bitmap). Operazione distruttiva: cancella tutti i dati esistenti.
Una sola volta, dopo aver creato l'array RAID per la prima volta. Non va eseguito dopo un rebuild (i dati sono già presenti sul filesystem).
mount /dev/md0 /mnt
Monta il filesystem dell'array RAID nella directory /mnt (o qualsiasi altra directory esistente). Dopo il mount, tutti i file dell'array diventano accessibili tramite quella directory.
Dopo aver creato il filesystem con mkfs.ext4. Deve essere eseguito ad ogni riavvio del sistema (oppure aggiunto a /etc/fstab per il mount automatico).
Smonta il filesystem in modo sicuro. Attendere che tutte le operazioni di I/O siano concluse prima di smontare.
df -h
Mostra l'utilizzo del disco in formato leggibile. Permette di verificare capacità totale, spazio usato e spazio disponibile. Mostra anche il punto di mount.
ls /mnt
Lista il contenuto della directory montata. Se restituisce una lista vuota o (vuoto) significa che il filesystem è montato ma non contiene file.
touch /mnt/file
Crea un file vuoto. Test minimale per verificare che il filesystem sia scrivibile. Se fallisce con I/O error, l'array ha un problema.
echo / cat / rm
Test completo di scrittura, lettura e cancellazione su file. Sequenza consigliata per verificare la funzionalità del volume dopo un rebuild o una riparazione.
mdadm --examine /dev/sdXLegge i metadati RAID scritti sul disco, anche se non è più parte di un array attivo. Utile per recuperare informazioni su array distrutti o disco rimosso accidentalmente.
fsck /dev/md0Controlla e ripara il filesystem ext4 sopra l'array RAID. Va eseguito solo con il filesystem smontato. Utile dopo crash di sistema o powerfail durante scrittura.
blkidMostra UUID, tipo di filesystem e label di tutti i dispositivi. Utile per identificare il volume RAID nel file /etc/fstab per il mount automatico al boot.
fdisk -lElenca tutti i dischi e le partizioni con dimensioni. Permette di verificare la dimensione esatta di ogni disco prima di usarlo come spare, evitando l'errore "spare too small".
| Comando | Categoria | Funzione | Disponibile |
|---|---|---|---|
| cat /proc/mdstat | Diagnosi | Stato array RAID in tempo reale | ✅ Sì |
| mdadm --detail /dev/md0 | Diagnosi | Dettaglio completo array e dischi | ✅ Sì |
| lsblk | Diagnosi | Struttura dispositivi di blocco | ✅ Sì |
| dmesg | tail | Diagnosi | Messaggi kernel recenti | ✅ Sì |
| smartctl -a /dev/sdX | Diagnosi | Stato SMART del disco | ✅ Sì |
| mdadm /dev/md0 --fail /dev/sdX | Recovery | Marca disco come FAILED | ✅ Sì |
| mdadm /dev/md0 --remove /dev/sdX | Recovery | Rimuove disco FAILED dall'array | ✅ Sì |
| mdadm /dev/md0 --add /dev/sdY | Recovery | Aggiunge nuovo disco come spare | ✅ Sì |
| mdadm /dev/md0 --rebuild | Recovery | Avvia il rebuild dell'array | ✅ Sì |
| mdadm --stop-rebuild /dev/md0 | Recovery | Interrompe il rebuild | ✅ Sì |
| powerfail | Simulazione | Simula blackout, interrompe rebuild | ✅ Sì |
| mkfs.ext4 /dev/md0 | Filesystem | Crea filesystem ext4 sull'array | ✅ Sì |
| mount /dev/md0 /mnt | Filesystem | Monta il filesystem | ✅ Sì |
| umount /mnt | Filesystem | Smonta il filesystem | ✅ Sì |
| df -h | Filesystem | Spazio disco utilizzato | ✅ Sì |
| ls / touch / echo / cat / rm | Filesystem | Operazioni su file | ✅ Sì |
| blkid | Extra | UUID e tipo filesystem | ✅ Sì |
| fdisk -l | Extra | Layout completo dischi | ✅ Sì |
| watch cat /proc/mdstat | Linux reale | Monitor continuo (Linux reale, ogni 2s) | ❌ Non nel simulatore — usa cat |
| mdadm --examine /dev/sdX | Avanzato | Metadati RAID su disco | ❌ Non disponibile |
| fsck /dev/md0 | Avanzato | Controllo/riparazione filesystem | ❌ Non disponibile |