10. Simuler une panne du tableau RAID 1

L'objectif de cette partie est de simuler la perte d'une unité de disque du tableau RAID 1 et de provoquer la reconstruction de ce tableau depuis l'unité de disque réseau iSCSI. On illustre ainsi le mécanisme de tolérance aux pannes.

Q56.

Comment provoquer une panne de disque côté Initiator ?

  1. Éteignez de la machine virtuelle qui joue le rôle Initiator.

    etu@initiator:~$ sudo poweroff
  2. Renommez le fichier image du disque supplémentaire de la machine virtuelle Initiator depuis l'hyperviseur.

    mv initiator-disk.qcow2 initiator-disk.qcow2.orig
  3. Redémarrez les deux machines virtuelles Target et Initiator.

    Sans changement dans le fichier de déclaration YAML, le redémarrage de la machine virtuelle Initiator provoque la création d'un nouveau fichier disque vierge. On simule ainsi le remplacement d'un disque défectueux.

une fois les deux systèmes redémarrés, procédez aux vérifications suivantes :

  • Vérifiez que la configuration du rôle Target est complète.

    sudo targetcli ls /
    o- / ................................................................................................ [...]
      o- backstores ..................................................................................... [...]
      | o- block ......................................................................... [Storage Objects: 1]
      | | o- blockdev0 ......... [/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1 (32.0GiB) write-thru activated]
      | |   o- alua .......................................................................... [ALUA Groups: 1]
      | |     o- default_tg_pt_gp .............................................. [ALUA state: Active/optimized]
      | o- fileio ........................................................................ [Storage Objects: 0]
      | o- pscsi ......................................................................... [Storage Objects: 0]
      | o- ramdisk ....................................................................... [Storage Objects: 0]
      o- iscsi ................................................................................... [Targets: 1]
      | o- iqn.2003-01.org.linux-iscsi.target.x8664:sn.632b32f5c120 ................................. [TPGs: 1]
      |   o- tpg1 ................................................................. [no-gen-acls, auth per-acl]
      |     o- acls ................................................................................. [ACLs: 1]
      |     | o- iqn.1993-08.org.debian:01:c7fae7cdf252 ......................... [mutual auth, Mapped LUNs: 1]
      |     |   o- mapped_lun0 .................................................... [lun0 block/blockdev0 (rw)]
      |     o- luns ................................................................................. [LUNs: 1]
      |     | o- lun0 .... [block/blockdev0 (/dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1) (default_tg_pt_gp)]
      |     o- portals ........................................................................... [Portals: 1]
      |       o- [::0]:3260 .............................................................................. [OK]
      o- loopback ................................................................................ [Targets: 0]
      o- vhost ................................................................................... [Targets: 0]
      o- xen-pvscsi .............................................................................. [Targets: 0]
  • Vérifiez la présence du disque iSCSI sda dans la liste des périphériques mode bloc sur le système Initiator.

    lsblk | grep sda
    sda                 8:0    0    32G  0 disk

    Relancez la session iSCSI si le disque n'est pas présent dans la liste.

    sudo iscsiadm -m node -U all
    sudo iscsiadm -m node \
        -T iqn.2003-01.org.linux-iscsi.target.x8664:sn.632b32f5c120 \
        -p [2001:678:3fc:171:baad:caff:fefe:5]:3260 \
        --login
    sudo iscsiadm -m node session
    [2001:678:3fc:171:baad:caff:fefe:5]:3260,1 iqn.2003-01.org.linux-iscsi.target.x8664:sn.632b32f5c120

    Le résultat de la commande lsblk doit maintenant faire apparaître le disque iSCSI sda.

  • Vérifiez que le montage du système de fichiers est effectif.

    mount | grep mnt
    /dev/mapper/lab--vg-lvol0 on /mnt/lvol0 type ext4 (rw,relatime,stripe=32)

    Si ce n'est pas la cas, relancez le montage de toutes entrées du fichier /etc/fstab.

    sudo mount -a
  • Affichez la liste des fichiers du montage associé au tableau RAID 1.

    ls /mnt/lvol0/etu-files/

Q57.

Comment identifier la panne sur le tableau RAID 1 ?

Même si le système de fichiers est accessible grâce à la tolérance aux pannes fournie par le mirroring RAID 1, le tableau est en défaut.

Relevez les différences entre les résultats de la commande lsblk obtenus dans la Section 8, « Créer un tableau RAID 1 » et ceux obtenus avec la panne.

Recherchez, toujours dans la Section 8, « Créer un tableau RAID 1 », la commande d'affichage de l'état du tableau RAID 1.

Lancez la commande lsblk et relevez l'absence de référence au périphérique RAID md0 pour le second disque nvme1n1.

lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                 8:0    0    32G  0 disk
└─md0               9:0    0    32G  0 raid1
  └─lab--vg-lvol0 252:0    0    16G  0 lvm   /mnt/lvol0
sr0                11:0    1  1024M  0 rom
vda               254:0    0   366K  0 disk
nvme1n1           259:0    0    32G  0 disk
nvme0n1           259:1    0   120G  0 disk
├─nvme0n1p1       259:2    0     3M  0 part
├─nvme0n1p2       259:3    0   124M  0 part  /boot/efi
└─nvme0n1p3       259:4    0 119,9G  0 part  /

Affichez l'état du tableau RAID 1.

cat /proc/mdstat
Personalities : [raid0] [raid1] [raid4] [raid5] [raid6] [raid10]
md0 : active raid1 sda[0]
      33520640 blocks super 1.2 [2/1] [U_]
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

Les marqueurs [2/1] [U_] confirment qu'un des deux disques est absent. La panne est caractérisée.

Q58.

Comment réparer le tableau RAID 1 et revenir à un fonctionnement nominal ?

Recherchez dans les options de la commande mdadm, celle qui affiche l'état du second disque du tableau.

Ajoutez le « nouveau » second disque pour revenir à l'état nominal.

Affichez l'état détaillé du tableau RAID 1.

sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Aug 31 08:48:01 2025
        Raid Level : raid1
        Array Size : 33520640 (31.97 GiB 34.33 GB)
     Used Dev Size : 33520640 (31.97 GiB 34.33 GB)
      Raid Devices : 2
     Total Devices : 1
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Sep  1 08:56:50 2025
             State : clean, degraded
    Active Devices : 1
   Working Devices : 1
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : initiator:0  (local to host initiator)
              UUID : b194fed7:429ef21c:1e3a9890:d2963f45
            Events : 45

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       -       0        0        1      removed

Reprenez la commande d'initialisation du second disque avant de l'ajouter au tableau.

sudo mdadm --zero-superblock /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1
mdadm: Unrecognised md component device - /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1

Le résultat montre que ce disque ne faisait déjà partie d'un tableau RAID antérieurement et que l'on peut l'ajouter sans risque de compromission des données.

Ajoutez le second disque au tableau, toujours avec la commande mdadm.

sudo mdadm --manage /dev/md0 --add /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1
mdadm: added /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_feedcafe1

Q59.

Comment vérifier que le tableau RAID 1 est reconstruit correctement ?

Reprenez les commandes de la question précédente et relevez les différences.

Affichez l'état de la reconstruction en cours. Attention ! La reconstruction prend très peu de temps compte tenu du volume de données très faible stocké sur le tableau.

cat /proc/mdstat
Personalities : [raid0] [raid1] [raid4] [raid5] [raid6] [raid10]
md0 : active raid1 nvme1n1[2] sda[0]
      33520640 blocks super 1.2 [2/1] [U_]
      [=>...................]  recovery =  5.3% (1800832/33520640) finish=2.3min speed=225104K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

Affichez à nouveau les détails du tableau avec la commande mdadm.

sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Aug 31 08:48:01 2025
        Raid Level : raid1
        Array Size : 33520640 (31.97 GiB 34.33 GB)
     Used Dev Size : 33520640 (31.97 GiB 34.33 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Sep  1 11:25:50 2025
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : initiator:0  (local to host initiator)
              UUID : b194fed7:429ef21c:1e3a9890:d2963f45
            Events : 81

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       2     259        0        1      active sync   /dev/nvme1n1

L'indicateur d'état clean montre que l'on a retrouvé un fonctionnement nominal du mirroring RAID 1.