LOEMBA DIDIER
Le RAID logiciel sous Linux
• Objectif : Être capable d’assurer la sécurité des données en utilisant le RAID logiciel sous Linux
• Condition préalable : Connaître la théorie sur le RAID
• Logiciels et matériel nécessaires : VMware et un Linux Debian 8 virtualisé
Introduction :
Dans cet atelier, nous allons mettre en place et configurer un dispositif essentiel et commun sur les serveurs de production qu’on appelle plus communément le RAID.
Sous Linux, la commande à utiliser et à installer au besoin pour gérer le RAID est « mdadm » qui signifie : Multiple Device ADMinistration.
Étant donné que nous sommes sous Debian nous allons installer le paquet « mdadm » comme ceci :
Place à la pratique :
/ !\ Au préalable vous devez créer 4 nouveaux disques de la taille initiale du premier, donc si vous avez installé votre VM sur un disque de 8 Go rajoutez 4 disques de 8 Go pour faire ce TP. Si vous n’avez pas beaucoup d’espaces disque, vous pouvez créer 4 nouveaux disques de 2 Go ou 4 Go.
Les méta-disques Linux sont des périphériques de type bloc (comme les partitions de disques) et sont appelés « /dev/md* » .
Nativement les niveaux de 0,1,4,5,6 et 10 du RAID sont gérés ainsi que le « spare » comme nous l’indique la commande suivante :
Voyons un peu maintenant en détail la commande « mdadm » :
En analysant ces lignes, on peut observer que l’option « Create » semble ce qu’il nous faut utiliser pour créer une grappe RAID. Voyons plus en détail ce qu’elle propose :
Cela fait beaucoup d'options n'est-ce-pas ? Ne vous inquiétez pas, nous ne les utiliserons pas toutes ! Ouf !
Bien maintenant que nous savons quelle commande nous devons utiliser pour mettre en place le RAID, essayons de créer un RAID 5 composé de 3 disques + 1 disque en spare (4 disques au total). Si vous avez suivi les indications du début de ce vous avez vos 4 disques.
Créons donc md5, notre raid 5 de 3 disques + 1 spare :
Avec cette commande, nous définissons d'abord le nom de notre grappe RAID (md5), le niveau de RAID utilisé (5), le nombre de disques composant la grappe (3), le nombre de disques « spare » (ici 1 seul) et enfin les disques utilisés pour créer tout cela (sdb, sdc, sdd et sde).
Mais comme nous sommes sur un serveur et que nous sommes un bon
administrateur, nous allons préférer créer un « script » plutôt que de lancer la ligne de commande à la main. Cela facilitera une éventuelle réutilisation ou un dépannage car on archive ainsi ce que l'on a utilisé.
Remarque : les caractères « backslash », que vous pouvez voir à l’intérieur de ce script, permettent juste de faciliter la lecture ou la relecture de celui-ci en autorisant les « retours chariot » sans que ceux-ci soient interprétés par le système.
Exécutons maintenant ce script shell :
Comme nous sommes d’un tempérament curieux, voyons en temps réel la construction de notre grappe RAID grâce à la commande « watch » :
Vous devez utiliser <CTRL+C> pour sortir.
Maintenant si nous ne voulons pas suivre en direct mais unique à un instant « t », un simple « cat » suffira.
Après l’exécution de ces différentes commandes, listons nos grappes RAID existantes :
Notre RAID 5 « /dev/md5 » apparaît bien avec 1 disque en « spare » .
Question : Sachant que nous avons utilisé des disques de 8 Go, quelle sera la taille de notre grappe RAID composée, je vous le rappelle, de 3 disques et d’un spare ?
Heureusement Linux est là, essayons d’avoir de détails sur notre RAID 5.
Nous avons bien nos 3 disques et notre « spare ». Suivons la suggestion en utilisant « detail » :
Nous voyons bien nos 16 Gib composant notre grappe de 3 disques pour un total de 4 disques (avec le spare) : sdb, sdc et sdd sont utilisés dans la
grappe, tandis que sde est utilisé en tant que spare.
Notre grappe fonctionne correctement (pas de reconstruction en cours) comme nous l'indique l'état « clean ».
Maintenant, examinons en détail un disque de la grappe : sdd par exemple :
Bien tout semble s'être déroulé sans problème. Notre grappe RAID 5 est créée mais n'est pas encore utilisable pour le moment. Pourquoi ? He bien il faut créer un « FileSystem » pour pouvoir écrire dessus ! Alors allons-y ! Voici la commande permettant de créer un FileSystem en « ext4 » :
Maintenant que cela est fait, nous allons créer un répertoire « /raid5 » à la racine sur lequel nous monterons notre grappe RAID dans un deuxième temps.
Bien tout est prêt, ou presque, montons « /dev/md5 » sur notre répertoire
« /raid5 ».
Vérifions que notre dossier « raid5 » est bien accessible et vide :
Tout est correct. Essayons de créer un fichier sur notre grappe :
Notre fichier et son contenu sont donc bien présents sur notre disque RAID.
Vérifions le type de FS monté ainsi que l'espace disque :
Et pour être sûr :
Tout semble donc fonctionner pour le mieux !
Voyons maintenant ce qu’il faut faire lors d'un problème sur la grappe ! Il est possible (et même recommandé) de demander au système de nous avertir en cas de problème sur une grappe RAID. Cela se fait au travers de l'option « monitor » :
Vous noterez que le nombre renvoyé correspond au « PID » identifiant le processus. La preuve :
Afin de contrôler que tout est opérationnel, nous allons simuler une panne sur l'un des disques dur. Pour cela nous allons utiliser l’option « set-faulty » de la commande « mdadm ».
Simulons une panne sur « sdd » par exemple :
Tout à l’heure nous avons activer le monitor du RAID par mail, vérifions si notre utilisateur na pas reçu un mail :
Nous avons bien reçu un mail, même plusieurs, regardons plus en détail le dernier, soit le « N 6 » en tapant « 6 » et entré pour l’ouvrir :
Il faut taper « q » et entré pour quitter l’outil mail.
Étudions un petit peu ce mail qui nous apporte énormément d'informations : · Tout d'abord, la panne est bien détectée et nous recevons bien un mail nous prévenant.
· Ensuite le disque fautif est identifié comme le montre le drapeau « F » à coté de sdd.
· Enfin, la présence d'un disque « Spare » nous a permis de commencer directement la reconstruction, sans aucune intervention de notre part. Le « spare » a bien joué son rôle, remplaçant le disque défectueux.
· Notre grappe fonctionne toujours, sans aucune perte de donnée et la reconstruction des données est en cours.
Nous allons donc pouvoir enlever le disque en panne pour le remplacer par un nouveau ! Nous retrouverons ainsi notre configuration d'origine, à savoir 3 disques composant la grappe plus un disque « spare ».
La façon de procéder est la suivante : il faut retirer logiquement le disque défectueux de la grappe avant de le retirer physiquement. Ensuite, il faut ajouter physiquement le disque neuf avant de l'ajouter logiquement à la grappe.
Occupons nous donc de retirer le disque en panne (sdd) de la grappe (md5), grâce à l'option « remove ».
Une fois le disque retiré logiquement de la grappe, nous pouvons le retirer physiquement. Dans notre cas, ayant à faire à un disque virtuel sur lequel nous avons simulé une panne, nous allons réutiliser sdd comme nouveau disque.
Attention par rapport à notre TP. Comme « sdd » faisait partie d’une ancienne grappe RAID et n’est pas un disque neuf, nous seront obligé d'écraser son superbloc.
Kesako superbloc ? Sous Linux les disques faisant partie d'une grappe RAID sont identifiés en tête du disque par un « superbloc » contenant des
informations sur le RAID. Il nous faut donc réinitialiser le superbloc pour simuler un disque neuf. Cela se fait grâce à la commande suivante :
Le disque « sdd » étant maintenant dans un état « neuf », rajoutons le à la grappe md5 :
Vérifions qu’il a bien été pris en compte :
[…]
Vérifions que nous n’avons perdu aucune donnée : Quel est le contenu de
« test.txt » ? Ouf !
Notre précieux « jadorececours » n’est pas perdu !
Voilà, tout est opérationnel !. Alors avant de quitter ce TP, quelques questions pour voir si tout est compris :
Questions :
a) Trouvez la commande pour arrêtez la grappe Raid et vérifiez son arrêt effectif.
b) Réactivez la grappe Raid et vérifiez son fonctionnement.
c) Arrêtez la grappe Raid et supprimez la.
d) Créez un FileSystem ext4 sur sdb
e) Créez 3 fichiers non vides (fic1, fic2,fic3) sur sdb f) Créer une grappe Raid 1, md1 avec uniquement sdc g) Copiez le contenu de sdb sur md1
h) Rajoutez sdc à la grappe Raid 1. Que se passe-t-il pour sdc ?
i) Vérifiez que la grappe md1 est fonctionnelle et que vous avez bien accès à vos fichiers
j) Détruisez md1 Résumons :
Créer une grappe Raid :
mdadm --create /dev/md* --level niveau_de_raid --raid-devices nb_de_disques --sparedevices nb_de_spare /dev/*Liste_des_disques_composant_la_grappe_+_spare
Simuler une panne :
mdadm /dev/md* - -set-faulty /dev/disque_en_panne
Enlever un disque d'une grappe:
mdadm /dev/md* --remove /dev/disque_à_enlever
Ajouter un disque :
mdadm /dev/md* --add /dev/disque_à_ajouter
Obtenir des informations sur un raid :
cat /proc/mdstat ou
mdadm –detail /dev/grappe ou
mdadm --detail --scan ou
mdadm –query /dev/disque_ou_grappe
Créer un FS (ext3 par exemple) sur un Raid (md0) et le monter sur /monraid :
mkfs -t ext3 /dev/md0 mkdir monraid
mount -t ext3 /dev/md0 /monraid