Reconstruire un volume RAID1 dégradé

Dans l'exemple suivant, le disque /dev/vdb est en panne.
La partition /dev/vdb1 intégrée au volume RAID1 /dev/md127 n'est plus accessible.

Dans le cas où la panne ne serait pas détectée par le système, exécuter la commande suivante :

$ mdadm --manage --set-faulty /dev/md127 /dev/vdb1

On vérifie l'état du volume RAID :

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 vda1[2] vdb1[1](F)
      10476416 blocks super 1.2 [2/1] [U_]
 
unused devices: <none>

La partition /dev/vdb1 est bien indiquée comme n'étant plus accessible (flag à F).

On supprime la partition /dev/vdb1 du volume RAID /dev/md127 :

$ mdadm /dev/md127 -r /dev/vdb1
mdadm: hot removed /dev/vdb1 from /dev/md127

On vérifie que la partition /dev/vdb1 a bien été supprimée :

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 vda1[2]
      10476416 blocks super 1.2 [2/1] [U_]
 
unused devices: <none>

La partition n'apparait plus.

Il faut maintenant arrêter la machine, remplacer le disque défectueux puis redémarrer la machine.

Après redémarrage de la machine, on liste les disques :

$ fdisk -l
 
Disk /dev/vda: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1            2048    20971519    10484736   fd  Linux RAID autodetect
 
Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
Disk /dev/vdb doesn't contain a valid partition table
 
Disk /dev/md127: 10.7 GB, 10727849984 bytes
2 heads, 4 sectors/track, 2619104 cylinders, total 20952832 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
Disk /dev/md127 doesn't contain a valid partition table

Mon nouveau disque /dev/vdb apparait bien dans la liste.
Il faut maintenant recopier la table de partition du disque sain /dev/vda vers le nouveau disque /dev/vdb.

$ sfdisk --dump /dev/vda | sfdisk /dev/vdb

Puis on vérifie que l'opération s'est bien déroulée :

$ fdisk -l
 
Disk /dev/vda: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1            2048    20971519    10484736   fd  Linux RAID autodetect
 
Disk /dev/vdb: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   fd  Linux RAID autodetect
 
Disk /dev/md127: 10.7 GB, 10727849984 bytes
2 heads, 4 sectors/track, 2619104 cylinders, total 20952832 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
 
Disk /dev/md127 doesn't contain a valid partition table

Mon nouveau disque /dev/vdb contient bien désormais une partition du type Linux RAID autodetect /dev/vdb1.

Pour terminer, il faut maintenant ajouter notre nouvelle partition /dev/vdb1 à notre volume RAID1 /dev/md127 :

$ mdadm /dev/md127 -a /dev/vdb1

Reste à vérifier la reconstruction du RAID :

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 vdb1[3] vda1[2]
      10476416 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  2.7% (286656/10476416) finish=13.0min speed=13029K/sec
 
unused devices: <none>

Pour information, la reconstruction du RAID peut être suivie en temps réel grâce à cette commande :

$ watch -n 1 cat /proc/mdstat

Une fois la reconstruction terminée, on vérifie l'état de notre volume RAID1 /dev/md127 :

$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 vdb1[3] vda1[2]
      10476416 blocks super 1.2 [2/2] [UU]
 
unused devices: <none>

$ mdadm --detail /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Mon May 20 22:18:07 2013
     Raid Level : raid1
     Array Size : 10476416 (9.99 GiB 10.73 GB)
  Used Dev Size : 10476416 (9.99 GiB 10.73 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
 
    Update Time : Tue May 21 13:29:20 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
 
           Name : vm-vpn:127  (local to host vm-vpn)
           UUID : 6479c625:120e2001:65ef33d1:dfb60c0f
         Events : 90
 
    Number   Major   Minor   RaidDevice State
       2     253        1        0      active sync   /dev/vda1
       3     253       17        1      active sync   /dev/vdb1

Etiquettes: