9. Configuration d'un volume logique et de sa sauvegarde

L'objectif de cette partie est de créer un mécanisme de sauvegarde réseau automatisé en s'appuyant sur la notion de «prise de vue» ou snapshot proposée par le gestionnaire de volume logique LVM. Dans une prise de vue instantanée, on ne stocke que les différences relativement au volume logique original.

Q45.

Quel est le paquet associé à la gestion de volume logique LVM ?

Rechercher et installer le paquet qui permet de créer et gérer des volumes physiques, logiques ainsi que des groupes.

En anglais, on parle de Logical Volume Manager ou LVM. On cherche donc un paquet avec la chaîne 'lvm'.

$ aptitude search ^lvm
p   lvm2           - gestionnaire de volumes logiques de Linux
p   lvm2-dbusd     - démon D-Bus pour LVM2
p   lvm2-lockd     - démon de verrouillage pour LVM
$ sudo apt install lvm2

Q46.

Comment créer un volume physique associé au tableau RAID1 précédemment créé ?

Rechercher dans la liste des outils ceux correspondant à la gestion de volume physique.

L'instruction de recherche habituelle est de la forme :

$ dpkg -L lvm2 | grep bin

Ce sont les outils dont le nom commence par 'pv' qui servent à manipuler les volumes physiques.

$ sudo pvcreate --help

Création du volume physique.

$ sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created.

Affichage résumé de l'état du volume physique.

$ sudo pvs
  PV         VG Fmt  Attr PSize   PFree
  /dev/md0      lvm2 ---  <31,97g <31,97g

Affichage détaillé de l'état du volume physique.

$ sudo pvdisplay
  "/dev/md0" is a new physical volume of "<31,97 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/md0
  VG Name
  PV Size               <31,97 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vUlk3p-dzZJ-MyLZ-hMcU-P9dH-oQuB-2lptum

Q47.

Comment créer un groupe de volume contenant le tableau RAID1 ?

Rechercher dans la liste des outils ceux correspondant à la gestion de groupes de volumes.

À partir du résultat de la commande de recherche de la question précédente, on relève que ce sont les outils dont le nom commence par 'vg' qui servent à manipuler les groupes de volumes.

$ sudo vgcreate --help

Création du groupe de volume avec un unique volume physique.

$ sudo vgcreate lab-vg /dev/md0
  Volume group "lab-vg" successfully created

Affichage résumé de l'état du volume physique.

$ sudo vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  lab-vg   1   0   0 wz--n- 31,96g 31,96g

Affichage détaillé de l'état du volume physique.

$ sudo vgdisplay
  --- Volume group ---
  VG Name               lab-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               31,96 GiB
  PE Size               4,00 MiB
  Total PE              8183
  Alloc PE / Size       0 / 0
  Free  PE / Size       8183 / 31,96 GiB
  VG UUID               KIq2zb-emxQ-JiT0-6wAk-tPlO-MmrN-wxzkLl

Q48.

Comment créer un volume logique à l'intérieur du groupe contenant le tableau RAID1 ?

Rechercher dans la liste des outils ceux correspondant à la gestion des volumes logiques.

Dans cet exemple, nous allons créer un volume logique de 16Go pour une capacité de 32Go. En situation réelle, il faudrait remplacer les gigaoctets par des téraoctets.

Toujours à partir du résultat de la commande de recherche des deux questions précédentes, on relève que ce sont les outils dont le nom commence par 'lv' qui servent à manipuler les volumes logiques.

$ sudo lvcreate --help

Création du volume logique de 16Go.

$ sudo lvcreate --size 16Go lab-vg
  Logical volume "lvol0" created.

Affichage résumé de l'état du volume logique.

$ sudo lvs
  LV    VG         Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvol0 lab-vg -wi-a----- 16,00g

Affichage détaillé de l'état du volume logique.

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/lab-vg/lvol0
  LV Name                lvol0
  VG Name                lab-vg
  LV UUID                8UFwye-RMgA-hzY4-8nnv-h7nK-09GA-Ff2AT2
  LV Write Access        read/write
  LV Creation host, time initiator, 2022-09-05 14:27:28 +0200
  LV Status              available
  # open                 0
  LV Size                16,00 GiB
  Current LE             4096
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

Q49.

Comment créer un système de fichiers sur le nouveau volume logique ?

Reprendre les traitements de la Section 4, « Préparer une unité de stockage » avec le nom du volume logique obtenu à la question précédente.

Formatage du système de fichiers.

$ sudo mkfs.ext4 /dev/lab-vg/lvol0
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 4194304 4k blocks and 1048576 inodes
Filesystem UUID: d94a59f2-7c67-4be7-9643-d646d1dbe2a4
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

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

Q50.

Comment monter et accéder au nouveau système de fichiers ?

Créer un sous dossier au niveau /mnt et monter le nouveau système de fichiers manuellement.

Exemple de résultats attendus.

$ sudo mkdir /mnt/lvol0

$ sudo mount /dev/lab-vg/lvol0 /mnt/lvol0/

$ mount | grep lvol0
/dev/mapper/lab--vg-lvol0 on /mnt/lvol0 type ext4 (rw,relatime)

Une fois le système de fichiers monté, il est possible de créer des dossiers et des fichiers avec les permissions adaptées. Voici un exemple avec une attribution de dossier à l'utilisateur normal etu.

$ sudo mkdir /mnt/lvol0/etu-files
$ sudo chown etu.etu /mnt/lvol0/etu-files
$ touch /mnt/lvol0/etu-files/my-first-file

