Remplacement d’un disque dur dans un RAID1 Linux – MBR MS-DOS ou GPT

Avec cette même méthode de remplacement d’un disque RAID1, en cas d’incendie : Créer un disque dur RAID1 /dev/sda et le stocker sur un autre site

Le RAID 1 ou mirroring consiste à utiliser n disques redondants (au minimum 2) et à copier sur chacun les mêmes données. Sa capacité est égale à celle du plus petit disque dur du RAID, au niveau de la fiabilité par contre, le gain est évident. Elle accepte une défaillance de n-1 disques. Ainsi, si nous mettons 4 disques de 200Go, nous aurons 200Go d’espace disponible et on pourra perdre jusqu’à 3 disques durs dans le RAID avant de perdre des données. Malheureusement les coûts sont proportionnels au nombre de mirror alors que la capacité reste identique.

RAID1

​Voici comment retirer un disque défectueux d’un RAID1 Linux (software RAID), et comment ajouter un nouveau disque dur dans le RAID1 sans perte de données.

Cas 1 (ci-dessous) avec des disques durs dont la table de partitions est au format MBR / MS-DOS
MBR – MS-DOS : howtoforge.com/replacing_hard_disks_in_a_raid1_array

Cas 2 : Si la table de partition des disques durs est au format GPT au lieu de MBR/MS-DOS :
→ Utiliser ci-dessous la commande gdisk au lieu de la commande sfdisk.
GPT partitions : howtoforge.com/tutorial/linux-raid-replace-failed-harddisk

​1 Note préliminaire

Dans l’exemple suivant, nous avons 2 disques durs : /dev/sda and /dev/sdb,
avec leurs partitions respectives : /dev/sda1 et /dev/sda2, /dev/sdb1 et /dev/sdb2.

/dev/sda1 + /dev/sdb1 = /dev/md0 RAID1 array

/dev/sda2 + /dev/sdb2 = /dev/md1
RAID1 array

Exemple de panne ci-dessous : /dev/sdb est en panne et on va le remplacer par un disque neuf ou vide
Si c’est au contraire /dev/sda qui est en panne, inverser les commandes ci-dessous (sda ↔ sdb)

​2 Comment savoir quel disque est en panne ?

Si un disque est en panne,

– des messages d’erreurs sont écrits dans le fichier log : /var/log/messages ou /var/log/syslog.

-ou éxecuter la commande : # cat /proc/mdstat

et au lieu d’avoir normalement [UU] on voit [U_] cela signifie que le RAID1 a été dégradé.

​3 Retirer le disque en panne

To remove /dev/sdb, we will mark /dev/sdb1 and /dev/sdb2 as failed and remove them from their respective RAID arrays (/dev/md0 and /dev/md1).

First we mark /dev/sdb1 , /dev/sdb2 … as failed:

# mdadm --manage /dev/md0 --fail /dev/sdb1

# mdadm --manage /dev/md1 --fail /dev/sdb2cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
      24418688 blocks [2/1] [U_]
 
md1 : active raid1 sda2[0] sdb2[1](F)
      24418688 blocks [2/2] [UU]
 

Then we remove /dev/sdb1, /dev/sdb2 … from /dev/md0:

# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb1

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]
 
md1 : active raid1 sda2[0]
      24418688 blocks [2/1] [U_]

Eteindre le serveur pour remplacer le disque physique :

# shutdown -h now

and replace the old /dev/sdb hard drive with a new one (it must have at least the same size as the old one – if it’s only a few MB smaller than the old one then rebuilding the arrays will fail).

​4 Ajouter le nouveau disque dur dans le RAID1

After you have changed the hard disk /dev/sdb, boot the system.

The first thing we must do now is to create the exact same partitioning as on /dev/sda. We can do this with one simple command :

# sfdisk -d /dev/sda | sfdisk /dev/sdb

You can run : fdisk -l ou lsblk to check if both hard drives have the same partitioning now.

Next we add /dev/sdb1 to /dev/md0 and /dev/sdb2 to /dev/md1:

# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1

# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2

Après la commande –add les arays (/dev/md0 , /dev/md1 …) commencent à se synchroniser …

Run cat /proc/mdstat to see when it’s finished.

During the synchronization the output will look like this:

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/1] [U_]
      [=>..............]  recovery =  9.9% (2423168/24418688) finish=2.8min speed=127535K/sec
 
md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/1] [U_]
      [=>..............]  recovery =  6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

Lorsque la synchronisation automatique est terminée, on obtient l’affichage suivant [UU] :

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/2] [UU]
 
md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

Vous avez remplacé le disque dur /dev/sdb avec succès !