1. Introduction

Une panne de disque vous expose non seulement à une perte de données, mais aussi à une immobilisation pendant le temps du remplacement du disque, de la réinstallation et reconfiguration du système, et de la restauration des données.

Cette immobilisation peut être évitée en ayant un système RAID permettant la redondance.

Le RAID vous protégera d'un dysfonctionnement matériel, mais pas d'un plantage du système de fichiers ou de l'effacement de données. Cela ne remplace en aucun cas une sauvegarde.

Les tests ont été faits avec les distributions Debian 7 et 8.

2. Présentation du RAID

Si vous savez ce qu'est le RAID, vous pouvez passer directement à la partie implémentation de la transformation de votre distribution en RAID logicielImplémentation.

2-1. Qu'est-ce que le RAID ?

RAID pour Redundant Array of Independant Disks (traduisible par «assemblage redondant de disques indépendants») est un système permettant d'agréger plusieurs disques en un ou plusieurs volumes (disques logiques).

Ceci permet :

  • le regroupement de plusieurs disques en un seul, de façon à les voir comme une seule entité, de taille équivalente à l'ensemble des capacités du disque (RAID 0) ;
  • la répartition de l'écriture sur plusieurs disques pour en accélérer l'accès (RAID 0) ;
  • la protection contre les pannes matérielles en copiant les données sur plusieurs disques (RAID 1, 5,6).

2-1-1. Les niveaux de RAID

RAID 0 : (Stripping)
Image non disponible

Les blocs de données sont répartis alternativement sur les deux disques.

RAID 1 : (Mirroring) :
Image non disponible

Les données sont copiées à l'identique sur les deux disques au moment de l'écriture. Pour un volume de 1 To, deux disques de 1 To sont nécessaires. Un seul disque est vu au niveau système.
En cas de panne d'un des disques, le volume reste opérationnel. Une fois le disque défectueux remplacé, les données sont automatiquement synchronisées.

RAID 2 :

Image non disponible

Volume agrégé par bande à parité. Ceci cumule un volume RAID 0 avec un disque supplémentaire à parité utilisant un code ECC et permettant de reconstituer les données en cas de perte d'un disque.
Ce code ECC est maintenant directement intégré dans les contrôleurs de disques, rendant ce niveau de RAID obsolète.
On peut le considérer comme l'ancêtre du RAID 5.

RAID 3-4 :
Image non disponible

Les RAID 3 et 4 sont également obsolètes. Ils supportent plus de deux disques et travaillent avec un disque de parité. Le niveau 3 travaille au niveau octet, le 4 au niveau bloc.

RAID 5  :
Image non disponible

Le RAID 5 reprend le principe de parité, mais celle-ci est répartie sur tous les disques.
Si vous avez trois disques de 1 To, vous aurez un volume disponible de 2 To. Avec quatre disques, vous aurez 3 To, etc.
Votre volume survivra à la perte de 1 disque.

RAID 6 :
Image non disponible

Le RAID 6 est une évolution du RAID 5. Celui-ci va utiliser kitxmlcodeinlinelatexdvpNfinkitxmlcodeinlinelatexdvp informations redondantes, votre volume pouvant donc survivre à la panne simultanée de kitxmlcodeinlinelatexdvpNfinkitxmlcodeinlinelatexdvp disques. Ce type de RAID est peu répandu de par son coût aussi bien financier qu'en ressources (les formules de calcul de redondances étant complexes)

Autres types de RAID :

Ces types de RAID sont peu usités.

RAID 01 :
Image non disponible

Ce type de RAID va encapsuler deux grappes RAID 0 dans une grappe RAID 1
Il nécessite 4 disques au minimum et permet un mirroring rapide.

RAID 10 :
Image non disponible

Ce type de RAID va encapsuler deux grappes RAID 1 dans une grappe RAID 0.Il nécessite 4 disques au minimum.

Dans la pratique, vous ne devriez rencontrer que les niveaux RAID 0,1,5.

Un disque de secours (disque de « spare ») peut être réservé pour un volume RAID. En cas de défaillance, ce disque sera automatiquement utilisé par le RAID pour remplacer le disque défectueux et fera une resynchronisation automatique.

