ALL SYSTEMS OPERATIONALUPTIME 99.97%FLEET 18/18IN-MUM · US-LAX · EU-FSN EST. 2003 · +91 11 4998 4038

SAVOIRS · SERVEURS DÉDICÉS ET VPS

Gestion du logiciel Linux RAID (Partie II): Récupération après une défaillance de disque

Dernière mise à jour le 2019-02-03

Gestion du logiciel Linux RAID (Partie II): Récupération après une défaillance de disque

Cet article vous montre comment récupérer le logiciel Linux RAID en cas d'une seule défaillance de disque. Pour les exemples suivants, nous utiliserons les hypothèses suivantes :

  • Vous utilisez la version la plus récente de Linux (CentOS 5+).
  • Vous avez deux (2) DHD (sda, sdb) connectés au contrôleur SAS/SATA, qui est not Linux Hardware RAID.
  • Vous avez le logiciel Linux RAID (MD).
  • Vous avez deux (2) tableaux RAID1, à savoir :
    • md0 (sda1+sdb1): /boot
    • md1 (sda2+sdb2): LVM
  • Un de vos tableaux est dégradé mais opérationnel (échec d'un seul membre seulement).
  • Vous avez un accès complet à la racine.


Faire un bilan de santé


Vérifiez l'état de santé de vos disques. Vous devriez voir les résultats suivants selon votre statut de disque &rsquo:

Une exposition saine

cat /proc/mdstat

Personnalités : [raid1]

md0 : raid actif1 sdb1[1] sda1[0]

      511988 blocks super 1.0 [2/2] [UU]

md1 : raid actif1 sdb2[1] sda2[0]

      976247676 blocks super 1.1 [2/2] [UU]

      bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

&nbsp;

Notez que les deux tableaux (md0, md1) sont :

    1. Activité
    2. Contient deux membres: sdb1[1], sda1[0]
    3. Deux membres sur deux sont en hausse : [2/2] [UU]

&nbsp;

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

&nbsp;

Notez que les éléments suivants doivent être exacts :

    1. Les deux disques physiques sont présents : sda, sdb
    2. Les deux tableaux sont présents : md0, md1
    3. Les deux disques sont de même taille : sda = sdb = 976762584
    4. Les deux disques sont partitionnés de la même manière :
    • sda1 = sdb1 = 512000
    • sda2 = sdb2 = 976248832

&nbsp;

Arrayage dégradé


Défaillance de la partition unique (sda1)

Personnalités : [raid1]

md0 : raid actif1 sdb1[1] sda1[0](F)

     511988 blocks super 1.0 [2/1] [_U]

md1 : raid actif1 sdb2[1] sda2[0]

     976247676 blocks super 1.1 [2/2] [UU]

     bitmap: 0/8 pages [0KB], 65536KB chunk

Dispositifs inutilisés: <none>

&nbsp;

Note : Un ou plusieurs tableaux RAID afficheront les membres manquants : [2/1] [ U]


Défaillance du disque entier (sda)

Personnalités : [raid1]

md0 : raid actif1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid actif1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

En cas de défaillance grave ou si un disque ne parvient pas à initialiser le redémarrage du système, le disque lui-même peut être manquant comme le montrent les exemples ci-dessous.


Disque manquant : &nbsp;
/proc/mdstat

Personnalités : [raid1]

md0 : raid actif1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid actif1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

&nbsp;

Disque manquant : &nbsp;/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

&nbsp;

Suppression d'un disque défectueux

Les dispositifs de marquage manuel comme &lsquo; échoué&rsquo;

Vous devez marquer manuellement un périphérique comme défectueux seulement si l'un de ses tableaux est dans un état dégradé en raison d'une erreur de temps ou de lecture dans l'une des partitions. Le disque physique lui-même devrait encore fonctionner bien.

    • Jetez un coup d'oeil à&nbsp;/proc/mdstat&nbsp; et assurez-vous que toutes les partitions du disque échoué sont définies comme &lsquo;faulty. &rsquo;

ATTENTION : Assurez-vous que vous échouez seulement les partitions qui appartiennent au disque en échec correspondant (c.-à-d.&nbsp;SDA1/SDA2Pour &nbsp; pour &nbsp;SDA and Sdb1/sdb2Pour &nbsp; pour &nbsp;Sdb).

Set SDA1 and SDA1 as défectueux

[root@freshinstall ~]# mdadm --manage /dev/md0 --fail /dev/sda1

mdamm: ensemble /dev/sda1 défectueux dans /dev/md0

&nbsp;

[root@freshinstall ~]# mdadm --manage /dev/md1 --fail /dev/sda2

mdamm: ensemble /dev/sda2 défectueux dans /dev/md1

&nbsp;

    • Confirmer que les deux partitions du même disque sont marquées comme ayant échoué.

In cat /proc/mdstat

Personnalités : [raid1]

md0 : raid actif1 sdb1[1] sda1[0](F)

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid actif1 sdb2[1] sda2[0](F)

      976247676 blocks super 1.1 [2/1] [_U]

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

&nbsp;

Suppression des périphériques défectueux du tableau

Avant qu'un disque ne puisse être remplacé, les membres échoués doivent être supprimés de leurs tableaux correspondants:

    • Supprimer les membres échoués :

[root@freshinstall ~]# mdadm --manage /dev/md0 --remove /dev/sda1

mdamm: chaud enlevé /dev/sda1 de /dev/md0

&nbsp;

[root@freshinstall ~]# mdadm --manage /dev/md1 --remove /dev/sda2

mdamm: chaud enlevé /dev/sda2 de /dev/md1

&nbsp;

[root@freshinstall ~]# cat /proc/mdstat

Personnalités : [raid1]

md0 : raid actif1 sdb1[1]

      511988 blocks super 1.0 [2/1] [_U]

md1 : raid actif1 sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

&nbsp;

    • Assurez-vous d'effacer les superblocs RAID si vous prévoyez d'ajouter les mêmes partitions au tableau ou si vous voulez réutiliser les partitions pour autre chose :

&nbsp;[root@freshinstall ~]# mdamm --misc --zero-superblock /dev/sda1

[root@freshinstall ~]# mdadm --misc --zero-superblock /dev/sda2

&nbsp;

    • Vous pouvez également choisir d'effacer toutes les informations sur le disque avant de les jeter , en supposant que le disque physique fonctionne toujours:

dd si =/dev/zéro de =/dev/sda bs=1M

ATTENTION: Ce processus efface toutes les données dans le périphérique, étant donné l'argument "of" (/dev/sda dans l'exemple ci-dessus).

