Configurer le stockage RAID et LVM sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous apprendrez à configurer et à gérer des solutions de stockage avancées dans un environnement Linux. Vous utiliserez deux outils puissants : le gestionnaire de volumes logiques (LVM) pour une gestion flexible des volumes, et mdadm pour le RAID (Redundant Array of Independent Disks) logiciel. Cet atelier offre une expérience pratique de la mise en place d'une infrastructure de stockage robuste et évolutive via la ligne de commande, en utilisant des périphériques de boucle (loop devices) pour simuler des disques physiques.

Vous commencerez par initialiser des volumes physiques LVM et créer un groupe de volumes. Ensuite, vous créerez, formaterez, monterez et redimensionnerez un volume logique pour comprendre sa nature dynamique. Vous procéderez ensuite à la construction et au montage d'une grappe RAID 1 (miroir) pour la redondance des données. Pour conclure l'atelier, vous vous assurerez que ces configurations de stockage persistent après le redémarrage du système en modifiant les fichiers /etc/fstab et mdadm.conf.

Initialiser LVM avec pvcreate et vgcreate

Dans cette étape, vous allez commencer à travailler avec le gestionnaire de volumes logiques (LVM). LVM est un outil puissant pour gérer les périphériques de stockage sous Linux. Il ajoute une couche d'abstraction entre vos disques durs physiques et les systèmes de fichiers, permettant des configurations plus flexibles comme le redimensionnement des volumes à la volée.

Les composants de base de LVM sont :

  • Volumes Physiques (PV) : Ce sont vos périphériques blocs, tels que des partitions de disque dur ou, dans notre cas, des disques simulés.
  • Groupes de Volumes (VG) : Ce sont des pools de stockage créés en regroupant un ou plusieurs volumes physiques.
  • Volumes Logiques (LV) : Ce sont les « partitions virtuelles » que vous créez à partir de l'espace disponible dans un groupe de volumes. Vous créerez des systèmes de fichiers sur ces LV.

Tout d'abord, assurons-nous que les outils nécessaires, lvm2 et mdadm, sont installés.

sudo apt-get update && sudo apt-get install -y lvm2 mdadm

Comme nous n'avons pas de disques durs physiques de rechange dans cet environnement, nous allons les simuler à l'aide de périphériques de boucle. Un périphérique de boucle permet de traiter un fichier comme un périphérique bloc. Commençons par créer deux fichiers de 256 Mo dans votre répertoire de projet qui feront office d'images de disque.

truncate -s 256M disk1.img disk2.img

Maintenant, vérifiez que les fichiers ont été créés avec la bonne taille.

ls -lh

Vous devriez voir une sortie similaire à celle-ci :

total 0
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk1.img
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk2.img

Ensuite, associez ces fichiers images à des périphériques de boucle. Nous utiliserons /dev/loop20 et /dev/loop21.

sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img

Maintenant que nous avons nos « disques » (/dev/loop20 et /dev/loop21), nous pouvons les initialiser en tant que volumes physiques LVM à l'aide de la commande pvcreate.

sudo pvcreate /dev/loop20 /dev/loop21

La sortie confirme que les PV ont été créés avec succès :

  Physical volume "/dev/loop20" successfully created.
  Physical volume "/dev/loop21" successfully created.

Vous pouvez afficher un résumé des volumes physiques avec pvs ou obtenir une vue plus détaillée avec pvdisplay.

sudo pvs
  PV           VG   Fmt  Attr PSize   PFree
  /dev/loop20       lvm2 ---  256.00m 256.00m
  /dev/loop21       lvm2 ---  256.00m 256.00m

Nos volumes physiques étant prêts, l'étape suivante consiste à créer un groupe de volumes nommé labvg qui combine le stockage des deux PV. Nous utiliserons la commande vgcreate pour cela.

sudo vgcreate labvg /dev/loop20 /dev/loop21

La sortie de réussite sera :

  Volume group "labvg" successfully created

Enfin, inspectons notre nouveau groupe de volumes en utilisant vgs pour un résumé ou vgdisplay pour les détails.

sudo vgs

La sortie montre notre groupe labvg, qui a une taille totale d'environ 512 Mo (256 Mo de chaque PV).

  VG    #PV #LV #SN Attr   VSize   VFree
  labvg   2   0   0 wz--n- 512.00m 512.00m

Vous avez maintenant initialisé avec succès deux périphériques en tant que volumes physiques et les avez combinés en un seul groupe de volumes, préparant ainsi le terrain pour la création de volumes logiques flexibles.

Créer et monter un volume logique avec lvcreate et mkfs

Dans cette étape, vous utiliserez le groupe de volumes labvg que vous avez créé précédemment pour générer un volume logique (LV). Un LV est l'équivalent LVM d'une partition. Une fois créé, vous pouvez le formater avec un système de fichiers et le monter pour le rendre accessible au stockage de données.

Tout d'abord, créons un volume logique de 200 Mo nommé lablvm à partir du pool de stockage labvg. Nous utilisons la commande lvcreate, en spécifiant la taille avec l'option -L et le nom avec l'option -n.

sudo lvcreate -L 200M -n lablvm labvg

Vous verrez un message de confirmation :

  Logical volume "lablvm" created.

Vous pouvez maintenant visualiser votre nouveau LV avec la commande lvs, qui fournit un résumé de tous les volumes logiques.

sudo lvs

La sortie affichera votre nouveau lablvm au sein du groupe labvg.

  LV     VG    Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lablvm labvg -wi-a----- 200.00m

Le nouveau LV, accessible en tant que périphérique sur /dev/labvg/lablvm, est actuellement un périphérique bloc brut et non formaté. Pour y stocker des fichiers, vous devez d'abord créer un système de fichiers. Nous utiliserons la commande mkfs.ext4 pour le formater avec le système de fichiers courant ext4.

sudo mkfs.ext4 /dev/labvg/lablvm

La commande affichera les détails du système de fichiers qu'elle a créé :

mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: 28796151-bd37-4cae-a17f-071db8795919
Superblock backups stored on blocks:
        32768

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Ensuite, vous avez besoin d'un répertoire pour servir de « point de montage ». Il s'agit d'un répertoire vide où le système de fichiers du LV sera rattaché à l'arborescence principale des répertoires. Créons un répertoire nommé /lablvm à la racine.

sudo mkdir /lablvm

Enfin, utilisez la commande mount pour attacher le système de fichiers de votre LV (/dev/labvg/lablvm) au point de montage (/lablvm).

sudo mount /dev/labvg/lablvm /lablvm

Pour confirmer que le volume est correctement monté et vérifier son espace disponible, utilisez la commande df -h (disk free, format lisible).

df -h /lablvm

La sortie montre que le périphérique est monté et dispose d'environ 200 Mo d'espace disponible.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  172M   24K  158M   1% /lablvm

Vous avez maintenant créé, formaté et monté avec succès un volume logique, le rendant prêt à l'emploi.

Redimensionner un volume logique LVM avec lvresize

Dans cette étape, vous allez explorer l'une des fonctionnalités les plus puissantes de LVM : la possibilité de redimensionner un volume logique et son système de fichiers alors qu'il est en ligne et en cours d'utilisation. Cette flexibilité est un avantage majeur par rapport aux partitions statiques traditionnelles.

Tout d'abord, reconfirmons la taille actuelle de votre volume logique monté à l'aide de la commande df -h.

df -h /lablvm

Vous verrez que le volume fait environ 200 Mo.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  194M  2.6M  179M   2% /lablvm

Maintenant, imaginez que votre application s'exécutant sur /lablvm manque d'espace. Vous devez augmenter sa capacité de 200 Mo à 300 Mo. Vous pouvez le faire avec la commande lvresize. Nous utiliserons l'option -r, qui est très importante car elle indique à lvresize de redimensionner également le système de fichiers contenu dans le volume logique. Sans elle, le système de fichiers resterait à sa taille d'origine et le nouvel espace serait inutilisable.

sudo lvresize -r -L 300M /dev/labvg/lablvm

La sortie montre que le volume logique et le système de fichiers sont tous deux en cours de redimensionnement.

  Size of logical volume labvg/lablvm changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
  Logical volume labvg/lablvm successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/labvg-lablvm is mounted on /lablvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/labvg-lablvm is now 76800 (4k) blocks long.

Vérifiez à nouveau l'espace disque avec df -h pour constater le changement.

df -h /lablvm

Le volume fait maintenant environ 300 Mo.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  293M  2.6M  275M   1% /lablvm

Parfois, vous ne voulez pas définir une nouvelle taille absolue, mais plutôt ajouter une certaine quantité d'espace. Ajoutons encore 100 Mo au volume. Vous pouvez le faire en utilisant un signe + avant la taille. Pour cette démonstration, nous utiliserons la méthode de la taille absolue pour garantir la fiabilité.

