Perchè i dischi di un RAID devono essere della stessa marca e modello?
Quando un disco si rompe
Alcuni mesi fa avevo documentato la configurazione del mio server RAID 5 con quattro dischi da 10TB, raccontandoti come avevo costruito l’array e configurato tutto il sistema.
Purtroppo uno dei dischi del mio RAID ha deciso di abbandonarmi improvvisamente.
Il RAID 5 è progettato proprio per sopravvivere al guasto di un singolo disco ed ha continuato a funzionare in modalità “degraded” (degradata). In questa modalità però riuscivo solo a sfogliare il contenuto delle cartelle ma non riuscivo a trasferire i file per farne un backup.
Ho acquistato un nuovo disco da 10TB per sostituire quello guasto e ripristinare la ridondanza del mio array.
Qui è iniziata l’avventura che voglio raccontarti oggi, perché quello che sembrava un intervento molto semplice si è trasformato in un piccolo incubo che però mi ha fatto scoprire un aspetto importante che ignoravo: non tutti i dischi della stessa capienza nominale sono uguali tra loro.
Dischi diversi, settori diversi
Quando il RAID è saltato ho acquistato un nuovo disco Western Digital Gold da 10TB per sostituire il disco Seagate guasto.
Avrei potuto aspettarmi qualche incompatibilità, molti consigliano di utilizzare stessa marca e modello in configurazioni del genere. Non riuscivo però a trovare un Seagate uguale con consegna veloce e prezzi accettabili ed ho deciso di rischiare.
Sulla carta entrambi i dischi hanno la stessa capacità nominale (10TB), stessa velocità, stessa cache, ma quando ho provato ad aggiungere il nuovo disco all’array, mi sono scontrato con un errore inaspettato.
Una volta inserito il nuovo disco nel case ho avviato il sistema e prima di tutto ho verificato lo stato del RAID:
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Sep 14 13:47:54 2024
Raid Level : raid5
Array Size : 29325628416 (27.31 TiB 30.03 TB)
Used Dev Size : 9775209472 (9.10 TiB 10.01 TB)
Raid Devices : 4
Total Devices : 3
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Feb 14 02:49:25 2025
State : clean, degraded
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name : progressify-server:0 (local to host progressify-server)
UUID : a7a90558:afa35433:81a887fd:7f897739
Events : 615122
Number Major Minor RaidDevice State
0 8 49 0 active sync /dev/sdd1
1 8 1 1 active sync /dev/sda1
2 8 33 2 active sync /dev/sdc1
- 0 0 3 removed
Come puoi vedere, il RAID è in stato “clean, degraded” con 3 dischi attivi su 4. Il quarto è indicato come “removed”.
Ho esaminato i dischi presenti nel sistema:
$ sudo fdisk -l
[...]
Disk /dev/sda: 9,1 TiB, 10009952870400 bytes, 19550689200 sectors
Disk model: ST10000NM0046
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 4E123D67-4833-<censura>
Dispositivo Start Fine Settori Size Tipo
/dev/sda1 4096 19550687232 19550683137 9,1T Solaris /usr & Apple ZFS
[...]
Disk /dev/sdb: 9,1 TiB, 10000831348736 bytes, 19532873728 sectors
Disk model: WDC WD103KRYZ-01
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 1E6B8672-26A6-<censura>
Dispositivo Start Fine Settori Size Tipo
/dev/sdb1 2048 9775211519 9775209472 4,6T Linux RAID
Già questo output potrebbe farti capire il problema, ma io non lo avevo ancora notato, in ogni caso proseguo.
Ho provato a creare una nuova partizione sul disco Western Digital, cercando di farla corrispondere il più possibile ai dischi Seagate:
$ sudo fdisk /dev/sdb
[...]
Comando (m per richiamare la guida): d
Selected partition 1
Partition 1 has been deleted.
Comando (m per richiamare la guida): n
Numero della partizione (1-128, default 1): 1
First sector (34-19532873694, default 2048): 4096
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4096-19532873694, default 19532871679): 19550683137
Value out of range.
Value out of range
Nemmeno adesso mi ero ancora reso conto di cosa stava succedendo, però iniziavo a rendermi conto che qualcosa non stava andando come previsto.
A questo punto ho esaminato in dettaglio i dischi usando smartctl
:
$ sudo smartctl -i /dev/sda
[...]
Device Model: ST10000NM0046
User Capacity: 10.009.952.870.400 bytes [10,0 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
[...]
$ sudo smartctl -i /dev/sdb
[...]
Device Model: WDC WD103KRYZ-01CCYB0
User Capacity: 10.000.831.348.736 bytes [10,0 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
[...]
I dischi Seagate originali hanno una capacità di 10.009.952.870.400 byte, mentre il nuovo disco Western Digital ha una capacità di 10.000.831.348.736 byte. Una differenza di circa 9 GB!
Anche forzando l’aggiunta del disco all’array:
$ sudo mdadm --add /dev/md0 /dev/sdb1
mdadm: /dev/sdb1 not large enough to join array
Il nuovo disco Western Digital non ha abbastanza settori per creare una partizione identica a quelle dei dischi già presenti nell’array.
Utilizzare dischi identici
Non volevo arrendermi ma dopo vari tentativi ho realizzato di non avere troppe scelte senza rischiare di perdere tutto.
Le alternative sarebbero:
- Ridurre la dimensione del RAID: potrei tentare di ridurre temporaneamente la dimensione dell’array a un valore molto più basso, aggiungere il nuovo disco, e poi espandere nuovamente l’array alla massima dimensione possibile (ma potrebbe causare perdita di dati).
- Ricreare completamente l’array: fermando l’array esistente e ricreandolo con la dimensione corretta. Richiede un backup completo dei dati che al momento non posso comunque fare visto lo stato in cui è adesso.
- Utilizzare un disco più grande: se avessi acquistato un disco da 12TB ad esempio, avrei potuto partizionarlo per utilizzare solo lo spazio necessario (il costo del disco è maggiore e 2 TB andranno sprecati 😭)
Sono giunto alla conclusione che la soluzione più pulita e sicura, almeno nella situazione in cui mi trovo, è quella di comprare un nuovo disco identico a quelli già presenti o comprare un altro disco di capacità maggiore nel caso in cui proprio non riuscissi a procurarmene uno identico.
Conclusioni
Questa esperienza mi ha insegnato un’importante lezione sui sistemi RAID ma più in generale anche sugli HDD: due dischi con la stessa capacità nominale non sono necessariamente identici a livello di settori.
Quando si ricostruisce un array RAID è fondamentale:
- Utilizzare dischi identici per marca e modello quando possibile
- Verificare sempre il numero esatto di settori prima dell’acquisto
- In caso di marche diverse, scegliere un disco di capacità maggiore che possa essere partizionato appropriatamente
Come avevo già detto qui: un RAID non è un backup, lo ripeto anche a me stesso, e a mia discolpa nemmeno mi aspettavo una rottura in tempi così brevi. Dovrò stare più attento!
Spero che questa esperienza possa aiutare altri amministratori di sistema a evitare il mio stesso problema.
Immagine di copertina generata con ChatGPT.
AP