RAID Disk Failure

Si vous rencontrez un problème de RAID sur un serveur, l’état du RAID logiciel peut être lu via le fichier /proc/mdstat.

Diagnostic

Dans le cas d’un RAID 1 (mirroir) logiciel avec 2 disques sda et sdb.

RAID

Sur le serveur qui rencontre le problème, lancer la commande suivante, un RAID correctement monté devrait indiquer :

# cat /proc/mdstat

Personalities : [raid1]
read_ahead 1024 sectors

md0 : active raid1 sda1[1] sdb1[0]
102208 blocks [2/2] [UU]

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

unused devices: <none>

RAID défaillant

L’état des différentes partitions est affiché entre crochets. La lettre U signifie “up”.

Ici le disque sdb est manquant :

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[1]
408576 blocks super 1.2 [2/1] [_U]
bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sda2[1]
120649728 blocks super 1.2 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

Détails sur les RAID

Afficher les détails de md0 :

# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jun 4 14:08:36 2021
Raid Level : raid1
Array Size : 408576 (399.00 MiB 418.38 MB)
Used Dev Size : 408576 (399.00 MiB 418.38 MB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Mon Feb 20 09:43:37 2023
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

Consistency Policy : bitmap

Name : 4444AA-ABC-1111:0
UUID : 111a222a:333aaa0a:aaa444a5:555a8aa
Events : 357

Number Major Minor RaidDevice State
- 0 0 0 removed <====== Disque manquant (sdb1)
1 8 33 1 active sync /dev/sda1

Afficher les détails de md1 :

# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Fri Jun 4 14:08:28 2021
Raid Level : raid1
Array Size : 120649728 (115.06 GiB 123.55 GB)
Used Dev Size : 120649728 (115.06 GiB 123.55 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Mon Feb 20 10:45:48 2023
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0

Consistency Policy : bitmap

Name : 4444AA-ABC-1111:1
UUID : 11a222aa:333a8a44:a555aa6a:6666aaa8
Events : 12641

Number Major Minor RaidDevice State
- 0 0 0 removed <====== Disque manquant (sdb2)
1 8 34 1 active sync /dev/sda2

Les logs

Identifier le disque qui pose problème en consultant le fichier /var/log/messages :

Supprimer le périphérique

Niveau software

mdadm

Commande mdadm :

mdadm - manage MD devices aka Linux Software RAID

Synopsis

mdadm [mode] <raiddevice> [options] <component-devices> 

On retire le disque problématique du RAID (dans certains cas, les commandes peuvent être utiles, ou pas…).

  • -f, --fail : détache le périphérique et sera marqué comme étant en panne. Il pourra alors être retiré du RAID
  • -r, --remove : supprime le périphérique du RAID

Marquer en fail

Marquer le périphérique en fail :

# mdadm --fail /dev/md0 /dev/sdb1
mdadm: stat failed for /dev/sda1: No such file or directory

# mdadm --fail /dev/md1 /dev/sdb2
mdadm: stat failed for /dev/sda2: No such file or directory

Supprimer le fail

Supprimer le périphérique :

# mdadm --remove /dev/md0 /dev/sdb1
mdadm: stat failed for /dev/sda1: No such file or directory

# mdadm --remove /dev/md1 /dev/sdb2
mdadm: stat failed for /dev/sda2: No such file or directory

Niveau hardware

Repérer le disque

Si votre serveur ne signale pas automatiquement le disque défaillant, vous pouvez le pointer ou pointer le(s) disque(s) qui reste(nt) pour en déduire où se trouve le défaillant :

Allumer la LED d’un disque :

# ledctl locate=/dev/sda
# ledctl locate=/dev/sdb

Eteindre la LED d’un disque :

# ledctl locate_off=/dev/sda
# ledctl locate_off=/dev/sdb

Si la commande ne fonctionne pas, vous pouvez tenter avec badblocks :

# badblocks -vs /dev/sda

Annalyser le disque

Avant de retirer et remplacer le nouveau disque, lancer udevadm pour afficher la détection du nouveau disque (l’affichage peut-être long lors du retrait) :

# udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

Remplacer le disque

Remplacer physiquement le disque défaillant.

La commande udevadm monitor devrait afficher :

KERNEL[...] add	  /devices/pci/at4/MyHostName/target4:0:0 (scsi)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0 (scsi)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device)
KERNEL[...] add /devices/virtual/bdi/8:16 (bdi)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0 (scsi)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg)
UDEV [...] add /devices/virtual/bdi/8:16 (bdi)
KERNEL[...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/block/sdb (block)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0 (scsi)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0 (scsi_disk)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_device/4:0:0:0 (scsi_device)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/scsi_generic/sg2 (scsi_generic)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/bsg/4:0:0:0 (bsg)
UDEV [...] add /devices/pci/at4/MyHostName/target4:0:0/4:0:0:0/block/sdb (block)

Vérifications

Vérifier si le nouveau disaue a bien été détecté :

# fdisk -l 

Il est possible de forcer le détection :

$ echo "- - -" > /sys/class/scsi_host/MyHostName/scan

Recupération des données du RAID

Cloner la partition du disque restant (/dev/sda) du RAID sur le nouveau disque (/dev/sdb) :

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

Reconstruction du RAID

Monitoring

Pour monitorer la reconstruction :

# watch cat /proc/mdstat

Volume md0

Reconstruction du RAID sur volume md0 :

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

Vérification :

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[2] sda1[1]
408576 blocks super 1.2 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk

md1 : active raid1 sda2[1]
120649728 blocks super 1.2 [2/1] [_U]
bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

Volume md1

Reconstruction du RAID sur volume md1 :

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

Vérification (ici la reconstruction est en cours) :

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[2] sda1[1]
408576 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk

md1 : active raid1 sdb2[2] sda2[1]
120649728 blocks super 1.2 [2/1] [_U]
[>....................] recovery = 0.3% (405760/120649728) finish=9.8min speed=202880K/sec
bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

Problèmes rencontrés

Device resource busy

Si un message d’erreur de type device resource busy apparait :

# lsblkid
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 115.5G 0 disk
├─sda1 8:1 0 400M 0 part
│ └─md0 9:0 0 399.7M 0 raid1 /boot
└─sda2 8:2 0 115.1G 0 part
└─md1 9:1 0 115.1G 0 raid1
├─rootvg-rootvol 253:0 0 112.1G 0 lvm /
└─rootvg-swapvol 253:1 0 3G 0 lvm [SWAP]
sdb 8:16 0 231G 0 disk
├─sdb1 8:17 0 400M 0 part
├─sdb2 8:18 0 115.1G 0 part
└─2.5__SATA_SSD_3MG2-P_BCA66642400424242 253:2 0 231G 0 mpath
├─2.5__SATA_SSD_3MG2-P_BCA66642400424242p1 253:3 0 400M 0 part
└─2.5__SATA_SSD_3MG2-P_BCA66642400424242p2 253:4 0 115.1G 0 part

Supprimer les anciennes signatures du disque :

# dmsetup remove 2.5__SATA_SSD_3MG2-P_BCA66642400424242p1
# dmsetup remove 2.5__SATA_SSD_3MG2-P_BCA66642400424242p2
# dmsetup remove 2.5__SATA_SSD_3MG2-P_BCA66642400424242

Utilisation de smartd

Si vous utilisez smartd il est possible qu’il faille le reconfigurer :

Trouver l’ID du disque :

# ll /dev/disk/by-id/

Mettre à jour la configuration :

Vi /etc/smartmontools/smartd.conf

Relancer le service smartd.

Documentation

https://www.ionos.fr/assistance/serveurs-et-cloud/serveur-dedie-pour-les-serveurs-achetes-avant-le-28102018/rescue-and-recovery/verifier-surveiller-letat-du-raid-logiciel-linux/
https://linux.die.net/man/8/udevadm
https://linux.die.net/man/8/mdadm
https://linux.die.net/man/8/badblocks

Remerciements

Quentin E.

Merci à Quentin E.


> Partager <