sudo lvresize -r -L 400M /dev/labvg/lablvm

Si vous rencontrez une erreur de système de fichiers lors des opérations de redimensionnement, ne vous inquiétez pas : cela peut arriver occasionnellement lors de redimensionnements consécutifs rapides. Dans ce cas, vous pouvez rétablir la situation en démontant le système de fichiers, en effectuant une vérification du système de fichiers, puis en le remontant :

## Si vous obtenez une erreur de système de fichiers, exécutez ces commandes de récupération :
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm

Enfin, exécutez df -h une dernière fois pour voir le résultat final.

df -h /lablvm

Le volume fait maintenant environ 400 Mo, et l'espace libre dans votre groupe de volumes labvg a été réduit en conséquence.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  392M  2.7M  369M   1% /lablvm

Vous avez maintenant redimensionné avec succès un volume LVM en direct à deux reprises, démontrant ainsi la facilité avec laquelle vous pouvez gérer l'allocation de stockage sans interruption de service.

Construire et monter une grappe RAID 1 avec mdadm

Dans cette étape, vous allez passer de LVM à une autre technologie de stockage puissante : le RAID (Redundant Array of Independent Disks). Vous utiliserez l'utilitaire mdadm pour créer une grappe RAID 1, également appelée miroir. Dans une configuration RAID 1, les données sont écrites de manière identique sur deux disques, assurant ainsi la redondance. Si un disque tombe en panne, les données sont toujours en sécurité sur l'autre.

Tout d'abord, nous avons besoin de deux disques simulés supplémentaires pour notre grappe RAID. Créons deux nouveaux fichiers images de disque de 256 Mo, disk3.img et disk4.img, dans votre répertoire ~/project.

truncate -s 256M disk3.img disk4.img

Ensuite, associez ces nouveaux fichiers images à des périphériques de boucle inutilisés, /dev/loop22 et /dev/loop23.

sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img

Vous êtes maintenant prêt à construire la grappe RAID 1. Nous utiliserons la commande mdadm pour créer un nouveau périphérique RAID nommé /dev/md0 en utilisant nos deux périphériques de boucle.

  • --create /dev/md0 : Crée un nouveau périphérique RAID nommé /dev/md0.
  • --level=1 : Spécifie le niveau de RAID, dans ce cas, RAID 1 (miroir).
  • --raid-disks=2 : Spécifie que la grappe sera composée de deux disques.
  • /dev/loop22 /dev/loop23 : Les périphériques composants de la grappe.

Exécutez la commande suivante :

sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/loop22 /dev/loop23

Le système demandera une confirmation avant de continuer. Tapez y et appuyez sur Entrée pour poursuivre.

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Vous pouvez vérifier l'état de votre nouvelle grappe RAID en consultant le fichier /proc/mdstat.

cat /proc/mdstat

La sortie montre que /dev/md0 est actif et utilise /dev/loop23 et /dev/loop22. Vous pourriez également voir la grappe en cours de synchronisation (resync), ce qui est normal. La grappe est utilisable même pendant que ce processus se termine.

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 loop13[1] loop12[0]
      261120 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  0.4% (1088/261120) finish=0.1min speed=21760K/sec

unused devices: <none>

Tout comme le volume LVM, le nouveau périphérique RAID /dev/md0 a besoin d'un système de fichiers. Formatons-le avec ext4.

sudo mkfs.ext4 /dev/md0

Ensuite, créez un point de montage pour la grappe RAID.

sudo mkdir /labraid

Enfin, montez le périphérique RAID sur le nouveau répertoire.

sudo mount /dev/md0 /labraid

Vérifiez que la grappe RAID est correctement montée à l'aide de df -h.

df -h /labraid

La sortie confirme que le périphérique /dev/md0, d'une taille totale d'environ 256 Mo (puisqu'il s'agit d'un miroir), est monté et prêt à l'emploi.

Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        249M  2.6M  234M   2% /labraid

Vous avez créé et monté avec succès une grappe RAID 1, offrant une redondance des données pour le point de montage /labraid.

Persister les montages et la configuration RAID avec /etc/fstab et mdadm.conf

Dans cette dernière étape, vous allez rendre vos configurations LVM et RAID permanentes. Actuellement, si vous redémarriez le système, la grappe RAID ne serait pas automatiquement réassemblée, et ni le volume LVM ni la grappe RAID ne seraient montés. Pour corriger cela, vous devez mettre à jour deux fichiers de configuration clés : /etc/mdadm/mdadm.conf pour la grappe RAID et /etc/fstab pour les points de montage.

Tout d'abord, occupons-nous de la grappe RAID. Le système doit savoir comment réassembler /dev/md0 au moment du démarrage. L'utilitaire mdadm peut générer la ligne de configuration nécessaire pour vous.

Exécutez la commande suivante pour scanner la grappe active et afficher sa configuration :

sudo mdadm --detail --scan

La sortie est une ligne unique décrivant votre grappe.

ARRAY /dev/md0 metadata=1.2 name=<hostname>:0 UUID=<some-uuid>

Maintenant, ajoutons cette configuration au fichier de configuration mdadm, situé à l'emplacement /etc/mdadm/mdadm.conf. Nous allons rediriger la sortie de la commande de scan directement dans le fichier en utilisant tee.

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Vous pouvez vérifier que la ligne a été ajoutée en consultant le contenu du fichier :

cat /etc/mdadm/mdadm.conf

Ensuite, vous devez indiquer au système de monter automatiquement vos systèmes de fichiers au démarrage. Cela se fait en ajoutant des entrées dans /etc/fstab (la table des systèmes de fichiers). Chaque ligne de ce fichier définit un point de montage.

Ajoutons d'abord l'entrée pour votre volume LVM. Nous utiliserons echo pour créer la ligne et tee -a pour l'ajouter à /etc/fstab avec les privilèges sudo.

echo '/dev/labvg/lablvm /lablvm ext4 defaults 0 0' | sudo tee -a /etc/fstab

Faites de même pour le point de montage de la grappe RAID.

echo '/dev/md0 /labraid ext4 defaults 0 0' | sudo tee -a /etc/fstab

Vous pouvez vérifier que les deux lignes ont été ajoutées correctement en consultant les deux dernières lignes du fichier /etc/fstab.

tail -n 2 /etc/fstab

Vous devriez voir les deux lignes que vous venez d'ajouter :

/dev/labvg/lablvm /lablvm ext4 defaults 0 0
/dev/md0 /labraid ext4 defaults 0 0

Pour tester que vos entrées dans /etc/fstab sont correctes sans redémarrer, vous pouvez démonter les systèmes de fichiers puis utiliser la commande mount -a, qui monte tous les systèmes de fichiers répertoriés dans /etc/fstab.

Tout d'abord, démontez les deux volumes :

sudo umount /lablvm
sudo umount /labraid

Maintenant, exécutez mount -a pour que le système lise /etc/fstab et monte tout.

sudo mount -a

Enfin, vérifiez qu'ils sont à nouveau montés à l'aide de df -h.

df -h /lablvm /labraid

La sortie devrait montrer les deux systèmes de fichiers montés, exactement comme ils l'étaient auparavant.

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm  392M  2.7M  369M   1% /lablvm
/dev/md0                  249M  2.6M  234M   2% /labraid

Félicitations ! Vous avez configuré avec succès votre système pour assembler automatiquement votre grappe RAID et monter vos systèmes de fichiers LVM et RAID au démarrage.

Résumé

Dans cet atelier, vous avez appris les bases de la gestion avancée du stockage sous Linux à l'aide de LVM et du RAID logiciel. Vous avez commencé par simuler des disques physiques avec truncate et losetup, puis vous les avez initialisés en tant que volumes physiques LVM (PV) avec pvcreate. Ces PV ont ensuite été regroupés dans un groupe de volumes (VG) à l'aide de vgcreate. À partir de ce pool de stockage, vous avez créé un volume logique (LV) flexible avec lvcreate, vous l'avez formaté avec un système de fichiers ext4 à l'aide de mkfs, et vous l'avez monté sur le système. Une fonctionnalité clé de LVM a été démontrée par le redimensionnement dynamique du LV avec lvresize et l'extension du système de fichiers pour utiliser le nouvel espace avec resize2fs.

De plus, vous avez configuré une grappe RAID 1 (miroir) logicielle à l'aide de l'utilitaire mdadm pour assurer la redondance des données. Après avoir construit la grappe à partir de deux disques simulés, vous l'avez formatée et montée de la même manière que le volume LVM. L'atelier s'est conclu par la mise en place de la persistance de ces configurations après redémarrage. Cela a été accompli en ajoutant les points de montage du volume LVM et de la grappe RAID dans /etc/fstab, et en enregistrant les détails de configuration de la grappe RAID dans /etc/mdadm/mdadm.conf.