"Se ci sono due o più modi di fare una cosa,
e uno di questi modi può condurre a una catastrofe,
allora qualcuno la farà in quel modo.

(Edward Murphy)

Open filer RAID 10 con quattro dischi, due dischi forse morti e momenti di panico

Ven, 29/03/2013 - 00:00 -- arturu
Open filer RAID 10

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.