Q51.

Comment visualiser l'état global des systèmes de fichiers et des montages en cours ?

Utiliser les commandes usuelles telles que df et lsblk.

Exemple de résultat attendu.

$ df -hT
Sys. de fichiers          Type     Taille Utilisé Dispo Uti% Monté sur
udev                      devtmpfs   463M       0  463M   0% /dev
tmpfs                     tmpfs       97M    700K   97M   1% /run
/dev/vda2                 ext4       117G    2,0G  109G   2% /
tmpfs                     tmpfs      484M       0  484M   0% /dev/shm
tmpfs                     tmpfs      5,0M       0  5,0M   0% /run/lock
/dev/vda1                 vfat       511M    3,5M  508M   1% /boot/efi
tmpfs                     tmpfs       97M       0   97M   0% /run/user/1000
/dev/mapper/lab--vg-lvol0 ext4        16G     28K   15G   1% /mnt/lvol0
$ lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                 8:0    0    32G  0 disk
sdb                 8:16   0    32G  0 disk
└─md0               9:0    0    32G  0 raid1
  └─lab--vg-lvol0 252:0    0    16G  0 lvm   /mnt/lvol0
sr0                11:0    1  1024M  0 rom
vda               254:0    0   120G  0 disk
├─vda1            254:1    0   512M  0 part  /boot/efi
├─vda2            254:2    0 118,5G  0 part  /
└─vda3            254:3    0   977M  0 part  [SWAP]
vdb               254:16   0    32G  0 disk
└─md0               9:0    0    32G  0 raid1
  └─lab--vg-lvol0 252:0    0    16G  0 lvm   /mnt/lvol0

Cette dernière commande illustre bien l'état de la réplication RAID1 en plus de l'utilisation du volume logique.

Q52.

Comment créer deux photos instantanées du volume logique avec des jeux de fichiers différents ?

Après avoir créé une série de fichiers, rechercher les options de la commande lvcreate qui permettent de créer la première prise de vue (snapshot).

Création de 10 fichiers vides.

$ for i in {1..10}
do
        touch /mnt/lvol0/etu-files/first-$(printf "%02d" $i)-file
done

$ ls -1 /mnt/lvol0/etu-files/
first-01-file
first-02-file
first-03-file
first-04-file
first-05-file
first-06-file
first-07-file
first-08-file
first-09-file
first-10-file
my-first-file

Première capture instantanée du système de fichiers.

$ sudo lvcreate --snapshot --name fisrt-snap -L 500M /dev/lab-vg/lvol0
  Logical volume "fisrt-snap" created.

Création de 10 nouveaux fichiers vides.

$ for i in {1..10}
do
    touch /mnt/lvol0/etu-files/second-$(printf "%02d" $i)-file
done

$ ls -1 /mnt/lvol0/etu-files/
first-01-file
first-02-file
first-03-file
first-04-file
first-05-file
first-06-file
first-07-file
first-08-file
first-09-file
first-10-file
my-first-file
second-01-file
second-02-file
second-03-file
second-04-file
second-05-file
second-06-file
second-07-file
second-08-file
second-09-file
second-10-file

Seconde capture instantanée du système de fichiers.

$ sudo lvcreate --snapshot --name second-snap -L 500M /dev/lab-vg/lvol0
  Logical volume "second-snap" created.

État du volume logique.

$ sudo lvs
LV          VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  fisrt-snap  lab-vg swi-a-s--- 500,00m      lvol0  0,01
  lvol0       lab-vg owi-aos---  16,00g
  second-snap lab-vg swi-a-s--- 500,00m      lvol0  0,01

Q53.

Comment tester la restauration du système de fichiers à partir des instantanés ?

Après avoir supprimé tous les fichiers du dossier /mnt/lvol0/etu-files/, on restaure le contenu des deux prises de vues dans l'ordre.

Suppression des fichiers du répertoire de travail.

$ rm /mnt/lvol0/etu-files/*

Restauration à partir du premier instantané.

$ sudo lvconvert --merge /dev/lab-vg/fisrt-snap
  Delaying merge since origin is open.
  Merging of snapshot lab-vg/fisrt-snap will occur on next activation of lab-vg/lvol0.

Pour que la restauration soit effective, il est nécessaire de désactiver/réactiver le volume logique à l'aide de la commande lvchange.

$ sudo lvchange --activate n lab-vg/lvol0
  Logical volume lab-vg/lvol0 is used by another device.

Aïe ! Le volume logique est en cours d'utilisation. On doit donc démonter le système de fichiers et tester à nouveau.

$ sudo umount /mnt/lvol0
$ sudo lvchange --activate n lab-vg/lvol0

Cette fois ci, le volume est enfin désactivé. On peut le réactiver.

$ sudo lvchange --activate y lab-vg/lvol0
$ sudo lvscan
  ACTIVE   Original '/dev/lab-vg/lvol0' [16,00 GiB] inherit
  ACTIVE   Snapshot '/dev/lab-vg/second-snap' [500,00 MiB] inherit

La partition est bien disponible et on a retrouvé la liste des fichiers du premier instantané.

$ sudo mount /dev/lab-vg/lvol0 /mnt/lvol0/

$ ls -1 /mnt/lvol0/etu-files/
first-01-file
first-02-file
first-03-file
first-04-file
first-05-file
first-06-file
first-07-file
first-08-file
first-09-file
first-10-file
my-first-file

Pour restaurer le contenu du second instantané, il faut reprendre les mêmes opérations à partir de la commande lvconvert.