Comment gérer les baies RAID avec mdadm sur Ubuntu 16.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Les matrices RAID offrent des performances et une redondance accrues en combinant des disques individuels dans des périphériques de stockage virtuels dans des configurations spécifiques. Sous Linux, l'utilitaire mdadm facilite la création et la gestion de matrices RAID logicielles.

Dans un guide précédent, nous avons couvert comment créer des matrices RAID avec mdadm sur Ubuntu 16.04. Dans ce guide, nous montrerons comment gérer les matrices RAID sur un serveur Ubuntu 16.04. La gestion des matrices RAID est assez simple dans la plupart des cas.

Conditions préalables

Pour compléter ce guide, vous aurez besoin d'accéder à un utilisateur non root sudo. Vous pouvez suivre notre guide de configuration initiale du serveur Ubuntu 16.04 pour configurer un utilisateur approprié.

Comme mentionné ci-dessus, ce guide couvrira la gestion des matrices RAID. Suivez notre guide sur comment créer des matrices RAID avec mdadm sur Ubuntu 16.04 pour créer une ou plusieurs matrices avant de commencer ce guide. Ce guide part du principe que vous avez une ou plusieurs baies sur lesquelles opérer.

Demande d'informations sur les périphériques RAID

L'une des exigences les plus essentielles pour une bonne gestion est la capacité à trouver des informations sur la structure, les composants et l'état actuel de la baie.

Pour obtenir des informations détaillées sur un périphérique RAID, transmettez le périphérique RAID avec l'option -D ou --detail à mdadm :

sudo mdadm -D /dev/md0

Les informations importantes sur la baie seront affichées :

Output/dev/md0:
        Version : 1.2
  Creation Time : Mon Aug  8 21:19:06 2016
     Raid Level : raid10
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Mon Aug  8 21:36:36 2016
          State : active 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : mdadmwrite:0  (local to host mdadmwrite)
           UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync set-A   /dev/sda
       1       8       16        1      active sync set-B   /dev/sdb
       2       8       32        2      active sync set-A   /dev/sdc
       3       8       48        3      active sync set-B   /dev/sdd

À partir de cette vue, vous pouvez voir le niveau RAID, la taille de la matrice, la santé des éléments individuels, l'UUID de la matrice, ainsi que les périphériques composants et leurs rôles. Les informations fournies dans cette vue sont toutes assez bien étiquetées.

Pour obtenir les détails raccourcis d'un tableau, appropriés pour l'ajout au fichier /dev/mdadm/mdadm.conf, vous pouvez passer les drapeaux --brief ou -b avec la vue détaillée :

sudo mdadm -Db /dev/md0
OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d

Pour obtenir un résumé rapide et lisible d'un périphérique RAID, utilisez l'option -Q pour l'interroger :

sudo mdadm -Q /dev/md0
Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

Cela peut être utilisé pour trouver les informations clés sur un périphérique RAID en un coup d'œil.

Obtention d'informations sur les périphériques de composants

Vous pouvez également utiliser mdadm pour interroger des composants individuels.

L'option -Q, lorsqu'elle est utilisée avec un périphérique composant, vous indiquera la matrice dont il fait partie et son rôle :

sudo mdadm -Q /dev/sdc
Output/dev/sdc: is not an md array
/dev/sdc: device 2 in 4 device active raid10 /dev/md0.  Use mdadm --examine for more detail.

Vous pouvez obtenir des informations plus détaillées en utilisant les options -E ou --examine :

sudo mdadm -E /dev/sdc
Output/dev/sdc:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
           Name : mdadmwrite:0  (local to host mdadmwrite)
  Creation Time : Mon Aug  8 21:19:06 2016
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 209584128 (99.94 GiB 107.31 GB)
     Array Size : 209584128 (199.88 GiB 214.61 GB)
    Data Offset : 131072 sectors
   Super Offset : 8 sectors
   Unused Space : before=130984 sectors, after=0 sectors
          State : active
    Device UUID : b0676ef0:73046e93:9d9c7bde:c80352bb

    Update Time : Mon Aug  8 21:36:36 2016
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 8be1be96 - correct
         Events : 18

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

Ces informations sont similaires à celles affichées lors de l'utilisation de l'option -D avec le périphérique de baie, mais se concentrent sur la relation entre le périphérique composant et la baie.

Lecture des informations /proc/mdstat

Pour obtenir des informations détaillées sur chacune des baies assemblées sur votre serveur, consultez le fichier /proc/mdstat. C'est souvent le meilleur moyen de connaître l'état actuel des baies actives sur votre système :

cat /proc/mdstat
OutputPersonalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] 
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      
unused devices: <none>

La sortie ici est assez dense, fournissant beaucoup d'informations dans un petit espace.

/proc/mdstat

Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] 
. . .

