Base de connaissances · Serveurs dédiés et VPS
Gestion du RAID logiciel sous Linux (partie II) : récupération après une panne de disque
Dernière mise à jour : 2019-02-03
Gestion du RAID logiciel sous Linux (partie II) : récupération après une panne de disque
|
Cet article vous explique comment récupérer un RAID logiciel Linux en cas de panne d'un seul disque. Pour les exemples suivants, nous partons des hypothèses ci-dessous :
Grappe RAID en bon état cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 511988 blocks super 1.0 [2/2] [UU] md1 : active raid1 sdb2[1] sda2[0] 976247676 blocks super 1.1 [2/2] [UU] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Notez que les deux grappes (md0, md1) sont :
cat /proc/partitions major minor #blocks name 8 0 976762584 sda 8 1 512000 sda1 8 2 976248832 sda2 8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0
Notez que les conditions suivantes doivent être remplies :
Grappe RAID dégradée
Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0] 976247676 blocks super 1.1 [2/2] [UU] bitmap: 0/8 pages [0KB], 65536KB chunk unused devices: <none>
Remarque : une ou plusieurs grappes RAID afficheront des membres manquants : [2/1] [_U]
Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0](F) 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none> En cas de défaillance grave, ou si un disque ne s'initialise pas au redémarrage du système, le disque lui-même peut disparaître, comme le montrent les exemples ci-dessous.
Personalities : [raid1] md0 : active raid1 sdb1[1] 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Disque manquant : /proc/partitions major minor #blocks name 8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0
Retrait d'un disque défaillant Manually marking devices as ‘failed’ Vous ne devez marquer manuellement un périphérique comme défaillant que si l'une de ses grappes RAID est dans un état dégradé à la suite d'un délai d'attente dépassé ou d'une erreur de lecture sur l'une des partitions. Le disque physique lui-même doit toujours fonctionner correctement.
ATTENTION : veillez à ne déclarer défaillantes que les partitions appartenant au disque défaillant concerné (c'est-à-dire sda1/sda2 pour sda et sdb1/sdb2 pour sdb). Définissez sda1 et sda1 comme faulty [root@freshinstall ~]# mdadm --manage /dev/md0 --fail /dev/sda1 mdadm: set /dev/sda1 faulty in /dev/md0
[root@freshinstall ~]# mdadm --manage /dev/md1 --fail /dev/sda2 mdadm: set /dev/sda2 faulty in /dev/md1
Dans cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0](F) 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] sda2[0](F) 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
Retrait des périphériques défaillants de la grappe Avant de remplacer un disque, les membres défaillants doivent être retirés des grappes RAID correspondantes :
[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1 mdadm: hot removed /dev/sda1 from /dev/md0
[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2 mdadm: hot removed /dev/sda2 from /dev/md1
[root@freshinstall ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] 511988 blocks super 1.0 [2/1] [_U] md1 : active raid1 sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none>
[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda1 [root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2
dd if=/dev/zero of=/dev/sda bs=1M ATTENTION : cette opération efface toutes les données du périphérique indiqué par l'argument « of= » (/dev/sda dans l'exemple ci-dessus). Remarque : cette opération peut prendre un certain temps.
Ajout d'un disque de remplacement Le disque de remplacement doit avoir exactement la même taille que le disque défaillant, ou une taille supérieure. Une fois le disque de remplacement inséré dans le système, le noyau consignera un message similaire à celui-ci : dmesg | tail sd 0:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB) sd 0:0:0:0: [sdc] 4096-byte physical blocks sd 0:0:0:0: [sdc] Write Protect is off sd 0:0:0:0: [sdc] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
cat /proc/partitions major minor #blocks name
8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0 8 0 976762584 sdc Vérifiez l'état SMART du nouveau disque : smartctl -H /dev/sdc smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED
Partitionnement Pour commencer le partitionnement, vérifiez d'abord que le nouveau disque n'a pas été monté automatiquement : mount | grep sdc Aucune sortie ne devrait s'afficher. Si quelque chose apparaît, les partitions correspondantes doivent être démontées manuellement en exécutant la commande suivante : umount <partition> Le système initial utilisant deux disques en miroir de taille strictement identique, nous pouvons utiliser le disque opérationnel comme modèle pour le partitionnement : sfdisk -d -uS /dev/sdb | sfdisk -L -uS /dev/sdc Checking that no-one is using this disk right now ... OK
Disk /dev/sdc: 121601 cylinders, 255 heads, 63 sectors/track Old situation: Unités = secteurs de 512 octets, à partir de 0
Device Boot Start End #sectors Id System /dev/sdc1 * 2048 1026047 1024000 fd Linux raid autodetect /dev/sdc2 1026048 1953523711 1952497664 fd Linux raid autodetect /dev/sdc3 0 - 0 0 Empty /dev/sdc4 0 - 0 0 Empty Nouvelle situation : Unités = secteurs de 512 octets, à partir de 0
Device Boot Start End #sectors Id System /dev/sdc1 * 2048 1026047 1024000 fd Linux raid autodetect /dev/sdc2 1026048 1953523711 1952497664 fd Linux raid autodetect /dev/sdc3 0 - 0 0 Empty /dev/sdc4 0 - 0 0 Empty Avertissement : la partition 1 ne se termine pas à une limite de cylindre Avertissement : la partition 2 ne commence pas à une limite de cylindre Avertissement : la partition 2 ne se termine pas à une limite de cylindre La nouvelle table de partitions a été écrite avec succès
Relecture de la table de partitions en cours ...
Si vous avez créé ou modifié une partition DOS, par exemple /dev/foo7, utilisez dd(1) pour mettre à zéro les 512 premiers octets : dd if=/dev/zero of=/dev/foo7 bs=512 count=1 (Voir fdisk(8).)
Ensuite, vous devriez pouvoir voir votre disque nouvellement partitionné : cat /proc/partitions major minor #blocks name
8 16 976762584 sdb 8 17 512000 sdb1 8 18 976248832 sdb2 9 1 976247676 md1 253 0 2097152 dm-0 253 1 2097152 dm-1 9 0 511988 md0 8 0 976762584 sdc 8 1 512000 sdc1 8 2 976248832 sdc2
Ajout de nouveaux périphériques à la grappe RAID [root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1 mdadm: added /dev/sdc1
[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2 mdadm: added /dev/sdc2
[root@freshinstall ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[2] sdb1[1] 511988 blocks super 1.0 [2/2] [UU] md1 : active raid1 sdc2[2] sdb2[1] 976247676 blocks super 1.1 [2/1] [_U] [>....................] recovery = 0.1% (1618176/976247676) finish=160.6min speed=101136K/sec bitmap: 1/8 pages [4KB], 65536KB chunk unused devices: <none> Remarque : les deux grappes comptent chacune deux membres actifs et md1 est en cours de reconstruction.
Réinstallation du chargeur d'amorçage Une fois le disque défaillant remplacé, réinstallez GRUB dans le MBR du nouveau disque afin de vous assurer que vous pouvez démarrer à partir de celui-ci : grub-install /dev/sdc Installation terminée. Aucune erreur signalée. Voici le contenu de la table de correspondance des périphériques /boot/grub/device.map. Vérifiez si elle est correcte. Si l'une des lignes est incorrecte, corrigez-la et relancez le script `grub-install'.
# this device map was generated by anaconda (hd0) /dev/sdc (hd1) /dev/sdb
|
Tell us what you need
Compare available plans or describe your workload so we can discuss a suitable starting point.