MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


services:stockage:tuto:mdadm_tuto1

Création RAID 5 - 3 disques

L'objectif ici consiste à définir une grappe de 3 disques SATA de 4To chacun, montée en RAID 5 – les data sont dispatchées sur l'ensemble des disques avec chaque fois un calcul de parité qui autorise la crash d'un disque sans perte des données, parce que la parité permet de reconstituer les infos (c'est le principe, à - très - gros traits). Des précisions sur les différents «niveaux» de RAID peuvent être trouvées .

On définit notre système en RAID logiciel à l'aide de l'outil mdadm.

Pour toutes les manipulations à suivre, on se positionne en root via

$ sudo -i
[sudo] Mot de passe de <moââ> : 
# 

Le prompt en # vous indique que vous avez des droits d'administrateur.

On utilise dans cet exemple 3 disques aux positions 2 à 4 (/dev/sdb à /dev/sdd). Vous pouvez bien sûr adapter la configuration à votre environnement et au nombre de disques que vous souhaitez ajouter au RAID.


Installation

Si ce n'est pas déjà fait, on installe notre outil, plus un outil de gestion des états smart qui va permettre une vérification rapide de l'état de chaque disque avant des les intégrer dans l'ensemble RAID.

Par ailleurs, nos disques ont des espaces supérieurs à 2 To: dans ces conditions les outils parted ou gdisk, pour gérer des partitions GPT, sont nécessaires.

La commande d'installation est la suivante:

# apt-get install mdadm gdisk smartmontools

Vérifications Smart

Avant d'intégrer nos disque en RAID, faisons un rapide contrôle de leur état S.M.A.R.T.: inutile de les ajouter s'ils sont déjà «fragiles»…

On va donc lancer un test court et rapide sur chacun de nos disques:

## tests préalables & rapides des disques et leur état smart
# smartctl -t short /dev/sdb
# smartctl -t short /dev/sdc
# smartctl -t short /dev/sdd

Chacune de ces commandes annonce une heure de fin; quand elle est atteinte, voir le résultat avec (où X est le disque concerné):

# smartctl -l selftest /dev/sdX

Par exemple, pour le disque sdd le status Completed without error indique qu'on est bon, c'est la même chose pour les autres disques:

# smartctl -l selftest /dev/sdd

Cliquer pour voir/cacher le résultat

Cliquer pour voir/cacher le résultat

smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.19.0-6-amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      3393         -
# 2  Short offline       Completed without error       00%      3138         -
# 3  Short offline       Completed without error       00%      2970         -
# 4  Short offline       Completed without error       00%      2802         -
# 5  Short offline       Completed without error       00%      2634         -
# 6  Short offline       Completed without error       00%      2466         -
# 7  Short offline       Completed without error       00%      2298         -
# 8  Short offline       Completed without error       00%      2130         -
# 9  Short offline       Completed without error       00%      1962         -
#10  Short offline       Completed without error       00%      1791         -
#11  Short offline       Completed without error       00%      1623         -
#12  Short offline       Completed without error       00%      1455         -
#13  Short offline       Completed without error       00%      1287         -
#14  Short offline       Completed without error       00%      1119         -
#15  Short offline       Completed without error       00%       951         -
#16  Short offline       Completed without error       00%       783         -
#17  Short offline       Completed without error       00%       615         -
#18  Short offline       Completed without error       00%       525         -


Vous pouvez également consulter le dernier état S.M.A.R.T. avec:

# smartctl -s on -a /dev/sdX 

«Toper» les disques

On doit «taguer» chaque disque membre du RAID avec un drapeau de type “Linux RAID”. On utilise pour ce faire la commande suivante où X correspond à la lettre d'un disque:

# gdisk /dev/sdX

On utilise les options suivantes de gdisk, dans l'ordre:

  1. On appuie sur o pour créer une nouvelle table de partition GPT puis sur ↵ Entrée (confirmer avec y et ↵ Entrée).

  2. On appuie sur n pour créer une nouvelle partition. Pour le numéro de partition, laisser par défaut avec ↵ Entrée.

  3. Pour le choix des First Sector et Last Sector, laisser le choix par défaut avec ↵ Entrée (on prend tout le disque).

  4. Pour le code de la partition, entrer fd00, qui correspond à «Linux RAID».

  5. Appuyer sur w pour enregistrer les changements.

  6. Et quitter gdisk (confirmer avec y et ↵ Entrée).

Ces opérations sont à répéter pour chaque disque (ici X prendra successivement les valeurs b, c et d, à adapter chez vous).

On s'assure que tout est bon en listant les partitions de nos disques. Par exemple, pour le disque sdd, on aura ceci en retour de la commande

# gdisk -l /dev/sdd
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdd: 7814037168 sectors, 3.6 TiB
Model: ST4000VN008-2DR1
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 497986FF-E213-4F0E-B8DB-9098E0FB089F
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      7814037134   3.6 TiB     FD00  Linux RAID

On a bien une partition #1, avec un code à fd00, correspondant à du RAID Linux.

On peut poursuivre…


Création de l'«array»

Nos disques sont prêts pour devenir des membres d'une grappe d'un système RAID logiciel. On va utiliser la commande de création de cet ensemble en précisant:

  • Un nom logique pour la grappe
  • Un niveau de RAID: 0, 1, 5, 6…
  • le nombre et la liste des disques qui composent cet ensemble

Adaptez cette commande à votre environnement, en particulier sous VHS 8 où vous pouvez avoir 7 disques et opter pour un RAID 6 par exemple… (veinards ;-))

La commande création qu'on applique ici est la suivante (n'oubliez pas le 1 final, qui correspond au n° de partition RAID qu'on a créé précédemment):

# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[bcd]1

qui nous retourne:

mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

On le sait, cette opération est longue, qui dépend à la fois du nombre de disques et de leur taille: de plusieurs heures à plusieurs jours…

On peut contrôler l'avancement de la construction avec:

# cat /proc/mdstat

Au démarrage, on aura par exemple:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      7813770240 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  0.0% (1314268/3906885120) finish=445.7min speed=146029K/sec
      bitmap: 30/30 pages [120KB], 65536KB chunk

unused devices: <none>

C'est donc parti pour 445 minutes ici, soient ~ 7h25… Y a pu qu'à patienter ! …

Quand l'opération est finie, ~ 8h00 plus tard…

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
      7813770240 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      bitmap: 0/30 pages [0KB], 65536KB chunk
 
unused devices: <none>

Bien… Mais pour l'utiliser, il faut créer un système de fichiers sur notre espace RAID avec un «petit nom» (ici data_raid5 et FS ext4):

# mkfs.ext4 -L data_raid5 /dev/md0

Vous pouvez ajouter l'option -c à cette commande, qui check les secteurs défectueux, mais c'est très long…


Montage

Pour l'instant, on n'a pas accès aux données de notre RAID md0: il faut pour cela «monter» cet espace.

On va le faire à l'emplacement prévu pour:

  • On crée notre point de montage:
    # mkdir /mnt/raid_data
  • On monte le RAID sur ce point de montage:
    # mount /dev/md0 /mnt/raid_data 

    On peut alors y accéder via

    # ls -als /mnt/raid_data
  • On va rendre ce montage automatique au démarrage via l'ajout de la ligne suivante dans le fichier /etc/fstab:
    nano /etc/fstab
    # Ajout par <machin> - ssaa.mm.jj - montage raid
    /dev/md0                /mnt/raid_data  ext4    defaults,nofail,discard    0    0

    On peut le faire via la commande suivante:

    # echo '/dev/md0 /mnt/raid_data ext4 defaults,nofail,discard 0 0' | tee -a /etc/fstab
  • Lancement automatique du RAID: On sauve la configuration par défaut et on créé la notre:
    # cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
    # mdadm --detail --scan | tee -a /etc/mdadm/mdadm.conf
  • A vérifier cela, car ça ne s'est pas produit ici: «Si malgré tout le md0 se nomme md127 après un redémarrage, et que le fichier mdadm.conf est bien renseigné, il est peut être nécessaire de re-générer le fichier initramfs»:
    # update-initramfs -u -k all
  • Vous pouvez vérifier à tout moment l'état de votre RAID md0:
    # mdadm -D /dev/md0
      /dev/md0:
                 Version : 1.2
           Creation Time : Sat Sep 21 19:49:32 2019
              Raid Level : raid5
              Array Size : 7813770240 (7451.79 GiB 8001.30 GB)
           Used Dev Size : 3906885120 (3725.90 GiB 4000.65 GB)
            Raid Devices : 3
           Total Devices : 3
             Persistence : Superblock is persistent
     
           Intent Bitmap : Internal
     
             Update Time : Mon Oct 14 20:44:10 2019
                   State : clean 
          Active Devices : 3
         Working Devices : 3
          Failed Devices : 0
           Spare Devices : 0
     
                  Layout : left-symmetric
              Chunk Size : 512K
     
      Consistency Policy : bitmap
     
                    Name : wasabi:0  (local to host wasabi)
                    UUID : 2459a47e:cdaf7663:b3a479ec:f7a0dcc9
                  Events : 6237
     
          Number   Major   Minor   RaidDevice State
             0       8       17        0      active sync   /dev/sdb1
             1       8       33        1      active sync   /dev/sdc1
             3       8       49        2      active sync   /dev/sdd1

Et woula … Y a pu qu'à remplir de données :-)


Mail automatique

Il est intéressant d'être automatiquement notifié d'une alerte ou d'un incident sur notre RAID. On peut ainsi activer du «monitoring» mdadm avec envoie d'un mail en cas de souci.

Notre OS Debian contient par défaut l'outil de messagerie exim4. Pour le configurer, utilisez la première option proposée dans ce tuto.

Il s'agit ensuite de configurer mdadm avec votre adresse de courriel où recevoir les alertes:

# nano /etc/mdadm/mdadm.conf

Dans ce ficher, alimentez correctement cette zone:

...
# instruct the monitoring daemon where to send mail alerts
MAILADDR mon.mail@monfai.fr
...

Pour s'assurer du bon fonctionnement, lancez cette commande de test et vérifiez la bonne réception du mail (pour tester sans faire de manipulations hasardeuses…):

# mdadm --monitor --scan --test --oneshot

Le mail reçu doit avoir cette tête-là:

De: mdadm monitoring <wasabi@local.net>   hh:mn (il y a xx minutes)
À: mon.mail@monfai.fr
This is an automatically generated mail message from mdadm running on wasabi

A TestMessage event had been detected on md device /dev/md/0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:
 Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[0] sdd1[3] sdc1[1]
      7813770240 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      bitmap: 2/30 pages [8KB], 65536KB chunk

unused devices: <none>
services/stockage/tuto/mdadm_tuto1.txt · Dernière modification: 29/10/2019 00:29 de Cram28