Comment gérer des matrices RAID avec mdadm sur Ubuntu 16.04

introduction

Les matrices RAID améliorent les performances et la redondance en combinant des disques individuels dans des périphériques de stockage virtuels dans des configurations spécifiques. Sous Linux, l'utilitairemdadm facilite la création et la gestion des matrices RAID logicielles.

Dans un guide précédent, nous avons couverthow to create RAID arrays with mdadm on Ubuntu 16.04. Dans ce guide, nous allons montrer comment gérer des 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 terminer ce guide, vous aurez besoin d'accéder à un utilisateursudonon root. Vous pouvez suivre nosUbuntu 16.04 initial server setup guide pour configurer un utilisateur approprié.

Comme indiqué ci-dessus, ce guide couvre la gestion de la matrice RAID. Suivez notre guide surhow to create RAID arrays with mdadm on Ubuntu 16.04 pour créer un ou plusieurs tableaux avant de commencer ce guide. Ce guide suppose que vous avez une ou plusieurs baies sur lesquelles opérer.

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

L'une des conditions les plus essentielles pour une gestion correcte est la capacité de 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, passez le périphérique RAID avec l'option-D ou--detail àmdadm:

sudo mdadm -D /dev/md0

Les informations importantes sur le tableau 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

Dans cette vue, vous pouvez voir le niveau de RAID, la taille de la matrice, la santé des composants individuels, l'UUID de la matrice, ainsi que les périphériques et leurs rôles. Les informations fournies dans cette vue sont 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 indicateurs--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 par l'homme 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.

Obtenir des informations sur les périphériques

Vous pouvez également utilisermdadm pour interroger des composants individuels.

L'option-Q, lorsqu'elle est utilisée avec un périphérique composant, vous indiquera le tableau 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 la baie, mais se concentrent sur la relation entre le périphérique du composant et la baie.

Lire les 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 de 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: 

La sortie ici est assez dense, fournissant beaucoup d’informations dans un espace réduit.

/proc/mdstat

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

La lignePersonalities décrit les différents niveaux et configurations RAID que le noyau prend actuellement en charge.

La ligne commençant parmd0 décrit le début d'une description de périphérique RAID. Les lignes en retrait qui suivent décrivent également ce périphérique.