La ligne Personalities décrit les différents niveaux et configurations RAID actuellement pris en charge par le noyau.

La ligne commençant par md0 décrit le début d'une description de périphérique RAID. La ou les lignes en retrait qui suivent décrivent également cet appareil.

/proc/mdstat

. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .

La première ligne indique que la matrice est active (non défectueuse) et configurée en RAID 10. Ensuite, les périphériques composants qui ont été utilisés pour créer la matrice sont répertoriés. Les nombres entre parenthèses décrivent le "rôle" actuel du périphérique dans la matrice (cela affecte les copies de données données au périphérique).

/proc/mdstat

. . .
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .

La deuxième ligne affichée dans cet exemple indique le nombre de blocs fournis par les périphériques virtuels, la version des métadonnées (1.2 dans cet exemple) et la taille de bloc de la baie. Puisqu'il s'agit d'une matrice RAID 10, il inclut également des informations sur la disposition de la matrice (cet exemple a été configuré pour stocker deux copies de chaque bloc de données dans la disposition « proche »).

Les derniers éléments entre crochets représentent tous les deux les appareils actuellement disponibles sur un ensemble sain. Le premier nombre entre parenthèses numériques indique la taille d'une baie saine tandis que le second nombre représente le nombre de périphériques actuellement disponibles. Les autres crochets sont une indication visuelle de la santé de la baie, "U" représentant les périphériques sains et "_" représentant les périphériques défectueux.

Si votre baie est en cours d'assemblage ou de récupération, vous pouvez avoir une autre ligne indiquant la progression. Cela ressemblerait à ceci :

/proc/mdstat

. . .
      [>....................]  resync =  0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .

Celui-ci décrit l'opération en cours d'application et la progression actuelle de différentes manières. Il fournit également la vitesse actuelle et un temps estimé jusqu'à l'achèvement.

Une fois que vous avez une bonne idée des baies en cours d'exécution sur votre système, vous pouvez prendre un certain nombre d'actions.

Arrêt d'un tableau

Pour arrêter un tableau, la première étape consiste à le démonter.

Sortez du répertoire monté et démontez-le en tapant :

cd ~
sudo umount /mnt/md0

Vous pouvez arrêter tous les tableaux actifs en tapant :

sudo mdadm --stop --scan

Si vous souhaitez arrêter un tableau spécifique, passez-le à la commande mdadm --stop :

sudo mdadm --stop /dev/md0

Cela arrêtera le tableau. Vous devrez réassembler le tableau pour y accéder à nouveau.

Démarrage d'un tableau

Pour démarrer tous les tableaux définis dans les fichiers de configuration ou /proc/mdstat, tapez :

sudo mdadm --assemble --scan

Pour démarrer un tableau spécifique, vous pouvez le passer comme argument à mdadm --assemble :

sudo mdadm --assemble /dev/md0

Cela fonctionne si le tableau est défini dans le fichier de configuration.

Si la définition correcte de la baie est manquante dans le fichier de configuration, la baie peut toujours être démarrée en transmettant les périphériques composants :

sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Une fois le tableau assemblé, il peut être monté comme d'habitude :

sudo mount /dev/md0 /mnt/md0

La baie doit maintenant être accessible au point de montage.

Ajout d'un périphérique de secours à une baie

Des périphériques de rechange peuvent être ajoutés à toutes les baies offrant une redondance (telles que RAID 1, 5, 6 ou 10). La réserve ne sera pas activement utilisée par la baie sauf si un périphérique actif tombe en panne. Lorsque cela se produit, la baie resynchronise les données sur le disque de rechange pour réparer la baie en pleine santé. Les pièces de rechange ne peuvent pas être ajoutées à des baies non redondantes (RAID 0) car la baie ne survivra pas à la panne d'un disque.

Pour ajouter un disque de rechange, transmettez simplement la baie et le nouveau périphérique à la commande mdadm --add :

sudo mdadm /dev/md0 --add /dev/sde

Si la baie n'est pas dans un état dégradé, le nouveau périphérique sera ajouté en tant que réserve. Si le périphérique est actuellement dégradé, l'opération de resynchronisation commencera immédiatement à utiliser le disque de secours pour remplacer le disque défectueux.

Après avoir ajouté une pièce de rechange, mettez à jour le fichier de configuration pour refléter votre nouvelle orientation de périphérique :

sudo nano /etc/mdadm/mdadm.conf

Supprimez ou commentez la ligne actuelle qui correspond à votre définition de tableau :

/etc/mdadm/mdadm.conf

. . .
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294

Ensuite, ajoutez votre configuration actuelle :

sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf

Les nouvelles informations seront utilisées par l'utilitaire mdadm pour assembler la matrice.

Augmentation du nombre de périphériques actifs dans une baie

Il est possible de développer une matrice en augmentant le nombre de dispositifs actifs au sein de l'assemblage. La procédure exacte dépend légèrement du niveau RAID que vous utilisez.

Avec RAID 1 ou 10

Commencez par ajouter le nouvel appareil en tant que pièce de rechange, comme indiqué dans la dernière section :

sudo mdadm /dev/md0 --add /dev/sde

Découvrez le nombre actuel de périphériques RAID dans la baie :

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 15:29:26 2016
     Raid Level : raid1
     Array Size : 104792064 (99.94 GiB 107.31 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    . . .

Nous pouvons voir que dans cet exemple, la baie est configurée pour utiliser activement deux appareils, et que le nombre total d'appareils disponibles pour la baie est de trois (car nous avons ajouté une réserve).

Maintenant, reconfigurez la matrice pour avoir un périphérique actif supplémentaire. La réserve sera utilisée pour satisfaire l'exigence d'entraînement supplémentaire :

sudo mdadm --grow --raid-devices=3 /dev/md0

La matrice commencera à se reconfigurer avec un disque actif supplémentaire. Pour afficher la progression de la synchronisation des données, saisissez :

cat /proc/mdstat

Vous pouvez continuer à utiliser l'appareil au fur et à mesure que le processus se termine.

Avec RAID 5 ou 6

Commencez par ajouter le nouvel appareil en tant que pièce de rechange, comme indiqué dans la dernière section :

sudo mdadm /dev/md0 --add /dev/sde

Découvrez le nombre actuel de périphériques RAID dans la baie :

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 18:38:51 2016
     Raid Level : raid5
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    . . .

Nous pouvons voir que dans cet exemple, la baie est configurée pour utiliser activement trois appareils, et que le nombre total d'appareils disponibles pour la baie est de quatre (car nous avons ajouté une réserve).

Maintenant, reconfigurez la matrice pour avoir un périphérique actif supplémentaire. La réserve sera utilisée pour satisfaire l'exigence d'entraînement supplémentaire. Lors de la croissance d'une matrice RAID 5 ou RAID 6, il est important d'inclure une option supplémentaire appelée --backup-file. Cela doit pointer vers un emplacement off de la baie où un fichier de sauvegarde contenant des informations critiques sera stocké.

Noter

Le fichier de sauvegarde n'est utilisé que pendant un temps très court mais critique au cours de ce processus, après quoi il sera automatiquement supprimé. Étant donné que le temps pendant lequel cela est nécessaire est très bref, vous ne verrez probablement jamais le fichier sur le disque, mais en cas de problème, il peut être utilisé pour reconstruire la matrice. Cet article contient des informations supplémentaires si vous souhaitez en savoir plus.


sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0

La sortie suivante indique que la section critique sera sauvegardée :

Outputmdadm: Need to backup 3072K of critical section..

La matrice commencera à se reconfigurer avec un disque actif supplémentaire. Pour afficher la progression de la synchronisation des données, saisissez :

cat /proc/mdstat

Vous pouvez continuer à utiliser l'appareil au cours de ce processus.

Une fois la refonte terminée, vous devrez étendre le système de fichiers sur la baie pour utiliser l'espace supplémentaire :

sudo resize2fs /dev/md0

Votre baie devrait maintenant avoir un système de fichiers qui correspond à sa capacité.

Avec RAID 0

Étant donné que les matrices RAID 0 ne peuvent pas avoir de disques de rechange (il n'y a aucune chance qu'un disque de rechange reconstruise une matrice RAID 0 endommagée), nous devons ajouter le nouveau périphérique en même temps que nous développons la matrice.

Tout d'abord, découvrez le nombre actuel de périphériques RAID dans la matrice :

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 19:17:14 2016
     Raid Level : raid0
     Array Size : 209584128 (199.88 GiB 214.61 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    . . .

Nous pouvons maintenant incrémenter le nombre de périphériques RAID dans la même opération que l'ajout du nouveau disque :

sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc

Vous verrez une sortie indiquant que la matrice a été changée en RAID 4 :

Outputmdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc

Ceci est normal et attendu. La matrice repasse en RAID 0 lorsque les données ont été redistribuées sur tous les disques existants.

Vous pouvez vérifier la progression de l'action en tapant :

cat /proc/mdstat

Une fois la synchronisation terminée, redimensionnez le système de fichiers pour utiliser l'espace supplémentaire :

sudo resize2fs /dev/md0

Votre baie devrait maintenant avoir un système de fichiers qui correspond à sa capacité.

Suppression d'un périphérique d'une baie

Le retrait d'un disque d'une matrice RAID est parfois nécessaire en cas de panne ou si vous devez éteindre le disque.

Pour qu'un périphérique soit supprimé, il doit d'abord être marqué comme « en panne » dans la baie. Vous pouvez vérifier s'il y a un périphérique défaillant en utilisant mdadm --detail :

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 21:42:12 2016
     Raid Level : raid5
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Thu Aug 11 14:10:43 2016
          State : clean, degraded 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 1
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           Name : mdadmwrite:0  (local to host mdadmwrite)
           UUID : bf7a711b:b3aa9440:40d2c12e:79824706
         Events : 144

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8        0        1      active sync   /dev/sda
       2       8       16        2      active sync   /dev/sdb
       0       8       32        -      faulty   /dev/sdc

Les lignes en surbrillance indiquent toutes qu'un lecteur ne fonctionne plus (/dev/sdc dans cet exemple).

Si vous avez besoin de retirer un disque qui n'a pas de problème, vous pouvez le marquer manuellement comme étant en panne avec l'option --fail :

sudo mdadm /dev/md0 --fail /dev/sdc
Outputmdadm: set /dev/sdc faulty in /dev/md0

Si vous regardez la sortie de mdadm --detail, vous devriez voir que l'appareil est maintenant marqué comme défectueux.

Une fois que le périphérique est en panne, vous pouvez le supprimer de la matrice avec mdadm --remove :

sudo mdadm /dev/md0 --remove /dev/sdc
Outputmdadm: hot removed /dev/sdc from /dev/md0

Vous pouvez ensuite le remplacer par un nouveau disque, en utilisant la même commande mdadm --add que vous utilisez pour ajouter un disque de secours :

sudo mdadm /dev/md0 --add /dev/sdd
Outputmdadm: added /dev/sdd

La matrice commencera à récupérer en copiant les données sur le nouveau disque.

Suppression d'un tableau

Pour détruire un tableau, y compris toutes les données qu'il contient, commencez par suivre le processus que nous avons utilisé pour arrêter un tableau.

Tout d'abord, démontez le système de fichiers :

cd ~
sudo umount /mnt/md0

Ensuite, arrêtez le tableau :

sudo mdadm --stop /dev/md0

Ensuite, supprimez la matrice elle-même avec la commande --remove ciblant le périphérique RAID :

sudo mdadm --remove /dev/md0

Une fois la matrice elle-même retirée, vous devez utiliser mdadm --zero-superblock sur chacun des périphériques composants. Cela effacera le superbloc md, un en-tête utilisé par mdadm pour assembler et gérer les composants dans le cadre d'un tableau. S'il est toujours présent, cela peut entraîner des problèmes lors de la tentative de réutilisation du disque à d'autres fins.

Vous pouvez voir que le superbloc est toujours présent dans le tableau en consultant la colonne FSTYPE dans la sortie lsblk --fs :

lsblk --fs
OutputNAME    FSTYPE            LABEL        UUID                                 MOUNTPOINT
sda     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 
sdb     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 
sdc     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706 
sdd                                                                         
vda                                                                         
├─vda1  ext4              DOROOT       4f8b85db-8c11-422b-83c4-c74195f67b91 /
└─vda15

Dans cet exemple, /dev/sda, /dev/sdb et /dev/sdc faisaient tous partie du tableau et sont toujours étiquetés comme tels.

Supprimez les étiquettes en tapant :

sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc

Ensuite, assurez-vous de supprimer ou de commenter toutes les références au tableau dans le fichier /etc/fstab :

sudo nano /etc/fstab

/etc/fstab

. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

Enregistrez et fermez le fichier lorsque vous avez terminé.

Supprimez ou commentez également toutes les références au tableau du fichier /etc/mdadm/mdadm.conf :

nano /etc/mdadm/mdadm.conf

/etc/mdadm/mdadm.conf

# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706 

Enregistrez et fermez le fichier lorsque vous avez terminé.

Mettez à jour les initramfs en tapant :

sudo update-initramfs -u

Cela devrait supprimer le périphérique de l'environnement de démarrage anticipé.

Conclusion

L'utilitaire mdadm de Linux facilite la gestion des tableaux une fois que vous avez compris les conventions qu'il utilise et les endroits où vous pouvez rechercher des informations. Ce guide n'est en aucun cas exhaustif, mais sert à présenter certaines des tâches de gestion que vous pourriez avoir à effectuer au quotidien.

Une fois que vous êtes à l'aise pour créer et gérer des matrices RAID avec mdadm, vous pouvez explorer plusieurs directions différentes. Les couches de gestion de volume telles que LVM s'intègrent étroitement au RAID et vous permettent de partitionner de manière flexible l'espace en volumes logiques. De même, le chiffrement LUKS et dm-crypt est couramment utilisé pour chiffrer les périphériques RAID avant d'écrire le système de fichiers. Linux permet à toutes ces technologies d'être utilisées ensemble pour améliorer vos capacités de stockage.