État avant arrachage

  • La commande more /proc/mdstat nous liste les différents périphériques RAID. Nous avons 5 partitions RAID en miroir qui sont toutes opérationnelles ([UU]) et qui utilisent les disques /dev/sda et /dev/sdb. Notez qu'on peut faire un périphérique RAID avec les disques complets et ensuite faire des partitions dedans, mais personnellement j'aime mieux créer plusieurs périphériques.
[root@atlas ~]# more /proc/mdstat
Personalities : [raid1]
md4 : active raid1 sdb1[2] sda1[1]
1052160 blocks [2/2] [UU]
md3 : active raid1 sdb5[2] sda5[1]
1052160 blocks [2/2] [UU]
md2 : active raid1 sdb6[2] sda6[1]
1052160 blocks [2/2] [UU]
md1 : active raid1 sdb2[2] sda2[1]
8385856 blocks [2/2] [UU]
md0 : active raid1 sdb7[2] sda7[1]
142641024 blocks [2/2] [UU]
  • La commande fdisk nous permet de voir le partitionnement des deux disques.
[root@atlas ~]# fdisk -l /dev/sdc /dev/sda

Disque /dev/sdc: 160.0 Go, 160041885696 octets
255 heads, 63 sectors/track, 19457 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système
/dev/sdc1 * 1 131 1052226 fd Linux raid autodetect
/dev/sdc2 132 1175 8385930 fd Linux raid autodetect
/dev/sdc3 1176 1436 2096482+ 82 Linux swap / Solaris
/dev/sdc4 1437 19456 144745650 5 Extended
/dev/sdc5 1437 1567 1052226 fd Linux raid autodetect
/dev/sdc6 1568 1698 1052226 fd Linux raid autodetect
/dev/sdc7 1699 19456 142641103+ fd Linux raid autodetect

Disque /dev/sda: 160.0 Go, 160041885696 octets
255 heads, 63 sectors/track, 19457 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 131 1052226 fd Linux raid autodetect
/dev/sda2 132 1175 8385930 fd Linux raid autodetect
/dev/sda3 1176 1436 2096482+ 82 Linux swap / Solaris
/dev/sda4 1437 19456 144745650 5 Extended
/dev/sda5 1437 1567 1052226 fd Linux raid autodetect
/dev/sda6 1568 1698 1052226 fd Linux raid autodetect
/dev/sda7 1699 19456 142641103+ fd Linux raid autodetect

Arrachage d'un des disques et insertion d'un disque de remplacement


Nous procédons à cette étape et analysons ce qu'il se passe dans le fichier /var/log/messages:
Arrachage:
Oct 23 14:59:28 atlas kernel: ata2: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0x2 frozen
Oct 23 14:59:28 atlas kernel: ata2: (irq_stat 0x00000040, connection status changed)
Oct 23 14:59:28 atlas kernel: ata2: soft resetting port
Oct 23 14:59:28 atlas kernel: ata2: softreset failed (port busy but CLO unavailable)
Oct 23 14:59:28 atlas kernel: ata2: reset failed (errno=-95), retrying in 10 secs
Oct 23 14:59:38 atlas kernel: ata2: hard resetting port

Remplacement

Oct 23 14:59:39 atlas kernel: ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
Oct 23 14:59:39 atlas kernel: ata2.00: ATA-7: ST3160815AS, 3.AAD, max UDMA/133
Oct 23 14:59:39 atlas kernel: ata2.00: 312581808 sectors, multi 0: LBA48 NCQ (depth 31/32)
Oct 23 14:59:39 atlas kernel: ata2.00: configured for UDMA/133
Oct 23 14:59:39 atlas kernel: ata2: EH complete
Oct 23 14:59:39 atlas kernel: Vendor: ATA Model: ST3160815AS Rev: 3.AA
Oct 23 14:59:39 atlas kernel: Type: Direct-Access ANSI SCSI revision: 05
Oct 23 14:59:39 atlas kernel: SCSI device sdc: 312581808 512-byte hdwr sectors (160042 MB)
Oct 23 14:59:39 atlas kernel: sdc: Write Protect is off
Oct 23 14:59:39 atlas kernel: SCSI device sdc: drive cache: write back
Oct 23 14:59:39 atlas kernel: SCSI device sdc: 312581808 512-byte hdwr sectors (160042 MB)
Oct 23 14:59:39 atlas kernel: sdc: Write Protect is off
Oct 23 14:59:39 atlas kernel: SCSI device sdc: drive cache: write back
Oct 23 14:59:39 atlas kernel: sdc: unknown partition table
Oct 23 14:59:39 atlas kernel: sd 1:0:0:0: Attached scsi disk sdc
Oct 23 14:59:39 atlas kernel: sd 1:0:0:0: Attached scsi generic sg1 type 0
On note que le nouveau disque est sur le périphérique /dev/sdc
Le RAID est maintenant dégradé ([U_]). Le disque sdb est en mode FAIL (F):
[root@viva-atlas ~]# more /proc/mdstat
Personalities : [raid1]
md4 : active raid1 sdb1[2](F) sda1[0]
1052160 blocks [2/1] [U_]

md3 : active raid1 sdb5[2](F) sda5[0]
1052160 blocks [2/1] [U_]

md2 : active raid1 sdb6[2](F) sda6[0]
1052160 blocks [2/1] [U_]