/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 tant que RAID 10. Ensuite, les périphériques composants utilisés pour construire le tableau sont répertoriés. Les chiffres entre parenthèses décrivent le «rôle» actuel du périphérique dans la baie (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 du bloc de la matrice. S'agissant d'une matrice RAID 10, elle comprend également des informations sur la structure de la matrice (cet exemple a été configuré pour stocker deux copies de chaque bloc de données dans la structure «proche»).

Les derniers éléments entre crochets représentent tous deux des périphériques actuellement disponibles. Le premier nombre entre parenthèses numériques indique la taille d'un tableau sain, tandis que le second chiffre représente le nombre actuellement disponible de périphériques. Les autres parenthèses sont une indication visuelle de la santé de la matrice, avec le «U» représentant les périphériques sains et le «_» représentant les périphériques défectueux.

Si votre tableau 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
. . .

Ceci décrit l’opération en cours d’application et l’avancement actuel de différentes manières. Il fournit également la vitesse actuelle et une durée estimée jusqu'à l'achèvement.

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

Arrêter 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 commandemdadm --stop:

sudo mdadm --stop /dev/md0

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

Commencer 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 en argument àmdadm --assemble:

sudo mdadm --assemble /dev/md0

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

Si le fichier de configuration ne contient pas la définition correcte pour le tableau, vous pouvez toujours démarrer le tableau en transmettant les périphériques du composant:

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

Une fois la matrice assemblée, elle peut être montée comme d'habitude:

sudo mount /dev/md0 /mnt/md0

Le tableau devrait maintenant être accessible au point de montage.

Ajout d'un périphérique de secours à un tableau

Des périphériques de rechange peuvent être ajoutés à toute matrice offrant une redondance (telle que RAID 1, 5, 6 ou 10). Le disque de secours ne sera pas utilisé activement par la baie sauf si un périphérique actif échoue. Lorsque cela se produit, le module resynchronise les données sur le disque de secours afin de le rétablir. Les pièces de rechangecannot seront ajoutées aux baies non redondantes (RAID 0) car la baie ne survivra pas à la panne d'un disque.

Pour ajouter un disque de secours, passez simplement la baie et le nouveau périphérique à la commandemdadm --add:

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

Si la matrice n'est pas dégradée, le nouveau périphérique sera ajouté en réserve. Si le périphérique est en cours de dégradation, l'opération de resynchronisation commencera immédiatement à utiliser le disque de secours pour remplacer le lecteur défectueux.

Après avoir ajouté un disque de secours, 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'utilitairemdadm pour assembler le tableau.

Augmentation du nombre de périphériques actifs dans un tableau

Il est possible d'agrandir un tableau en augmentant le nombre de périphériques actifs dans l'assemblage. La procédure exacte dépend légèrement du niveau de RAID que vous utilisez.

Avec RAID 1 ou 10

Commencez par ajouter le nouveau périphérique en réserve, 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 matrice:

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 constater que, dans cet exemple, la baie de disques est configurée pour utiliser activement deux périphériques et que le nombre total de périphériques disponibles pour la baie est de trois (car nous avons ajouté un disque de secours).

Maintenant, reconfigurez la matrice pour avoir un périphérique actif supplémentaire. Le disque de secours sera utilisé pour répondre à la demande de disque 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, tapez:

cat /proc/mdstat

Vous pouvez continuer à utiliser le périphérique à la fin du processus.

Avec RAID 5 ou 6

Commencez par ajouter le nouveau périphérique en réserve, 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 matrice:

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 constater que, dans cet exemple, la baie de disques est configurée pour utiliser activement trois périphériques et que le nombre total de périphériques disponibles pour la baie est de quatre (car nous avons ajouté un disque de secours).

Maintenant, reconfigurez la matrice pour avoir un périphérique actif supplémentaire. Le disque de secours sera utilisé pour répondre à la demande de disque 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 emplacementoff de la baie où un fichier de sauvegarde contenant des informations critiques sera stocké.

Note

[.note] # 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é. Parce que le moment où 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 le tableau. This post a 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, tapez:

cat /proc/mdstat

Vous pouvez continuer à utiliser le périphérique à la fin de ce processus.

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

sudo resize2fs /dev/md0

Votre tableau doit maintenant avoir un système de fichiers correspondant à sa capacité.

Avec RAID 0

Etant donné que les matrices RAID 0 ne peuvent pas disposer de disques de rechange (aucune réserve de rechange ne peut reconstruire une matrice RAID 0 endommagée), nous devons ajouter le nouveau périphérique en même temps que nous agrandissons la matrice.

Tout d’abord, recherchez 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 le nouvel ajout de lecteur:

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 à 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 tableau doit maintenant avoir un système de fichiers correspondant à sa capacité.

Retrait d'un périphérique d'un tableau

Le retrait d'un lecteur d'une matrice RAID est parfois nécessaire en cas d'erreur ou si vous devez permuter le disque.

Pour qu'un périphérique soit supprimé, il doit d'abord être marqué comme «en échec» dans la matrice. Vous pouvez vérifier s'il y a un périphérique défaillant en utilisantmdadm --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 devez supprimer un lecteur qui ne présente pas de problème, vous pouvez le marquer manuellement comme ayant échoué avec l'option--fail:

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

Si vous regardez la sortie demdadm --detail, vous devriez voir que le périphérique est maintenant marqué comme défectueux.

Une fois le périphérique en panne, vous pouvez le supprimer de la baie avecmdadm --remove:

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

Vous pouvez ensuite le remplacer par un nouveau lecteur, en utilisant la même commandemdadm --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 lecteur.

Supprimer 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.

Commencez par démonter 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 baie elle-même supprimée, vous devez utilisermdadm --zero-superblock sur chacun des périphériques composants. Cela effacera le superblocmd, un en-tête utilisé parmdadm pour assembler et gérer les périphériques composants dans le cadre d'un tableau. S'il est toujours présent, des problèmes peuvent survenir lorsque vous essayez de réutiliser le disque à d'autres fins.

Vous pouvez voir que le superbloc est toujours présent dans le tableau en vérifiant la colonneFSTYPE dans la sortielsblk --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 mettez en commentaire toutes les références au tableau du fichier/etc/mdadm/mdadm.conf également:

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 d'initialisation anticipée.

Conclusion

L’utilitairemdadm 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 devrez peut-être effectuer au quotidien.

Une fois que vous êtes à l'aise pour créer et gérer des matrices RAID avecmdadm, 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 des volumes logiques. De même, le chiffrement LUKS et dm-crypt est couramment utilisé pour chiffrer les périphériques RAID avant l'écriture du système de fichiers. Linux permet à toutes ces technologies d'être utilisées ensemble pour améliorer vos capacités de stockage.

Related