A Fail event had been detected on md device /dev/md3

modifié le : 13 septembre 2022,
par Guillaume Chéramy
 

 

Votre serveur fonctionne très bien, votre Raid1 synchronise correctement vos disques, impeccable.

Puis un matin ... c'est la cata la cata ... vous recevez un mail :

 

"""""
A Fail event had been detected on md device /dev/md3.

It could be related to component device /dev/sda3.

Faithfully yours, etc.
"""""

Un ptit

# cat /proc/mdstat :

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md1 : active raid1 sda1[0] sdb1[1]
      20480896 blocks [2/2] [UU]
     
md3 : active raid1 sda3[2](F) sdb3[1]
      709993792 blocks [2/1] [_U]

 

hum hum sda3 failed !!! pas cool sachant que mon partitionnement est comme ceci :
/dev/md1 /
/dev/md3 /var

c'est un serveur hébergeant un site web donc toutes les données sont dans /var/lib/mysql et /var/www.

Danger !!! Deux méthodes :

  1. la fuite dans un pays qui ne pratique pas l'extradition des admins
  2. changer le disque défectueux

Attaquons la solution 2 alors ...

 

Préparer le démontage du disque défectueux

Enlever toutes les partitions du Raid

La partition /dev/sda3 à déjà été enlevé par mdadm du raid. Il faut en faire de même pour la partition /dev/sda1 :

On la marque comme était en erreur :

# mdadm --manage /dev/md0 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0

On la supprime du raid :

# mdadm --manage /dev/md1 --remove /dev/sda3
mdadm: hot removed /dev/sda1 from /dev/md0

On vérifie :

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[1]
      5453952 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
      1951744 blocks [2/1] [_U]

unused devices: <none>

Le disque est donc maintenant complètement exclu du Raid.

 

Installer grub sur le disque

Grub est installé sur le premier disque, il faut donc réinstaller et reconfigurer grub sur ce nouveau disque.

# grub-install /dev/sdb
Installation finished. No error reported.

# export LANG=C
# update-grub2 /dev/sdb
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
done

 

On peut maintenant en toute sérénité (vous avez vérifié vos backups ?) arrêter la machine, débrancher le disque défectueux, en installer un nouveau et dire au BIOS de démarrer sur le second disque.

Si tout se passe bien on doit se retrouver sur le prompt et les services ont redémarré. Merci le Raid.

 

Reconstruction du Raid

Le nouveau disque doit être tout vierge et de préférence de taille équivalente au premier.

Reconstruction de la table de partition

On va utiliser sfdisk pour dumper la partition du disque actuel vers le nouveau :

Dumper la table de partitions (dans le cas ici j'ai placé l'ancien disque à la place du premier c'est pour cela qu'il est renommé /dev/sda) :


# sfdisk -d /dev/sda > sda_file

 

La restaurer sur le nouveau disque :

# sfdisk /dev/sdb < sda_file
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 1044 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
 /dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/sdb1            63   3903794    3903732  fd  Linux raid autodetect
/dev/sdb2       3903795   5863724    1959930  82  Linux swap / Solaris
/dev/sdb3       5863725  16771859   10908135  fd  Linux raid autodetect
/dev/sdb4             0         -          0   0  Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

 

Relire la table de partitions :

# apt-get install parted
# partprobe

 

Recréer le Raid

Dernière étape remettre en place notre Raid 1 :

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

# mdadm --manage /dev/md1 --add /dev/sdb3
mdadm: added /dev/sdb3

On vérifie la reconstruction :

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[2] sda3[1]
      5453952 blocks [2/1] [_U]
          resync=DELAYED
     
md0 : active raid1 sdb1[2] sda1[1]
      1951744 blocks [2/1] [_U]
      [=======>.............]  recovery = 37.5% (733888/1951744) finish=0.8min speed=24462K/sec
     
unused devices: <none>

Sauvé ! Si tout se passe bien le temps d'interruption est minime, le serveur sera peut-être un peu plus lent le temps de la synchronisation des disques.