2-2. RAID matériel vs RAID logiciel

Le RAID matériel se présente sous forme de carte d'extension installée dans la machine avec laquelle les disques vont être connectés. Les disques connectés à la carte RAID seront gérés par celle-ci et non plus par le BIOS/UEFI. Vous aurez besoin d'un pilote pour que les volumes RAID soient accessibles à votre système d'exploitation. Les cartes RAID comportent un cache pour accélérer les accès. Le contenu des disques ne sera en général pas accessible sans les brancher sur la carte RAID. Mais brancher ces disques sur une carte RAID d'un autre constructeur ne vous permettra pas forcément l'accès aux données.

Le RAID logiciel est plus souple, vous pourrez accéder au contenu de celui-ci depuis n'importe quel ordinateur. Étant logiciel, celui-ci consomme davantage de ressources et sera donc plus lent qu'un RAID matériel.

3. Implémentation

Avant de commencer, notez bien qu'un système RAID va vous protéger d'une défaillance matérielle, pas d'un problème système tel l'effacement de données, un virus, un plantage de système de fichiers. Le RAID ne remplace pas une sauvegarde.

Dans notre exemple, nous basculerons en RAID 1 logiciel, mais le principe est applicable à un autre niveau de RAID. Nous transférerons le contenu de notre système vers un volume, qu'il soit RAID 1 ou 5,6.

Une fois le ou les disques installés, nous commencerons par installer le gestionnaire du RAID logiciel de Linux : mdadm.

Nous pourrons ensuite configurer le fichier /etc/mdadm/mdadm.conf pour paramétrer l'adresse mail d'alerte en cas de dysfonctionnement.

3-1. Copie de la table de partitions

L'étape suivante sera la recopie de la table de partition vers notre second disque. Pour ceci nous utiliserons sfdisk dans le cas d'un partitionnement MBR et sgdisk en cas de partitionnement GPT dans le cadre de l'utilisation de l'UEFI.

sfdisk -l affichera le type de partitionnement :

 
Sélectionnez
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : sectors of 1 * 512 = 512 octetsdf
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 455B9ECC-F7E9-4751-8215-6BB3D95B132F

Périphérique    Start      Fin Secteurs  Size Type
/dev/sda1        2048  1050623  1048576  512M EFI System
/dev/sda2     1050624 39847935 38797312 18,5G Linux filesystem
/dev/sda3    39847936 41940991  2093056 1022M Partition d`échange Linux


Disque /dev/sdb : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : sectors of 1 * 512 = 512 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 25203A7D-FF76-401A-AAC9-8780B70A34FD

3-1-1. Table de partition MBR - sfdisk

Pour sauvegarder la table de partition dans un fichier texte, tapez la commande suivante :

 
Sélectionnez
sfdisk -d /dev/sdX > [nom de fichier]

Il aurait été possible d'utiliser l'option plus explicite -dump, ayant la même signification que -d.

Pour la copier sur le nouveau disque :

 
Sélectionnez
sfdisk /dev/sdY < [nom de fichier]

X et Y représentant respectivement les disques source et destination.

3-1-2. Table de partition UEFI - sgdisk

Pour sauvegarder la table de partition dans un fichier texte, tapez la commande suivante :

 
Sélectionnez
sgdisk --backup=[nom du fichier] /dev/sdX

Pour la copier sur le nouveau disque :

 
Sélectionnez
sgdisk --load-backup=[nom du fichier] /dev/sdY

Ci-dessus, il faut remplacer ce qui est entre crochets par le nom de fichier que vous souhaitez.

Pour changer l'UUID de la table de partition GPT :

 
Sélectionnez
sgdisk -G /dev/sdY

L'option à passer à sgdisk est -G et non pas -g, -g servant à convertir un disque MBR en GPT.

Il aurait été possible d'utiliser l'option --randomize-guids, plus explicite que -G.

Résultat :

 
Sélectionnez
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : sectors of 1 * 512 = 512 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 455B9ECC-F7E9-4751-8215-6BB3D95B132F

Périphérique    Start      Fin Secteurs  Size Type
/dev/sda1        2048  1050623  1048576  512M EFI System
/dev/sda2     1050624 39847935 38797312 18,5G Linux filesystem
/dev/sda3    39847936 41940991  2093056 1022M Partition d`échange Linux


Disque /dev/sdb : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : sectors of 1 * 512 = 512 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5D025B85-6FB8-4E2C-9D9F-B32837F8A1C9

Périphérique    Start      Fin Secteurs  Size Type
/dev/sdb1        2048  1050623  1048576  512M EFI System
/dev/sdb2     1050624 39847935 38797312 18,5G Linux filesystem
/dev/sdb3    39847936 41940991  2093056 1022M Partition d'échange Linux

4. Installation du support du RAID logiciel

Pour gérer le RAID logiciel sous Linux il vous faut installer mdadm :

 
Sélectionnez
apt-get install mdadm

Une fois le paquet installé, nous allons reconfigurer mdadm pour activer le démon de surveillance :

 
Sélectionnez
dpkg-reconfigure mdadm

Nous aurons une première proposition de vérification de la redondance à intervalle régulier :

Image non disponible

Nous aurons ensuite l'écran proposant l'activation du démon :

Image non disponible

Nous renseignerons également l'adresse mail sur laquelle envoyer les notifications de défaillance (le système doit bien entendu être configuré pour pouvoir envoyer des mails).

5. Bascule des points de montage en RAID

Nous allons créer un volume RAID par point de montage. Le point de montage contenant le code d'amorce aura un traitement spécifique. Le point de montage root (« / ») sera traité en dernier ou en avant-dernier si le boot est dans un point de montage dédié.

Dans notre exemple, toutes les données sont dans un unique point de montage, nous devrons donc créer un volume RAID pour le « / » et un autre pour le swap.

5-1. Affectation du type RAID à la partition

La première manipulation va consister à changer le type de partition correspondant au volume traité sur le nouveau disque, et le passer en type 0xFD « Raid Linux ».

5-1-1. En mode graphique

Ceci peut être fait en mode graphique via Gparted :

Image non disponible

Il faut cliquer sur la partition avec le bouton de droite de la souris pour accéder aux types de partitions via « gérer les drapeaux ».

Image non disponible

Image non disponible

5-1-2. En mode texte

Cela se fera via :

  • sfdisk pour les disques MBR :

     
    Sélectionnez
    sfdisk --id /dev/sdY 1 fd  # change le type de la partition 1 en 0xfd
  • sgdisk pour les disques GPT
 
Sélectionnez
sgdisk -t /dev/sdY fd

5-2. Création d'un RAID

La manipulation, à effectuer pour tous les points de montage, consiste à créer un RAID en mode dégradé, en n'incorporant qu'un seul disque. Nous allons commencer par le swap. Ceci se fait via la commande :

 
Sélectionnez
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb2 missing

/dev/md0 correspond au premier device de type RAID (md). Il nous servira à héberger le contenu de notre root, --level=1 indique le choix de RAID1, missing indique que le second volume du RAID 1 est absent. sdb2 correspondant à la partition à modifier sur notre nouveau disque.

Comme déjà expliqué, il faudra appliquer le traitement de XXX à YYY, à tous les points de montages se trouvant sur des partitions différentes.

Si votre boot grub se trouve sur la partition que vous allez migrer en RAID, il faut ajouter l'option -metadata=0.90 pour que celui-ci soit possible.

5-3. Traitement des volumes /home, /usr, etc. dans le cas de partitions distinctes

Les étapes ci-dessous seront à appliquer à chacun des volumes présents dans les différentes partitions.

5-3-1. Création du système de fichier dans le volume RAID nouvellement créé

Rien de compliqué, cela se fait comme pour n'importe quel volume :

 
Sélectionnez
mkfs.ext4 /dev/mdX

Il faut créer le même type de filesystem que l'original. Rien ne vous empêche d'en profiter pour le changer tant que vous restez cohérent dans les paramétrages.

