[Tuto] Créer un RAID logiciel avec mdadm sous Debian

Récemment, j'ai eu comme un petit souci avec le RAID5 qui assurait la majorité de mon stockage. Petit souci car j'ai 3 disques (de marque Seagate) qui ont décidé de me lâcher... Et oui, tous les trois en même temps... C'est balo ! Après la garantie bien évidemment... Ces trois disques avaient été achetés à la même période mais dans deux boutiques différentes. Bon faut quand même pas avoir de bol pour que les 3 lâchent en même temps et avec les même symptômes... Je précise également que j'avais contrôlé le S.M.A.R.T et que tout était au vert... Je sais pas trop mais... Tu la sens l'obsolescence programmée là ? Perso j'en ai bien l'impression moi... Bref. Hier j'ai donc reçu mon dernier disque de remplacement et j'ai remonté un nouveau RAID logiciel. Ça aurait été dommage de ne pas en profiter pour vous en faire un tutoriel. Allez, laissez vous guider ! 

L'intérieur d'un Disque Dur

 

Contexte de ce tutoriel

Pour ce tutoriel, j'ai utilisé un serveur tournant sous Debian 8 (Jessie). Le système est installé sur un disque de 320 Go et le RAID vient s'ajouter à côté, uniquement pour faire du stockage. Mon RAID sera composé de 7 disques de 2 To. J'ai donc le disque /dev/sda qui est le disque du système et les autres qui seront les composants du RAID. Je vais ici créer un RAID de type RAID6. Bien sûr ce tutoriel peut être suivi pour créer d'autres types de RAID. Il faudra juste modifier le paramètre raidlevel lors de la création du RAID (couramment appelé array ou grappe).

Pour les différents types de RAID, je vous renvoie à un excellent article sur le sujet : ici ! 😀

 

Quelques mots sur le RAID logiciel

Pourquoi faire du RAID logiciel et non du RAID matériel ? C'est un choix qui peut paraître étrange mais je l'assume totalement et je vais m'en expliquer. Mais tout d'abord, j'aimerai revenir sur les avantages et inconvénients du RAID logiciel.

Avantages :

  • Souplesse d'utilisation
  • Peut-être remonté sur une autre machine Linux, même si ce n'est pas la même version du système

Inconvénients :

  • Consommation des ressources CPU (processeur)
  • Débits en lecture et en écriture inférieurs aux RAID matériel

Alors pour ma part, je dispose d'un serveur Debian qui ne sert qu'à ça. Il est équipé d'un processeur QuadCore. La consommation CPU ne me fait donc pas peur. Le RAID sera pour moi un espace de stockage uniquement. Je n'ai donc pas besoin ici de performances extrêmes. Les inconvénients ne sont donc pas gênant pour moi. En revanche, si besoin, je sais que je peux ré-assembler mon RAID ailleurs. Je suis donc dépendant d'aucun matériel. De plus, j'utilise deux contrôleurs SATA différents et cela ne pose aucun problème au RAID logiciel.

Allez, assez blablaté ! Entrons dans le vif du sujet.

 

Étape préliminaire : vérification des disques

Avant de créer le RAID, on va commencer par vérifier l'état des disques durs. Même s'ils sont fraîchement déballés, mieux vaut être prudent. Cela serait bête d'avoir un disque avec un problème dès les premiers jours. Pour ce faire, on va utiliser l'outil smartmontools. Cet outil est dans les paquets Debian donc son installation est très simple : ouvrez un terminal et saisissez la commande ci-dessous.

sudo apt-get install smartmontools

Une fois smartmontools installé, on va contrôler les disques que l'on souhaite inclure dans le RAID. Pour cela, saisissez, pour chaque disque, la commande suivante, en remplaçant sdX par le nom d'un de vos disques :

sudo smartctl -t short /dev/sdX

Cette commande a pour but de lancer un test rapide du disque. Le test se déroule et smartctl vous annonce le temps nécessaire pour l'exécuter.

Lancement d'un test S.M.A.R.T court

Lorsque le délai annoncé par smartctl est atteint, il suffit de saisir la commande ci dessous pour avoir le résultat :

sudo smartctl -l selftest /dev/sdX

Vous aurez alors le résultat. Pour ma part, "Completed without error" ce qui signifie que mon disque va bien !

Résultat du test S.M.A.R.T court

Répétez maintenant l'opération pour chaque disque.

 

Si vous voulez aller un peu plus vite, vous pouvez vous contenter de lire le dernier état S.M.A.R.T remonté pour chaque disque, sans déclencher un nouveau test. Pour cela, tapez dans un terminal, pour chaque disque :

sudo smartctl -s on -a /dev/sdX

Vous aurez alors un résultat comprenant beaucoup d'informations. Ici, ce qui va nous intéresser, c'est 

SMART overall-health self-assessment test result: PASSED

PASSED signifie que le disque a passé les tests sans problème et que tout va bien. Vous n'avez alors qu'à répéter l'opération pour chaque disque.

Une fois que c'est fait et que tous les disques sont sains, on va pouvoir passer aux choses sérieuses.

 

Préparation des disques durs

Pour créer un RAID logiciel, on va devoir, au préalable, préparer les disques durs. Il va en effet falloir créer une partition. Et attention, car cette étape est super importante. Vos partitions devront avoir le même nombre de blocs. Faute de quoi, vous aurez des soucis !

Pour préparer les disques, je vais utiliser l'utilitaire gdisk. Pourquoi gdisk et pas fdisk ? Tout simplement car mes disques de 2 To vont contenir une table de partition de type GPT. J'ai donc besoin de gdisk pour gérer cela.

Toujours dans un terminal, tapez :

gdisk /dev/sdX

Puis :

  • On appuie sur o pour créer une nouvelle table de partition GPT puis sur Entrée (confirmer avec Y et Entrée)
  • On appuie sur n pour créer une nouvelle partition. Pour le numéro de partition, laissez par défaut. Pour ma part, c'est 1 puisque mes disques ne contiennent pas d'autres partitions. Il y a de fortes chances pour que ce soit la même chose chez vous.
  • Pour le choix du First Sector, laissez le choix par défaut. Cela devrait vous créer une partition à partir du secteur 2048.
  • Idem pour le last sector, laissez par défaut.
  • Pour le code de la partition, entrez fd00 cela correspond à Linux RAID
  • Appuyez sur pour enregistrer les changements et quitter gdisk (confirmer avec Y et Entrée)

Répétez ensuite l'opération sur chacun des disques.

Une fois que c'est fait, on vérifie que tout est bon via mdadm l'outil de gestion du RAID :

mdadm -E /dev/sd[b-h]

J'utilise pour ma part [b-h] pour que mdadm examine les disques sdb, sdc, sdd, sde, sdf, sdg, sdh. À vous d'adapter en fonction de votre cas. On voit ici que les disques sont maintenant prêts :

Examen des disques avant la création de la grappe

Tout est bon, on va pouvoir passer à la création de la grappe RAID.

 

Création de la grappe RAID avec mdadm

On va maintenant demander à mdadm de créer une grappe en lui précisant plusieurs paramètres :

  • /dev/mdX : correspondant au nom de la grappe
  • --level=Y : indique que je souhaite créer un RAID Y
  • --raid-devices=Z : indique le nombre de disques qui vont composer mon RAID
  • et ensuite on indique le nom des disques... On peut soit les saisir tous un peu un (mais ça peut être long et donc fastidieux) ou bien utiliser l'abréviation avec des crochets, comme j'ai déjà fait plus haut...

Ce qui donne pour ma part :

mdadm --create /dev/md0 --level=6 --raid-devices=7 /dev/sd[b-h]1

La ligne de commande pour créer une grappe RAID avec mdadm

On peut maintenant contrôler l'avancement de la création de la grappe RAID avec la commande suivante :

cat /proc/mdstat

cat /proc/mdstat permet de contrôler l'état du RAID

Selon le nombre de disques qui composent le RAID et leur taille, cette opération peut prendre plus ou moins de temps. Pour ma part, on voit sur la capture ci-dessous que cela va prendre plus de 1000 minutes !

Bon et bien j'ai plus qu'à aller me coucher et je terminerai tout cela demain matin midi soir ! Car oui, c'est pas terminé. À l'issue de cette opération, on va avoir une belle grappe RAID, mais il va falloir créer un système de fichiers dessus.

 

Création d'un système de fichiers sur la grappe RAID

Une poignée d'heures plus tard, la construction est terminée !! On va pouvoir créer un système de fichiers de types ext4 sur notre RAID. Pour cela, ouvrez un terminal et saisissez la commande suivante :

mkfs.ext4 /dev/mdX

(pensez à adapter le X en fonction du nom de votre grappe RAID)

Et voilà, notre système de fichiers ext4 est créé et opérationnel. Il nous reste encore une étape : le montage de ce système.

 

Montage du RAID créé avec mdadm

Vous pouvez monter votre RAID avec la commande mount, simplement, ou bien l'inclure dans votre fichier fstab pour qu'il soit monté automatiquement au démarrage du système. Avec la commande mount, il suffit de saisir :

mkdir /mnt/monraid

mount /dev/mdX /mnt/monraid/

Pour ce qui est du fichier /etc/fstab, ouvrez le avec votre éditeur de texte préféré et ajoutez une nouvelle ligne, comme ceci :

/dev/mdX      /mnt/monraid      ext4      defaults      0      0

Sauvegardez le fichier. Ensuite, dernière étape, il faut sauvegarder la configuration du RAID pour être sûr qu'il se lance ensuite automatiquement.

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old

mdadm --examine --scan --verbose >> /etc/mdadm/mdadm.conf

update-initramfs -u -k all

 

Et voilà ! Vous avez créé un RAID logiciel sous linux avec mdadm. Tout est fonctionnel. Si vous avez besoin d'autres commandes sur le RAID, vous pouvez consulter le wiki JusteGeek.

Attention : on ne le rappelle jamais assez, un système RAID n'est pas un système de sauvegarde. Pensez donc à faire des sauvegardes de vos données importantes 🙂 .

 

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre. "Si un produit s'allume c'est un bon point. S'il est connecté, c'est encore mieux !"

Vous aimerez aussi...

34 réponses

  1. Krapace dit :

    De mon expérience il est n'est pas nécessaire de créer des partitions sur chaque disque.

    On peux créer la grappe RAID directement et c'est le /dev/mdx sur lequel on va crée la partition 😉

  2. Lionel dit :

    Je te propose d'utiliser LVM sur ton RAID afin d'offrir + de souplesse dans son utilisation future (re-partionnement, creation des LUN...) et du coup, mettre ta partition système dessus également.

    • Sandstorm dit :

      Salut Lionel,
      Oui beaucoup de gens utilisent LVM... Mais perso, je ne veux pas du système dessus. Je souhaite bien diviser stockage pur et système. Après je critique pas ta méthode que je connais. Ça peut être une idée 🙂

  3. LSDM dit :

    J'utilise du RAID1 pour / mais il faut obligatoirement /boot.

  4. moielias dit :

    Merci pour le tuto claire est net !
    Du coup si j'ai bien compris t'a 7 disque de 2To en raid6 donc 10to, si tes disque sont neuf et que 2 tombent en panne c'est la merde x) mais peu probable
    Un petit lien bien pratique pour faire les calculs https://buzut.fr/tirez-le-meilleur-de-vos-disques-durs-avec-raid/

    • Sandstorm dit :

      Salut moielias,
      Non, le RAID 6 permets de perdre 2 disques sans que ce soit la merde. Si tu perds deux disques tu peux encore reconstruire. Si tu en perds 3, c'est là que c'est la merde !!! Et 3 en même temps, c'est asez rare, mais ça peut arriver : la preuve en introduction de ce billet....

  5. jdrien dit :

    Merci pour ton tuto, clair et concis.

    Par contre je pense que la ligne suivante contient une petite erreur de typo :
    mdadm --examine --scan --verbose >> /dev/mdadm/mdadm.conf

    --> Le fichier de configuration est dans /etc et non pas dans /dev ?

  6. wwwer dit :

    Merci ! enfin un tuto clair pour faire un raid "à coté" du système ! Grappe en cours de création 🙂

  7. Ivendell dit :

    Très bon tutoriel, en revanche une information que je n'ai trouvé nulle part: Quelle est la marche à suivre en cas de perte d'un des disques (pour un raid 5 notamment) ? Est-ce que le système reconstruit lui-même les données, ou l'utilisateur doit-il effectuer une action particulière ?

  8. Sandstorm dit :

    Bonjour Ivendell,
    Si un disque d'un RAID5 vient à tomber HS, le RAID passera en mode dégradé : en gros un disque ne sera pas utilisé et son contenu sera recréé temporairement par ton gestionnaire RAID (mdadm ici) pour que tu accèdes aux données. Cela a une conséquence importante sur les performances du RAID.
    Ensuite, si tu veux remplacer le disque, tu dois le déclarer fautif et le sortir du RAID (via mdadm) puis tu pourras enlever ton disque et le remplacer par un disque sain. Ensuite, il faut l'inclure dans la grappe RAID et la reconstruction du disque se fera toute seule. Il s'agit d'une opération longue et qui sollicite beaucoup les disques. Si dans le temps de reconstruction tu as besoin d'accéder aux données, les performances seront une fois encore dégradées.
    ++

  9. Skynet dit :

    Bonjour
    Très bon tuto, merci beaucoup pour le travail.
    Ceci étant je viens demander de l'aide car ayant eu un souci dernièrement ... avec un NAS netgear STORA.
    Il était configuré en raid0 avec 2 disques durs de 1 to. Le raid à planté, alors que les 2 disques sont ok.
    Je sais qu'il est possible de refaire le raid sur un ordinateur en linux, mais mon problème est que je ne connais vraiment rien en linux ..
    Y aurait il qq un pour m'aider à monter le raid0 avec les 2 disques durs sur mon pc et pouvoir accéder à mes fichiers le temps de les sauvegarder via un logiciel de prise de main à distance installé chez moi ?
    Un grand merci par avance
    @+

  10. Max dit :

    Excellent tuto merci !

    Une petite question...
    Le passage cat /proc/mdstat est-il indispensable et obligatoire ?

    J'ai créé une grappe raid 4*4 To sur un serveur sans ces manips et en passant directement à l'étape mkfs... Et cela fonctionne... Du coup on y gagne des heures non ?

    Merci !

    • Sandstorm dit :

      Hello ! La commande cat /proc/mdstat permet seulement de suivre l'avancement de la création de la grappe. Donc non elle n'est pas obligatoire, le process de création continue de se dérouler en arrière plan 😉

  11. david dit :

    Bonjour, j'ai une erreur

    modprobe: FATAL: Module md_mod not found in directory /lib/modules/4.4.194
    mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
    mdadm: unexpected failure opening /dev/md0

    je suis sur une debian buster sur un tinker bord 2s

    j'ai fais plusieurs essai en raid0 raid1, 2 disques et 3 disques , suivi d'autre tuto mais je tombe toujours sur cette erreur.

    Merci de votre aide!

    • david dit :

      J'ai recompiler mon kernel :

      git clone https://github.com/armbian/build
      cd build
      sudo ./compile.sh

      (reboot)
      sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sd[a-b]1

      mais rien n'a changer!

        • david dit :

          bonjour, oui j'ai compris mais en essayer d’assemblé les morceaux moi même j'ai foire le boot du thinker board. je verrais plupart.
          Du coup je teste sur un autre pc intel64 debian11.
          La j'ai eu un autre problème que je viens de "résoudre" palier plutôt.

          la commande "mdadm ....."
          "bash: mdadm : commande introuvable"

          j'ai lu que le script de mdadm etait dans /sbin
          j'ai eu l'idée de l'exécuter de la sont repertoire avec la commande "ci dessous" comme pour un script shell et dans son répertoire "/sbin" et la j'ai eu un résultat :
          "root@debian:/sbin# ./mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1".

          Maintenant je passe a la suite, c'est tout une aventure pour faire un raid logiciel mdr.

          Merci!!!!

          • david dit :

            PS : j'ai du faire la même maniper pour la commande gdisk.
            "root@debian:/sbin# ./gdisk /dev/sdb"
            contrairement au thinker board.

  12. HanJiHan dit :

    Bonjour,

    Je compte monter un petit serveur multimédia sur base yunohost (qui est sur base Debian). Par contre j'aimerai mettre mon hôte sur un SSD, car j'en ai un sous la main, et le reste sur des HDD (car je suis radin). Du coup l'image de faire une RAID5 uniquement pour les HDD me vient avant toute chose. (RAID5 car je suis radin toujours). En vrai ce sera mon premier projet dans le genre, faut bien commencer.

    La j'ai une HDD 4TO blindé de donnée utile, qui seront sur mon serveur multimédia a terme. Je vais donc acheter deux disque supplémentaire de même capacité (En RAID5 j'aurai donc 8TO utilisable). Je vais acheter deux marques différentes pour espéré limité le risque que les deux disques claquent en même temps.

    Ma question, c'est, puis-je initialiser mon RAID5 avec seulement 2HDD (donc 4TO utilisable), transféré les données du vieux disque de 4TO sur ma nouvelle partition RAID5, puis formater ce vieux disque, et l'inclure dans mon RAID5 existant pour porté a 8TO la somme de capacité utilisable.

    C'est possible ? Pas trop compliqué ? (surement très long par contre j'imagine).
    Si quelqu'un a un tuto vers ça, évidemment je prends, sinon je chercherai du coté de mdadm qui doit être plus que documenté j'imagine.
    Si si quelqu'un a fait ça sur yunoHost et peut me confirmer que j'aurai pas de problème de compatibilité en particulier, ce serait un petit bonus appréciable.

    En attendant je commande les disques, je rassemble un max d'information pour le jour J 🙂

    PS: Merci évidemment pour le tuto, quitte a commenter, on est pas des bêtes, un peu de gratitude c'est la moindre des choses^^

    • krapace dit :

      Oui c'est possible

    • Sandstorm dit :

      Hello ! Pour créer un RAID 5 il te faut minimum 3 disques... Donc non tu ne peux pas faire un RAID 5 avec 2 HDD pour commencer.

      • krapace dit :

        Si, tu peut tester sur une VM debian par exemple :
        root@vm:/home/krapace# mdadm --create /dev/md0 -n2 -l5 /dev/vdb /dev/vdc --assume-clean
        mdadm: Defaulting to version 1.2 metadata
        mdadm: array /dev/md0 started.
        root@vm:/home/krapace# cat /proc/mdstat
        Personalities : [raid6] [raid5] [raid4]
        md0 : active raid5 vdc[1] vdb[0]
        1046528 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/2] [UU]

        unused devices:

        • krapace dit :

          Pour préciser, apres création tu ajoute le troisième disque et tu augmente ton array :
          root@vm:/home/krapace# mdadm --add /dev/md0 /dev/vdd

          root@vm:/home/krapace# mdadm --grow -n3 /dev/md0
          root@vm:/home/krapace# cat /proc/mdstat
          Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
          md0 : active raid5 vdd[2] vdb[0] vdc[1]
          1046528 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
          [=====>...............] reshape = 25.0% (262656/1046528) finish=0.3min speed=37522K/sec

          • Sandstorm dit :

            Sauf que dans ce cas, le temps que tu n'as pas mis le troisième disque, tu n'es pas dans un vrai RAID5, donc aucune tolérance de panne...

          • HanJiHan dit :

            Merci pour les précisions, je teste ça plus tard, la je dois attendre 400minutes le temps de la création de la grappe du coup.

            Et pour répondre a Sandstorm, la grappe de seulement 2 disques est temporaire, le 3eme HDD est full et je ne savais pas ou stocker les 4TO qu'il contient.

            Du coup j'ai setup mon yunoHost sur un SSD 250Gb comme indiqué plus haut, le je fais ma grappe, puis après je vais setup mes services multimédia et je pourrai décharger le 3eme HDD puis le rajouter a la grappe une fois entièrement vide et faire un vrai RAID5, promis c'est le but^^

            En tous cas merci beaucoup pour vos réponses.

        • HanJiHan dit :

          Effectivement je vois vos réponse que maintenant, 2 min après avoir lancé le RAID5 sur mes deux disques^^

          Cela semble fonctionner.

  13. Shinsen dit :

    Bonjour, merci pour le tuto, petit tip, durant le resync qui t'as duré très longtemps, tu peux utiliser l'array sans problème.

    • Sandstorm dit :

      Hello. Merci pour ton com. Bien sûr que l'array reste disponible pendant la reconstruction. Mais cela fonctionne en mode dégradé donc moins de perfs... et dans le cas d'un reconstruction, j'évite au maximum de solliciter les disques pour qu'ils ne procèdent qu'à l'opération de reconstruction... 😉

  14. Julien LORTHIOS dit :

    Hello, merci pour le tuto, il m'a bien servi. Je conseille juste de mettre l'UUID de la partition plutôt que /dev/mdX. Bonne journée

  15. Tranx dit :

    Bonjour,
    Une petite commande sympa pour suivre l'avancement en RT : watch -n 20 cat /proc/mdX

    • Krapace dit :

      Plutot :
      watch -n2 'cat /proc/mdstat'
      Ca permet d'avoir une vue d'ensemble de toutes les grappes
      ( -n2 étant la fréquence de rafraichissement)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.