
Questa è la storia di un recovery apparentemente impossibile in cui non sono mancati momenti di panico. Anni fa ho "messo su" un NAS con openfiler composto da 5 dischi; un disco per il sistema operativo e 4 dischi in RAID 10. Il RAID è composto da sda e sdb in mirroring, sdc e sdd in mirroring e le coppie sommate con lo striping, capacità totale di 2 TeraByte.
Dopo quattro anni il NAS si spegne inspiegabilmente, dopo il riavvio, dall'interfaccia web di amministrazione non è più presente il RAID, le condivisioni, LVM e tutto quello che riguarda la configurazione dei dischi, inoltre ad una prima analisi il RAID è fermo, sda non fa parte dell'array, sdb è in fail, sdc ed sdd sono in sync, quindi i primi due dischi (quelli in mirroring) sembrano morti. Panico! Per fortuna con un po' di ragionamento, buona sorte, rischio e qualche consiglio utile sono riuscito nell'impresa.
In passato
Se cerchi direttamente la soluzione puoi saltare questo paragrafo, invece, se vuoi sapere il "perché" di alcune scelte puoi continuare a leggere. Quattro anni ho realizzato un NAS abbastanza ecomico per un mio amico, Ilario. Quello era il periodo che i primi dischi SATA stavano invadendo il mercato e anche le schede madri con supporto SATA iniziavano a diffondersi. Con una spesa di poco più di 400 euro e openfiler ho "messo su" un NAS dalla capacità di 2TB.
Le distrubuzioni tra cui scegliere erano Openfiler (RedHat) e FreeNAS (BSD), dopo varie ricerche, anche se la maggioranza delle persone sceglieva FreeNAS la mia scelte ricadde su openfiler, principalmente per una questione di conoscenze, conoscevo molto meglio RedHat rispetto a FreeBSD. Oggi, "con il senno di poi", penso che scegliere openfiler sia stata la scelta migliore, perché nei momenti di difficoltà uno riesce a districarsi meglio su qualcosa che conosce bene che su qualcosa che conosce sommariamente, quindi, meglio saper mettere mani e risolvere la situazione che subirla passivamente.
RAID hardware o solftware? La risposta è semplice: software con mdadm. Quattro hanni fa pensavo che fosse una pazzia usare un RAID hardware fornito da una scheda madre di fascia bassa, la domanda che mi frullava in testa era: se dopo anni si rompe la scheda madre, che faccio? Invece un RAID software non è legato alla produzione o alla sopravvivenza di questa o quella scheda madre, esisterà sempre in quanto software. Quindi, all'epoca scelsi di usare il RAID software con mdadm invece della funzionalità offerta dalla scheda madre, scelta che è risultata vincente.
Per dover di cronaca, all'epoca c'era anche l'opzione "Buffalo", non ho percorso questa strada per due motivi: per il costo esattamente il doppio e perché la porta ssh non è accessibile, è amministrabile solo da interfaccia web, quindi, nessuna possibilità di intervento in casi disastrosi.
Dopo queste considerazioni configurai i dischi nel seguente modo:
- sulla porta ATA (la scheda madre ha 4 porte SATA e 1 ATA ), hardisc master (hda) da 40GB con il sistema operativo e lettore cd rom in slave (hdb).
- sulla porta sata_0 e sata_1 due dischi western digital da 1 TB, rispettivamente sda ed sdb in mirroring
- sulla porta sata_2 e sata_3 due dischi western digital da 1 TB, rispettivamente sdc ed sdd in mirroring
- i due mirroring sommati per formare un RAID 10 di 2 TB
- i 2 TB vengono divisi in tre parti con delle partizioni logiche LVM
- ogni partizione logica viene condivisa in rete tramite SAMBA in modo che sia accessibile sia da windows che da linux.
Il presente
Il NAS improvvisamente si spegne e al riavvio non sono accessibili le condivisioni dai computer remoti. Dall'interfaccia web non c'è traccia delle condivisioni, ne delle partizioni LVM e ne tantomeno del RAID da 2 TB. Un disastro. Da dove comincio? Inizialmente suppongo che è andata persa la configurazione di LVM, e un mio amico (Saverio S.) mi risponde "vgscan è tuo amico", indicazione che mi apre la giusta strada verso la soluzione.
[root@localhost ~]# vgscan Reading all physical volumes. This may take a while...
[root@localhost ~]# pvscan No matching physical volumes found
[root@localhost ~]# lvscan
Niente gruppi, ne volumi e neanche blocchi. A sto punto, quasi rassegnato vedo se rimane traccia del RAID
[root@localhost ~]# ls /dev/md* /dev/md0
[root@localhost ~]# ls -l /dev/md* brw-r----- 1 root disk 9, 0 Mar 23 10:06 /dev/md0
[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] md0 : inactive sdc1[2](S) sdd1[3](S) sdb1[1](S) sda1[0](S) 3907035648 blocks unused devices:
Bhe, sembra che qualche traccia sia rimasta. Controllo anche se i dischi siano visibili dal sistema:
[root@localhost ~]# fdisk -l Disk /dev/hda: 40.0 GB, 40027029504 bytes 255 heads, 63 sectors/track, 4866 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 160 1285168+ 83 Linux /dev/hda2 161 4400 34057800 83 Linux /dev/hda3 4401 4866 3743145 82 Linux swap / Solaris Disk /dev/sda: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 121602 976762583+ ee EFI GPT Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 121602 976762583+ ee EFI GPT Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdc1 1 121602 976762583+ ee EFI GPT Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdd1 1 121602 976762583+ ee EFI GPT
Sono tutti visibili, forse una rottura è almeno scongiurata, per ora. A questo punto il RAID dovrebbe essere attivo?
[root@localhost ~]# mdadm --detail /dev/md0 mdadm: md device /dev/md0 does not appear to be active.
Brutta notizia, il RAID non è attivo.
[root@localhost ~]# mdadm --examine --scan ARRAY /dev/md0 level=raid10 num-devices=4 UUID=b2aa3d85:c06562ea:6e2356ff:811b8018
Questo è rincuorante esiste l'UUID, il tipo e il numero di dischi. Quindi l'unica cosa da fare è controllare per ogni singolo disco le informazioni sul RAID:
[root@localhost ~]# mdadm --examine /dev/sda1 /dev/sda1: Magic : a92b4efc Version : 00.90.00 UUID : b2aa3d85:c06562ea:6e2356ff:811b8018 Creation Time : Tue Nov 30 19:22:22 2010 Raid Level : raid10 Used Dev Size : 976758912 (931.51 GiB 1000.20 GB) Array Size : 1953517824 (1863.02 GiB 2000.40 GB) Raid Devices : 4 Total Devices : 3 Preferred Minor : 0 Update Time : Wed Mar 13 09:58:16 2013 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 1 Spare Devices : 0 Checksum : e3f0fab9 - correct Events : 0.279692 Layout : near=2, far=1 Chunk Size : 64K Number Major Minor RaidDevice State this 0 8 1 0 active sync /dev/sda1 0 0 8 1 0 active sync /dev/sda1 1 1 0 0 1 faulty removed 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
Su sda sembra che sdb sia stato rimosso perché in fault
[root@localhost ~]# mdadm --examine /dev/sdb1 /dev/sdb1: Magic : a92b4efc Version : 00.90.00 UUID : b2aa3d85:c06562ea:6e2356ff:811b8018 Creation Time : Tue Nov 30 19:22:22 2010 Raid Level : raid10 Used Dev Size : 976758912 (931.51 GiB 1000.20 GB) Array Size : 1953517824 (1863.02 GiB 2000.40 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 0 Update Time : Sun Nov 27 18:34:45 2011 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Checksum : e17aa79c - correct Events : 0.98 Layout : near=2, far=1 Chunk Size : 64K Number Major Minor RaidDevice State this 1 8 17 1 active sync /dev/sdb1 0 0 8 1 0 active sync /dev/sda1 1 1 8 17 1 active sync /dev/sdb1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
sdb dice che è tutto ok
[root@localhost ~]# mdadm --examine /dev/sdc1 /dev/sdc1: Magic : a92b4efc Version : 00.90.00 UUID : b2aa3d85:c06562ea:6e2356ff:811b8018 Creation Time : Tue Nov 30 19:22:22 2010 Raid Level : raid10 Used Dev Size : 976758912 (931.51 GiB 1000.20 GB) Array Size : 1953517824 (1863.02 GiB 2000.40 GB) Raid Devices : 4 Total Devices : 3 Preferred Minor : 0 Update Time : Wed Mar 13 14:07:09 2013 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Checksum : e3f1357b - correct Events : 0.279724 Layout : near=2, far=1 Chunk Size : 64K Number Major Minor RaidDevice State this 2 8 33 2 active sync /dev/sdc1 0 0 0 0 0 removed 1 1 0 0 1 faulty removed 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
sdc dice che solo la seconda coppia è integra
[root@localhost ~]# mdadm --examine /dev/sdd1 /dev/sdd1: Magic : a92b4efc Version : 00.90.00 UUID : b2aa3d85:c06562ea:6e2356ff:811b8018 Creation Time : Tue Nov 30 19:22:22 2010 Raid Level : raid10 Used Dev Size : 976758912 (931.51 GiB 1000.20 GB) Array Size : 1953517824 (1863.02 GiB 2000.40 GB) Raid Devices : 4 Total Devices : 3 Preferred Minor : 0 Update Time : Wed Mar 13 14:07:09 2013 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 Checksum : e3f1358d - correct Events : 0.279724 Layout : near=2, far=1 Chunk Size : 64K Number Major Minor RaidDevice State this 3 8 49 3 active sync /dev/sdd1 0 0 0 0 0 removed 1 1 0 0 1 faulty removed 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
sdd dice la stessa cosa di sdc, vediamo d'avere un quadro generale della situazione:
[root@localhost ~]# mdadm --examine /dev/sd[dcba]1 | egrep "dev|Update|Role|State|Chunk Size" /dev/sda1: Update Time : Wed Mar 13 09:58:16 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 0 8 1 0 active sync /dev/sda1 0 0 8 1 0 active sync /dev/sda1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdb1: Update Time : Sun Nov 27 18:34:45 2011 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 1 8 17 1 active sync /dev/sdb1 0 0 8 1 0 active sync /dev/sda1 1 1 8 17 1 active sync /dev/sdb1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdc1: Update Time : Wed Mar 13 14:07:09 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 2 8 33 2 active sync /dev/sdc1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdd1: Update Time : Wed Mar 13 14:07:09 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 3 8 49 3 active sync /dev/sdd1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
Dopo questa analisi mi sono preso una settimana per riflettere sulle strategie da adottare, settimana nella quale il mio amico Ilario è morto dal contorcimento di budella... :D Scherzo.
Dopo lunghe riflessioni le cose evidenti sono:
- Sembra che sdb sia sicuramente morto perché 3 dischi su 4 dicono che lo è; solo sdb dice che è tutto ok, ma se esso è in fail forse non sta restituendo qualcosa di vero
- Sembra che sda si sia disattivato dopo il fail di sdb, ma dato che due dischi (sdc e sdd) dicono che non fa parte del RAID c'è la seria possibilità che sia rotto anche'esso
da questo la soluzione è una sola, fermare il device /dev/md0 e sperare che sda non sia rotto, altrimenti bisognarà usare un tool di recupero dati.
Dopo vari ripensamenti, dolori di pancia, polsi che tremano, conscio che rischio molto, qualche sigaretta, decido di fermare l'array
[root@localhost ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
controllo che sia fermo:
[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] unused devices:
e subito dopo controllo se esistono ancora traccie del mio array
[root@localhost ~]# mdadm --examine --scan ARRAY /dev/md0 level=raid10 num-devices=4 UUID=b2aa3d85:c06562ea:6e2356ff:811b8018
Woow, almeno le informazioni sono rimaste, cerco altre informazioni con:
[root@localhost ~]# mdadm --detail /dev/md0 mdadm: md device /dev/md0 does not appear to be active.
niente, dopo un'altra sigaretta e ragionamenti inconcludenti decido di forzare l'assemblaggio
[root@localhost ~]# mdadm -A --force /dev/md0 mdadm: forcing event count in /dev/sda1(0) from 279692 upto 279724 mdadm: forcing event count in /dev/sdb1(1) from 98 upto 279724 mdadm: clearing FAULTY flag for device 2 in /dev/md0 for /dev/sdb1 mdadm: /dev/md0 assembled from 4 drives - not enough to start the array.
si è assemblato ma non è partito, perché? Panico e sudore! Cerco informazioni:
[root@localhost ~]# mdadm --detail /dev/md0 mdadm: md device /dev/md0 does not appear to be active.
Niente!
[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] md0 : inactive sda1[0](S) sdd1[3](S) sdc1[2](S) sdb1[1](S) 3907035648 blocks unused devices:
Anche qua confermato niente! Panico! Continuo a cercare info:
[root@localhost ~]# mdadm --examine /dev/sd[dcba]1 | egrep "dev|Update|Role|State|Chunk Size" /dev/sda1: Update Time : Wed Mar 13 09:58:16 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 0 8 1 0 active sync /dev/sda1 0 0 8 1 0 active sync /dev/sda1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdb1: Update Time : Sun Nov 27 18:34:45 2011 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 1 8 17 1 active sync /dev/sdb1 0 0 8 1 0 active sync /dev/sda1 1 1 8 17 1 active sync /dev/sdb1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdc1: Update Time : Wed Mar 13 14:07:09 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 2 8 33 2 active sync /dev/sdc1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1 /dev/sdd1: Update Time : Wed Mar 13 14:07:09 2013 State : clean Chunk Size : 64K Number Major Minor RaidDevice State this 3 8 49 3 active sync /dev/sdd1 2 2 8 33 2 active sync /dev/sdc1 3 3 8 49 3 active sync /dev/sdd1
Stessa situazione, non è cambiato niente, stessa situazione di prima. Cerco ancora info:
[root@localhost ~]# mdadm --examine --scan ARRAY /dev/md0 level=raid10 num-devices=4 UUID=b2aa3d85:c06562ea:6e2356ff:811b8018
Ma come mai c'è ancora l'UUID? Urge un'altra sigaretta, dopo altri ragionamenti ciclici e inconcludenti, in preda alla disperazione decido di assemblare:
[root@localhost ~]# mdadm --assemble --scan mdadm: /dev/md0 has been started with 4 drives.
Partito? Si, partito! partitooooooo, PARTITOOOOOO :))))))))
Vediamo di controllare meglio, sto salto emotivo mi ha quasi mandato ko, comunque non credendoci cerco info per controllare bene
[root@localhost ~]# mdadm --detail /dev/md0 /dev/md0: Version : 00.90.03 Creation Time : Tue Nov 30 19:22:22 2010 Raid Level : raid10 Array Size : 1953517824 (1863.02 GiB 2000.40 GB) Used Dev Size : 976758912 (931.51 GiB 1000.20 GB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Mar 13 09:58:16 2013 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2, far=1 Chunk Size : 64K UUID : b2aa3d85:c06562ea:6e2356ff:811b8018 Events : 0.279724 Number Major Minor RaidDevice State 0 8 1 0 active sync /dev/sda1 1 8 17 1 active sync /dev/sdb1 2 8 33 2 active sync /dev/sdc1 3 8 49 3 active sync /dev/sdd1
Bene, bene.
[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] md0 : active raid10 sda1[0] sdd1[3] sdc1[2] sdb1[1] 1953517824 blocks 64K chunks 2 near-copies [4/4] [UUUU] unused devices:
Anche qua tutto ok
[root@localhost ~]# pvscan PV /dev/md0 VG ilario lvm2 [1.82 TB / 0 free] Total: 1 [1.82 TB] / in use: 1 [1.82 TB] / in no VG: 0 [0 ]
[root@localhost ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "ilario" using metadata type lvm2 Device '/dev/md0' has been left open.
[root@localhost ~]# lvscan inactive '/dev/ilario/films' [886.44 GB] inherit inactive '/dev/ilario/lavori' [488.28 GB] inherit inactive '/dev/ilario/generale' [488.28 GB] inherit
[root@localhost ~]# pvdisplay --- Physical volume --- PV Name /dev/md0 VG Name ilario PV Size 1.82 TB / not usable 20.25 MB Allocatable yes (but full) PE Size (KByte) 32768 Total PE 59616 Free PE 0 Allocated PE 59616 PV UUID Y6ILmb-Zv4H-DNKv-GpZ6-0kQg-0tFl-0PwnDB
[root@localhost ~]# vgdisplay --- Volume group --- VG Name ilario System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 1.82 TB PE Size 32.00 MB Total PE 59616 Alloc PE / Size 59616 / 1.82 TB Free PE / Size 0 / 0 VG UUID Vhhgbk-kuUG-2YwB-sBjm-MgV2-hg2Y-sWw28M
[root@localhost ~]# lvdisplay --- Logical volume --- LV Name /dev/ilario/films VG Name ilario LV UUID oT3Eoc-9nZZ-sPRk-xVaX-TXqD-NHmL-2EvsHt LV Write Access read/write LV Status NOT available LV Size 886.44 GB Current LE 28366 Segments 1 Allocation inherit Read ahead sectors auto --- Logical volume --- LV Name /dev/ilario/lavori VG Name ilario LV UUID vQL113-tq8C-35RS-9CRU-0ypd-F6OD-2zOSgS LV Write Access read/write LV Status NOT available LV Size 488.28 GB Current LE 15625 Segments 1 Allocation inherit Read ahead sectors auto --- Logical volume --- LV Name /dev/ilario/generale VG Name ilario LV UUID GCCZ0Y-RzbZ-MVGe-kXaq-cfK0-M9tp-o7SIln LV Write Access read/write LV Status NOT available LV Size 488.28 GB Current LE 15625 Segments 1 Allocation inherit Read ahead sectors auto
Anche LVM sembra resuscitato, infatti da interfaccia web tutto è tornato normale :D per sicurezza anche se inutile ricontrollo il RAID
[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] md0 : active raid10 sda1[0] sdd1[3] sdc1[2] sdb1[1] 1953517824 blocks 64K chunks 2 near-copies [4/4] [UUUU] unused devices:
Sembra che ci sono riuscito, riavvio e anche le condivisioni sono dinuovo raggiungibili.
Conclusioni
Con il "senno di poi" la situazione non era tragica, in realtà sembra che per qualche motivo sdb sia stato segnato come rotto, lo spegnimento del NAS ha provocato la separazione dell'array che logicamente non si è avviato. Il problema che ha scatenato il panico è che ad una prima analisi sembrava che due dischi in mirror si siano disattivati perché rotti, situazione che se si fosse rilevata veritiera sarebbe stato quasi impossibile ricostruire l'array; a quel punto l'unica soluzione era un software di recupero dati, operazione costosa e lunga.
Ciao
Un grazie a Saverio S. per avermi fatto inboccare la strada giusta ed a Ilario per la pazienza durata una settimana.