5-3-2. Copie des données

Nous commençons par monter le filesystem nouvellement créé :

 
Sélectionnez
mount /dev/md0 /mnt

Nous utilisons ensuite rsync pour copier les données, exemple ci-dessous avec le point de montage root :

 
Sélectionnez
rsync -avAX /* --one-file-system /mnt

Si vous avez des services en fonction tels que bases de données, serveur mail, etc., il est plus que recommandé de les stopper avant la manipulation.

Les options -A et -X servent à copier les ACL et les attributs étendus.

5-3-3. Mise à jour de la configuration des points de montage

Nous modifions ensuite le fichier /etc/fstab pour que les points de montage soit remplacés par les /dev/mdX correspondants.

Nous rebootons pour vérifier que tout se passe correctement.

5-3-4. Sortie du mode RAID dégradé

Avant d'intégrer une partition d'origine dans un RAID, il vous faut être sûr que toutes les données aient été copiées. La manipulation va écraser la partition d'origine.

Nous changeons ensuite le type de la partition du disque d'origine en format RAID comme vu en 5.1.

Nous intégrons ensuite le disque d'origine à notre RAID :

 
Sélectionnez
mdadm /dev/mdX --add /dev/sdaX

Avec :

  • mdX : le volume RAID
  • /dev/sdaX : l'ancienne partition à intégrer dans le RAID

La synchronisation des volumes se déclenche dès l'ajout du disque, le temps de synchronisation sera proportionnel à la taille du volume à synchroniser. Pour connaître l'état de vos RAID, tapez :

 
Sélectionnez
cat /proc/mdstat

qui vous retournera un résultat similaire à ceci :

 
Sélectionnez
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[0]
      900544 blocks super 1.2 [2/2] [UU]

L'information essentielle étant [UU] indiquant un RAID fonctionnel. Si un disque était indisponible, nous aurions [_U] en cas de défaut sur le premier disque, et [U_] en cas de défaut sur le second.

5-4. Bascule du swap

Pour basculer le swap, nous créons le volume RAID qui lui sera affecté comme vu à l'étape 5.2.

Nous créons ensuite le swap proprement dit, dans notre cas dans le volume RAID /dev/md1 :

 
Sélectionnez
mkswap /dev/md1

Nous désactivons le swap actuel :

Nous remplaçons ensuite la ligne de swap dans le fichier /etc/fstab.

Nous redémarrons.

En cas d'utilisation de la mise en veille, il vous faudra modifier le fichier /etc/initramfs-tools/conf.d/resume en conséquence, en utilisant l'UUID de la partition.

5-4-1. Activation complète du RAID

A ce stade, notre RAID est en mode dégradé. Nous changeons le type de partition de la partition de swap d'origine en RAID, comme vu au chapitre 5.3.4.

5-5. Bascule du point de montage /

Nous traitons en dernier le point de montage root / de la même façon que pour les autres points de montage. En cas de boot séparé, nous créons le volume RAID de /boot en parallèle. Les deux RAID devront être reconstitués après un boot opérationnel en mode dégradé.

Ne pas oublier de spécifier le format de métadonnées pour le volume RAID servant à booter comme spécifié au chapitre 5.2.

Pour la copie du root via rsync, nous exclurons le contenu des dossiers /sys /proc /dev /mnt (pour ne pas faire de copie en boucle comme vu au chapitre 5.5) avec les options --exclude=/proc/* --exclude=/sys/* --exclude=/dev/* --exclude=/mnt/*.

Par précaution, nous modifions l'entrée du point de montage « / » dans /etc/fstab dans / et dans la copie /mnt/etc/fstab..

Nous allons ensuite redémarrer en changeant les options de boot depuis Grub.

5-6. Mise à jour du boot loader

A l'écran Grub, nous appuyons sur la touche « e » afin d'éditer l'entrée Grub :

Image non disponible

Nous remplaçons « set root= » en mettant md/0 au lieu de (hd0,msdos1). Nous remplaçons également l'UUID root= de la ligne linux par /dev/md0.

md/0 correspond au premier volume md, la numérotation commençant à 0.

5-7. Traitements post boot

Nous ajoutons l'ancienne partition « / » dans le volume RAID et attendons la synchronisation de celui-ci.

Dans le cas d'un volume /boot séparé, nous effectuons la même manipulation.

Dans le cas d'un boot en UEFI, chaque disque devant avoir une partition ESP, il suffit que leur contenu soit identique pour booter depuis un disque ou l'autre.

À ce stade, tous les volumes RAID sont créés. Nous mettons à jour le fichier de configuration des RAID :

 
Sélectionnez
mdadm --detail --scan >>/etc/mdadm/mdadm.conf

Nous mettons à jour l'initrd :

 
Sélectionnez
update-initramfs -u

Nous mettons à jour grub :

 
Sélectionnez
update-grub

Et nous nous assurons que grub est installé sur les deux disques (sauf pour l'UEFI) :

 
Sélectionnez
grub-install /dev/sda
grub-install /dev/sdb

Au reboot, nous avons 3 entrées, la première correspondant au boot sur le RAID, les deux autres correspondant aux entrées des deux disques.

Image non disponible

6. Ajout d'un disque de spare

Il est préférable d'installer le disque de spare lors de la création du/des RAID. Si cela n'a pas été fait, il sera toujours possible de le faire plus tard.

Ce n'est pas le disque lui-même que nous allons mettre en rechange (spare = rechange), mais des partitions. Nous copions donc la table de partitions sur le nouveau disque comme au chapitre 3.1Copie de la table de partitions.

Ajoutons ensuite une nouvelle partition au raid md0 par exemple :

 
Sélectionnez
$ mdadm /dev/md0 --add /dev/sdc1
mdadm : added /dev/sdc1

Nous voyons le résultat suivant dans le fichier /proc/mdstat :

 
Sélectionnez
Personalities : [raid1] 
md0 : active raid1 sdc1[2](S) sdb1[0] sda1[1]
      3905472 blocks [2/2] [UU]
      
md1 : active raid1 sdb2[0] sda2[2]
      7807936 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sdb3[0] sda3[2]
      976320 blocks super 1.2 [2/2] [UU]
      
md3 : active (auto-read-only) raid1 sdb4[0] sda4[2]
      8270784 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

Sur le même principe, nous ajoutons les volumes de spare pour md1, md2, et md3.

Nous voyons l'information de volume spare avec le S entre parenthèses : sdc1[2](S)

ou plus en détail avec la commande :

 
Sélectionnez
mdadm --detail /dev/md0

Nous mettons ensuite à jour la configuration de mdadm et de l'initramfs :.

Modification du fichier de configuration pour l'ajout des volumes de spare :

 
Sélectionnez
mdadm --detail --scan >>/etc/mdadm/mdadm.conf

Il faut ensuite éditer le fichier, et supprimer les entrées originales faisant doublon.

Mise à jour de l'initramfs :

 
Sélectionnez
update-initrams -u

7. Simulation de panne

À des fins de tests, nous déconnectons le disque d'origine (/dev/sda).

Au boot, nous voyons un message indiquant que les RAID sont en mode dégradé.

7-1. En cas de non démarrage

En cas de difficultés, vous vous trouverez certainement dans la console BusyBox :

Image non disponible

Nous jetons un coup d'œil sur /proc/mdstat :

Image non disponible

Nous voyons que /dev/md0, notre RAID contenant notre root et qui devrait booter, est marqué comme inactif.

Nous tentons de l'assembler :

 
Sélectionnez
$ mdadm -assemble /dev/md0

Nous avons en réponse :

 
Sélectionnez
mdadm : /dev/md0 is already in use

Nous réessayons après arrêt de /dev/md0

 
Sélectionnez
$ mdadm -stop /dev/md0
mdadm: stopped /dev/md0
$ mdadm -assemble /dev/md0
mdadm: /devmd0 assembled from 0 drives and one spare - not enough to start the array.

Toujours sans résultat.

L'étape suivante est d'essayer de forcer le montage avec l'option --force de mdadm.

En cas de non fonctionnement, nous effectuons une tentative depuis un live CD avec les mêmes commandes (après installation de mdadm si non présent dans le live) :

 
Sélectionnez
$ mdadm --examine -scan
$ mdadm --assemble /dev/md0
mdadm: /dev/md0 has been started with 1 drive (out of 2)and 1 spare.

Un montage du volume avec mount /dev/md0 /mnt démontre que le volume raid est accessible.

Nous essayons de redémarrer.

Eurêka, ça redémarre. Nous voyons que md0 a redémarré avec 2 disques.

Image non disponible

En éditant le fichier /proc/mdstat, nous voyons que md0 est synchrone, et que md1 est en cours de resynchronisation :

 
Sélectionnez
Personalities : [raid1] 
md0 : active raid1 sda1[0] sdb1[1]
      4881344 blocks [2/2] [UU]
      
md1 : active raid1 sda2[0] sdb2[3]
      4878272 blocks super 1.2 [2/1] [U_]
      [============>........]  recovery = 60.4% (2949504/4878272) finish=0.7min speed=41902K/sec
      
md2 : active raid1 sda3[0] sdb3[3]
      4878272 blocks super 1.2 [2/1] [U_]
          resync=DELAYED
      
md3 : active (auto-read-only) raid1 sda4[0] sdb4[3](S)
      1951680 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>

Suivi par la resynchronisation de md2 :

 
Sélectionnez
Personalities : [raid1] 
md0 : active raid1 sda1[0] sdb1[1]
      4881344 blocks [2/2] [UU]
      
md1 : active raid1 sda2[0] sdb2[3]
      4878272 blocks super 1.2 [2/2] [UU]
      
md2 : active raid1 sda3[0] sdb3[3]
      4878272 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  4.8% (235392/4878272) finish=10.5min speed=7356K/sec
      
md3 : active (auto-read-only) raid1 sda4[0] sdb4[3](S)
      1951680 blocks super 1.2 [2/1] [U_]
      
unused devices: <none>

Par contre, md3, la partition de swap, reste en mode dégradé.

Nous pouvons également constater que sda, correspondant au premier disque accessible dans le système, est notre ancien disque (le disque sda qui a été débranché). Notre disque de spare est passé de sdc en sdb.

Nous resynchronisons le swap en sortant la partition du volume md puis en la rentrant de nouveau avec les commandes suivantes :

 
Sélectionnez
$ mdadm /dev/md3 --remove /dev/sdb4
mdadm: hot removed /dev/sdb4 from /dev/md3
$ mdadm /dev/md3 -add /dev/sdb4
mdadm: added /dev/sdb4

La synchronisation se déclenche immédiatement. À ce stade, notre disque de spare a pris entièrement la place du volume HS, nos volumes RAID sont sécurisés.

7-2. Réinstallation d'un nouveau disque de spare

Lors du montage du nouveau disque, nous branchons les 2 disques par ordre :

  • le disque d'origine restant en position 0 ;
  • le disque qui était en spare est intégré au RAID en position 1 ;
  • le disque qui va servir de spare en position 3.

Ceci afin de ne pas changer l'ordre des disques et de boot.

Il restera à dupliquer la table de partitions et à intégrer les partitions aux volumes RAID en spare comme vu au chapitre 6.

8. Pour aller plus loin

Au vu des soucis rencontrés lors de la simulation de panne, la reprise sera plus facile dans le cas d'un dossier /boot sur une partition à part. Il reste aussi possible d'essayer d'améliorer le dépannage.

Je vous invite également à vous intéresser à LVM, pouvant être plus souple. Il est tout à fait possible d'imbriquer des volumes RAID logiques (ou même RAID matériel) et LVM.

Ce tutoriel est applicable aux autres distributions basées sur Debian telles que Ubuntu, Linux Mint, etc. Il devrait être également adaptable aux distributions basées sur Red Hat (système de gestion de paquets RPM).

8-1. Remerciements

Je remercie Philippe Dpt35 pour sa relecture. Je remercie Maxy35 pour la relecture orthographique.