Remarque: Ce processus peut prendre un certain temps.

&nbsp;

Ajout d'un disque de remplacement

Le disque de remplacement doit être exactement de la même taille ou plus grand que le disque échoué. Une fois le disque de remplacement inséré dans le système, le noyau enregistrera quelque chose comme ceci:

Dmesg , queue

sd 0:0:0:0: [sdc] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)

sd 0:0:0:0: [sdc] Blocs physiques de 4096 octets

sd 0:0:0:0: [sdc] Write Protect est désactivé

Sd 0:0:0:0: [sdc] Sens du mode: 00 3a 00 00

sd 0:0:0:0: [sdc] Ecrire cache: activé, lire cache: activé, ne supporte pas DPO ou FUA


Confirmer si le système voit le nouveau lecteur (SDC in this case):

cat /proc/partitions

major   minor    #blocks  name

&nbsp;

   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 :

-H /dev/sdc

smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)

Droit d'auteur (C) 2002-10 par Bruce Allen, http://smartmontools.sourceforge.net

&nbsp;

=== DÉBUT DE LA SECTION DE DONNÉES SMART

Résultat du test d'auto-évaluation globale de la santé SMART: PASSÉ

&nbsp;

Partitionnement

Pour commencer le fractionnement, confirmez d'abord que le nouveau disque n'a pas été monté automatiquement :

  mount | grep sdc

Il ne devrait pas y avoir de sortie. Si quelque chose s'affiche, les partitions correspondantes doivent être démontées manuellement en appelant :

umount <partition>

Puisque le système initial utilisait deux disques miroirs de la même taille, nous pouvons utiliser le disque opérationnel comme modèle pour la partition :

-d -uS /dev/sdb-Sfdisk -L -uS /dev/sdc

Vérifier que personne n'utilise ce disque en ce moment ...

OK

&nbsp;

Disque /dev/sdc: 121601 cylindres, 255 têtes, 63 secteurs/piste

Vieille situation:

Unités = secteurs de 512 octets, en comptant à partir de 0

&nbsp;

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, en comptant à partir de 0

&nbsp;

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 cloison 1 ne se termine pas à la limite d'un cylindre

Avertissement : la cloison 2 ne démarre pas à la limite d'un cylindre

Avertissement: la cloison 2 ne se termine pas à la limite d'un cylindre

Écrit avec succès la nouvelle table de partition

&nbsp;

Relire la table de partitions...

&nbsp;

Si vous avez créé ou modifié une partition DOS, /dev/foo7, disons, utilisez dd(1)

à zéro les 512 premiers octets:&nbsp; dd if=/dev/zero of=/dev/foo7 bs=512 count=1

(Voir fdisk(8).)

&nbsp;

Après cela, vous devriez être en mesure de voir votre disque nouvellement partitionné:

cat /proc/partitions

major   minor   #blocks  name

&nbsp;

   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

&nbsp;

Ajout de nouveaux périphériques au tableau

&nbsp;[root@freshinstall ~]# mdadm --manage /dev/md0 --add /dev/sdc1

mdamm: ajouté /dev/sdc1

&nbsp;

[root@freshinstall ~]# mdadm --manage /dev/md1 --add /dev/sdc2

mdamm: ajouté /dev/sdc2

&nbsp;

[root@freshinstall ~]# cat /proc/mdstat

Personnalités : [raid1]

md0 : raid actif1 sdc1[2] sdb1[1]

      511988 blocks super 1.0 [2/2] [UU]

md1 : raid actif1 sdc2[2] sdb2[1]

      976247676 blocks super 1.1 [2/1] [_U]

      [>....................]  recovery =  0.1% (1618176/976247676) finish=160.6min speed=101136K/sec

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bitmap: 1/8 pages [4KB], 65536Ko

Dispositifs inutilisés: <none>

Note : Les deux tableaux ont deux membres actifs et md1 est activement en reconstruction.

&nbsp;

Réinstallation du chargeur de démarrage

Une fois le lecteur échoué remplacé, réinstallez GRUB dans le MBR du nouveau disque pour vous assurer que vous pouvez démarrer à partir de celui-ci:

installateur de grub /dev/sdc

Installation terminée. Aucune erreur signalée.

C'est le contenu de la carte de périphérique /boot/grub/device.map.

Vérifiez si c'est correct ou non. Si l'une des lignes est incorrecte,

Corriger et ré-exécuter le script `grub-install'.

&nbsp;

# cette carte de l'appareil a été générée par anaconda

(hd0)&nbsp;&nbsp;&nbsp;&nbsp; /dev/sdc

(hd1)&nbsp;&nbsp;&nbsp; &nbsp;/dev/sdb

&nbsp;

← Tous les articles de la base de connaissances

Dites-nous ce qui doit rester debout.

A short conversation with an engineer. No quote-bot, no callback queue. We'll tell you honestly if we're not the right fit.