md0 : active raid1 sdb7[2](F) sda7[0]
142641024 blocks [2/1] [U_]

md1 : active raid1 sdb2[2](F) sda2[0]
8385856 blocks [2/1] [U_]

unused devices: <none>

Recréation des partitions


On va maintenant recréer les partitions en les copiant du disque encore fonctionnel vers l'autre disque (c'est un raccourci contestable...):
[root@atlas ~]# dd if=/dev/sda of=/dev/sdc count=337265
337265+0 enregistrements lus
337265+0 enregistrements écrits
172679680 octets (173 MB) copiés, 9,72654 seconde, 17,8 MB/s
[root@atlas ~]# fdisk -l /dev/sdc /dev/sda
Disque /dev/sdc: 160.0 Go, 160041885696 octets
255 heads, 63 sectors/track, 19457 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets
Périphérique Amorce Début Fin Blocs Id Système
/dev/sdc1 * 1 131 1052226 fd Linux raid autodetect
/dev/sdc2 132 1175 8385930 fd Linux raid autodetect
/dev/sdc3 1176 1436 2096482+ 82 Linux swap / Solaris
/dev/sdc4 1437 19456 144745650 5 Extended
/dev/sdc5 1437 1567 1052226 fd Linux raid autodetect
/dev/sdc6 1568 1698 1052226 fd Linux raid autodetect
/dev/sdc7 1699 19456 142641103+ fd Linux raid autodetect
Disque /dev/sda: 160.0 Go, 160041885696 octets
255 heads, 63 sectors/track, 19457 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 131 1052226 fd Linux raid autodetect
/dev/sda2 132 1175 8385930 fd Linux raid autodetect
/dev/sda3 1176 1436 2096482+ 82 Linux swap / Solaris
/dev/sda4 1437 19456 144745650 5 Extended
/dev/sda5 1437 1567 1052226 fd Linux raid autodetect
/dev/sda6 1568 1698 1052226 fd Linux raid autodetect
/dev/sda7 1699 19456 142641103+ fd Linux raid autodetect

Réparation du RAID


Il est temps maintenant de réparer la grappe RAID. On va avec la commande mdadm déclarer le périphérique /dev/sdb* comme faisant défaut (--fail), le retirer (--remove) et ajouter le périphérique /dev/sdc* avec l'option --add.:
[root@atlas ~]# mdadm /dev/md1 --add /dev/sdc2 --fail /dev/sdb2 --remove /dev/sdb2
mdadm: re-added /dev/sdc2
mdadm: cannot find /dev/sdb2: No such file or directory
[root@atlas ~]# mdadm /dev/md0 --add /dev/sdc7 --fail /dev/sdb7 --remove /dev/sdb7
mdadm: added /dev/sdc7
mdadm: cannot find /dev/sdb7: No such file or directory
[root@atlas ~]# mdadm /dev/md2 --add /dev/sdc6 --fail /dev/sdb6 --remove /dev/sdb6
mdadm: added /dev/sdc6
mdadm: cannot find /dev/sdb6: No such file or directory
[root@atlas ~]# mdadm /dev/md3 --add /dev/sdc5 --fail /dev/sdb5 --remove /dev/sdb5
mdadm: added /dev/sdc5
mdadm: cannot find /dev/sdb5: No such file or directory
[root@atlas ~]# mdadm /dev/md4 --add /dev/sdc1 --fail /dev/sdb1 --remove /dev/sdb1
mdadm: re-added /dev/sdc1
mdadm: cannot find /dev/sdb1: No such file or directory
Le disque /dev/sdb génère des erreurs, mais c'est normal puisqu'il n'est plus là.

Vérification


On vérifie que le RAID se reconstuit en regardant le contenu du fichier /proc/mdstat:
[root@viva-atlas ~]# more /proc/mdstat
Personalities : [raid1]
md4 : active raid1 sdc1[2] sdb1[3](F) sda1[0]
1052160 blocks [2/1] [U_]
resync=DELAYED
md3 : active raid1 sdc5[3] sdb5[2](F) sda5[0]
1052160 blocks [2/1] [U_]
resync=DELAYED
md2 : active raid1 sdc6[3] sdb6[2](F) sda6[0]
1052160 blocks [2/1] [U_]
resync=DELAYED
md0 : active raid1 sdc7[3] sdb7[2](F) sda7[0]
142641024 blocks [2/1] [U_]
[>....................] recovery = 1.2% (1820480/142641024) finish=32.2min speed=72819K/sec
md1 : active raid1 sdc2[1] sdb2[2](F) sda2[0]
8385856 blocks [2/2] [UU]
unused devices:
Tant que le système n'est pas redémarré, le disque sdb apparaît comme F dans /proc/mdstat, même une fois que le RAID est reconstruit: Si on redémarre (pas nécessaire), on obtient ceci (noter que /dev/sdc est redevenu /dev/sdb):
[root@viva-atlas ~]# more /proc/mdstat
Personalities : [raid1]
md4 : active raid1 sdb1[1] sda1[0]
1052160 blocks [2/2] [UU]

md3 : active raid1 sdb5[1] sda5[0]
1052160 blocks [2/2] [UU]

md2 : active raid1 sdb6[1] sda6[0]
1052160 blocks [2/2] [UU]

md0 : active raid1 sdb7[1] sda7[0]
142641024 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
8385856 blocks [2/2] [UU]

unused devices: