Utilisation de LVM pour gérer un volume de disques

Objectif

Ce tutoriel peut être utilisé comme la suite du tutoriel sur la  Mise en place d’un RAID-1 Logiciel ou tout simplement avec des disques physiques non monté en RAID.

L’exemple d’installation qui suivra se base sur un volume RAID de 1000.2 Go, dont l’installation a été décrite dans le tutoriel RAID (lien ci-dessus).
Le volume physique utilisé dans tout l’exemple sera /dev/md0 (qui correspond aux RAID1 de 1000.2 Go).

Quelques explications sur LVM

Fonctionnement

LVM (ou Logical Volume Management) permet de créer une sorte de « couche d’abstraction » entre vos disques durs, unités RAID ou encore unité SAN et la gestion de vos points de montage.
Cela permet de gérer de manière plus souple vos allocations d’espace disque pour chaque point de montage.

Le principe de fonctionnement LVM se base sur des PV ou Physical Volumes (volumes physiques) tels que des disques durs, des unités RAID, des espaces distants tels que des SAN, DAS.
Toutes ces unités (PV) sont regroupées dans un VG ou Volume Groups, (groupes de volumes) pour former un espace de stockage plus important.
Dans ce (ou ces) VG, on découpe ensuite des LV ou Logical Volumes (volumes logiques) qui seront formatés puis monté sur différents points de montage.

Cela permet par la suite une plus grande souplesse de gestion de ces LV, ayant la possibilité de les redimensionner (à chaud, même si déconseillé) d’en ajouter ou d’en supprimer, sans jamais à avoir à toucher aux unités physiques (PV).

Vocabulaire

PV: Physical Volumes

Toute unité de stockage, disque dur, unité RAID, SAN, DAS forment donc des volumes physiques.

VG: Volumes Groups

Les différents volumes physiques sont concaténés dans des groupes de volumes. C’est concrètement « l’espace utile » dans lequel vous pourrez créer des systèmes de fichier et les monter.
Il faut bien entendu au minimum un Volumes Group pour pouvoir utiliser lvm.
Généralement, on créé les VG en rassemblant les unité de stockage de même caractéristique, un SAN, deux disques durs de même caractéristique…

Si vous souhaitez associer plusieurs disques dans un VG, permettant d’agrandir la capacité de stockage, il est préférable de monter un système RAID-0, car ce dernier sera beaucoup plus performant que la simple utilisation de LVM.
De plus cela peut être risqué d’associer plusieurs disques dur dans un même VG, car si l’un venait à défaillir, vous pourriez perdre l’ensemble des données de ce VG. Il est donc préférable d’utiliser du RAID en premier lieu, puis de gérer ces espaces de stockage RAID grâce à LVM.

LV: Logical Volume

les LV, Logical Volumes, sont des fragments de ces VG que vous pouvez créer dynamiquement, redimensionner. Ce sont ces éléments qui serviront à héberger un système de fichier et que vous monterez.

Installation de LVM

L’installation est extrêmement simple, elle consiste uniquement à l’installation du paquet lvm2

sudo apt-get install lvm2

Mise en place de LVM

Aperçu de l’organisation du LVM de cet exemple

Création du PV (Physical Volume)

Dans cet exemple le Physical Volume utilisé sera la partition RAID de 1To (/dev/md0). Vous devez donc lancer la commande suivante :

sudo pvcreate /dev/md0
File descriptor 4 left open
  Physical volume "/dev/md0" successfully created

Si tout se passe bien, vous aurez cette dernière phrase « successfully created« .

Création du VG (Volumes Group)

Le VG contiendra donc uniquement dans cet exemple le volume physique /dev/md0

Tapez la commande suivante pour créer un VG.

sudo vgcreate vg1 /dev/md0
File descriptor 4 left open
  Volume group "vg1" successfully created

vg1 correspond au nom du Volume Group et /dev/md0 le physical volume qui y sera inclu.

Selon le tutoriel disponible sur ubuntu-fr.org (cf. Sources), un point intéressant quant au nommage des VG et des LV est soulevé.
Il semblerait qu’avec des noms trop long, l’affichage lors de la commande df -h, par exemple, ne se fasse pas bien. L’auteur de ce tutoriel a donc préconisé une longueur maximale de 7 caractères pour l’ensemble VG/VL, soit 2 caractères pour le VG et 5 caractères pour le LV, soit 3 caractères pour le VG et 4 caractères pour le LV.
La syntaxe pour l’accès aux systèmes de fichiers des LV sera la suivante: /dev/vg1/foo où vg1 est le nom du VG et foo le nom du LV.

Afin d’obtenir des informations sur le VG précédemment créé (et de vérifier que tout est en ordre) vous pouvez taper la commande suivante :

sudo vgdisplay
File descriptor 4 left open
  --- Volume group ---
  VG Name               vg1
  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               931,51 GB
  PE Size               4,00 MB
  Total PE              238466
  Alloc PE / Size       0 / 0   
  Free  PE / Size       238466 / 931,51 GB
  VG UUID               XjP6Mq-Snc1-1GZ5-G8Hh-awbJ-V1Nr-IpPAw3

Création des LV

Maintenant que le Volume Group est créé, on peut le découper en plusieurs LV (ou volumes logiques) pour affecter des systèmes de fichiers et points de montages à chacun.

Par exemple, dans cet exemple, l’objectif est de créer une partition de 45 Go /home, une partition de 20 Go /serveurs pour tout ce qui est services (mySQL, Apache, …) et une partition de 600 Go /public pour un stockage public.
L’espace disque restant servira à agrandir ces différentes partitions au fil du temps.

Espace Serveurs

Lancez la commande suivante pour créer une partition de 20 Go pour les serveurs.

sudo lvcreate -n srv -L 20G vg1
File descriptor 4 left open
  Logical volume "srv" created

La commande lvcreate prend pas mal d’arguments, mais les deux principaux sont

  • -n pour le nom du LV (s’il n’est pas spécifié, il prendra le nom de lvol# où # est un nombre autoincrémenté géré par LVM)
  • -L (la majuscule est importante) pour la taille de ce LV
  • Le troisième argument est tout simplement le nom du VG dans lequel ce LV sera affecté.

Espace home

sudo lvcreate -n home -L 45G vg1
File descriptor 4 left open
  Logical volume "home" created

Espace Public

sudo lvcreate -n public -L 600G vg1
File descriptor 4 left open
  Logical volume "public" created

Une fois tous les LV créés, vous pouvez lancer la commande lvdisplay pour vous assurer que tout est en ordre

sudo lvdisplay 
File descriptor 4 left open
  --- Logical volume ---
  LV Name                /dev/vg1/srv
  VG Name                vg1
  LV UUID                08SrI7-o4JU-avRr-k8HM-Y90Z-ctNq-a0vgmB
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                20,00 GB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0
   
  --- Logical volume ---
  LV Name                /dev/vg1/home
  VG Name                vg1
  LV UUID                fgs6qj-2etI-iJwr-bAhH-TGXw-z6Nf-dwzhsg
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                45,00 GB
  Current LE             6400
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
   
  --- Logical volume ---
  LV Name                /dev/vg1/public
  VG Name                vg1
  LV UUID                kM8miD-HICf-cKh4-aVvD-z4GR-g3OH-tShVt6
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                600,00 GB
  Current LE             153600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:4

Formatage et Montage des LV

Une fois tous vos LV créés, il suffit de les formater (dans cet exemple, tout se fera en ext3) puis de les monter (et bien sûr, de les ajouter au fstab, afin qu’ils soient automatiquement montés au démarrage de la machine)

Formatage

Le formatage est tout à fait classique, de la même manière que l’on formaterait un disque dur physique

sudo mkfs -t ext3 /dev/vg1/srv
sudo mkfs -t ext3 /dev/vg1/home
sudo mkfs -t ext3 /dev/vg1/public

Montage et inscription dans /etc/fstab

Pour les monter, rien de plus simple:

sudo mkdir /public /serveurs
sudo mount /dev/vg1/public /public
sudo mount /dev/vg1/src /serveurs

pour la home, c’est plus délicat, puisqu’elle est déjà utilisée. Il faut donc, monter temporairement le système de fichiers afin de copier les données

sudo mkdir /home_tmp
sudo mount /dev/vg1/home /home_tmp
sudo cp -r /home/* /home_tmp/
sudo umount /home_tmp

Puis inscrire tous les LV dans la table de montage /etc/fstab comme ceci:

sudo vim /etc/fstab
# Volumes Logiques LVM
# SRV (Partition Serveurs)
/dev/vg1/srv           /serveurs   ext3    relatime    0    2
# HOME (Partitions home)
/dev/vg1/home          /home       ext3    relatime    0    2
# PUBLIC (Partition Public)
/dev/vg1/public        /public     ext3    relatime    0    2

Voilà ! La mise en place est terminée.

Administration de LVM

Agrandissement d’un volume logique

Pour agrandir un volume logique, il est préférable de démonter en premier lieu la partition à redimensionner.

Dans cet exemple, la partition à agrandir sera /dev/vg1/srv. Elle a été créée avec 20 Go et sera agrandie à 35 Go.

Première étape, démontage de la partition:

sudo umount /serveurs

Une fois démontée, on agrandit le volume logique avec la commande lvresize

Attention:
Il est primordial que la nouvelle taille choisie soit supérieure à celle du système de fichier actuel. Dans cet exemple, il faut que la nouvelle taille du volume logique soit supérieur à 20 Go. Sinon vous détruiriez complètement le système de fichier contenu dans le volume logique ! (Donc toutes les données se trouvant dans /serveurs)
sudo lvresize -L 35G /dev/vg1/srv
File descriptor 4 left open
  Extending logical volume srv to 35,00 GB
  Logical volume srv successfully resized

Après l’agrandissement logique, il faut à présent agrandir le système de fichier contenu dans ce volume logique. Etant donné que le système de fichier est au format ext3, la commande à utiliser est resize2fs

Il peut arriver que le redimensionnement du système de fichier ne fonctionne pas. Dans ce cas, il faut lancer une vérification du système de fichier comme cela:
sudo e2fsck -f /dev/vg1/srv
e2fsck 1.41.4 (27-Jan-2009)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/vg1/srv : 11/1638400 fichiers (0.0% non contigus), 146882/6553600 blocs
Une fois terminée, vous pouvez redimensionner le système de fichier

Lancez la commande suivante (la nouvelle taille par défaut sera l’intégralité du volume physique, à savoir 35 Go)

sudo resize2fs /dev/vg1/srv
resize2fs 1.41.4 (27-Jan-2009)
Resizing the filesystem on /dev/vg1/srv to 9175040 (4k) blocks.
Le système de fichiers /dev/vg1/srv a maintenant une taille de 9175040 blocs.

Il ne reste plus qu’à remonter le système de fichier

sudo mount /serveurs

Et vérifier que la taille est correcte:

sudo df -h | grep srv
/dev/mapper/vg1-srv   35G  177M   33G   1% /serveurs

Rétrécissement d’un volume logique

Création d’un nouveau volume logique

Suppression d’un volume logique

Afin de supprimer un volume logique, il faut d’abord le démonter.

sudo umount /dev/vg1/srv

Puis une fois démonté, il suffit simplement de lancer la commande lvremove

sudo lvremove /dev/vg1/srv

Le volume logique est supprimé et la place qu’il occupait de nouveau disponible.

Est-il nécessaire de rappeler que si vous supprimez un volume logique, les données seront définitivement perdues. Pensez à faire une sauvegarde en cas de besoin !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *