Linux sans magie #45 — Créer un volume logique avec LVM

Créer un LV dans un groupe existant, puis distinguer formatage, montage et vérifications.

Dans le #44, nous avons identifié les trois niveaux essentiels de LVM : Physical Volume (PV), Volume Group (VG) et Logical Volume (LV). Nous savons désormais distinguer la capacité libre d'un VG de celle d'un filesystem.

Il reste à passer à une opération concrète. Un système Linux dispose déjà d'un VG avec de l'espace libre. Une application a besoin d'un volume séparé pour ses données. Comment allouer une partie de cette capacité, la rendre utilisable et vérifier que le résultat correspond bien à ce qui était prévu ?

La réponse n'est pas simplement lvcreate. Créer un LV, créer un filesystem et monter ce filesystem sont trois actions distinctes.

Contexte : disposer d'un VG ne suffit pas

Prenons un système — PC, serveur physique, machine virtuelle ou instance cloud — dans lequel LVM est déjà configuré.

périphérique(s) de stockage
            ↓
       PV existants
            ↓
       VG : vgdata
       ├── LV : lvapp
       └── espace libre

Le besoin est de créer un nouveau LV nommé lvprojet de 10 GiB, sans toucher au LV lvapp.

Ce scénario suppose un VG existant et suffisamment d'espace disponible. La préparation de nouveaux PV avec pvcreate ou la création d'un VG avec vgcreate constituent d'autres opérations, potentiellement destructives, qui ne sont pas nécessaires ici.

Le nom vgdata est un exemple. En pratique, il faut utiliser le vrai nom du VG, relevé sur le système cible.

Ce que fait réellement lvcreate

Un LV est un périphérique bloc géré par LVM. Sa capacité est attribuée depuis les extents disponibles dans son VG.

La commande de création d'un LV linéaire est, par exemple :

lvcreate --size 10G --name lvprojet vgdata

--size 10G demande une taille logique de 10 GiB ; --name définit le nom ; vgdata désigne le VG dans lequel LVM cherchera de l'espace.

La commande est une écriture dans les métadonnées LVM. Elle ne doit pas être exécutée avant d'avoir vérifié le VG et son contenu. Elle ne crée ni filesystem, ni répertoire de montage.

Après création, le LV peut être accessible par un chemin tel que :

/dev/vgdata/lvprojet

Le système peut aussi présenter une entrée équivalente dans /dev/mapper. Il ne faut pas déduire le chemin exact d'un nom aperçu dans un tutoriel : on le vérifie avec lvs et lsblk.

Préparer le changement : lire l'existant

Avant d'envisager une écriture :

lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,MOUNTPOINTS
sudo pvs -o pv_name,vg_name,pv_size,pv_free
sudo vgs -o vg_name,pv_count,lv_count,vg_size,vg_free
sudo lvs -o vg_name,lv_name,lv_size,lv_path,lv_attr

Ces commandes permettent de répondre à quatre questions :

  • Quel VG contient l'espace disponible ?
  • Les PV associés sont-ils ceux attendus ?
  • Un LV porte-t-il déjà le nom envisagé ?
  • Les montages et filesystems existants correspondent-ils à l'inventaire ?

La valeur VFree concerne la capacité non attribuée du VG. Elle ne décrit pas l'espace libre d'un LV existant et ne doit pas être comparée directement à df -h.

Si la capacité libre est insuffisante, n'improvisez pas la suppression ou la réduction d'un autre LV. Ces changements nécessitent leur propre analyse et une procédure de sauvegarde.

Prévisualiser la création avec le mode test

Sur les versions de LVM qui le prennent en charge, l'option --test simule certaines étapes d'une commande sans écrire les métadonnées LVM.

lvcreate --test --size 10G --name lvprojet vgdata

Il s'agit d'un contrôle préalable, et non d'une garantie de réussite de la création réelle. Des opérations dépendant du noyau, des périphériques ou de l'activation peuvent ne pas se comporter comme lors d'une exécution normale.

Consultez l'aide et la documentation de la version installée avant de considérer le résultat de --test comme interprétable. Le mode test ne remplace ni l'inventaire, ni la sauvegarde, ni la validation du changement.

Mise en pratique : préparer puis créer un LV

Public visé : administrateurs Linux, SysOps et ingénieurs infrastructure.

Prérequis : Linux avec lvm2, privilèges adaptés et VG existant contenant au moins 10 GiB libres. Le scénario de création est destiné à un VG de test explicitement identifié et ne contenant aucune donnée à préserver sur le futur LV.

Objectif vérifiable : obtenir un LV linéaire nommé lvprojet, y créer ext4, le monter sur un répertoire dédié et retrouver un fichier témoin.

Durée indicative : 20 à 30 minutes. Les commandes sont données pour un environnement de test préparé ; aucune exécution réelle n'est revendiquée.

Étape 1 — Vérifier l'identité du VG

sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -o vg_name,lv_name,lv_path,lv_size

Vérifiez que vgdata existe réellement, que lvprojet n'existe pas déjà et que la capacité restante est suffisante.

Les noms ci-dessous sont des exemples. N'exécutez aucune commande de création en remplaçant arbitrairement un VG de production par vgdata.

Étape 2 — Créer le LV, uniquement sur le VG prévu

Sur un VG que vous avez identifié et explicitement réservé à cet exercice :

sudo lvcreate --type linear --size 10G --name lvprojet vgdata

--type linear rend explicite le type de LV choisi. LVM attribue des extents du VG et crée un nouveau périphérique logique.

N'exécutez pas cette commande si un LV du même nom existe déjà ou si l'opération ne figure pas dans le périmètre autorisé.

Étape 3 — Contrôler le périphérique créé

sudo lvs -o vg_name,lv_name,lv_size,lv_path,lv_attr
lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,MOUNTPOINTS

Le nouveau LV doit apparaître dans le bon VG, avec une taille proche de celle demandée. Une légère différence peut résulter de l'allocation par extents.

À ce stade, il ne devrait pas encore héberger le filesystem ext4 que nous allons créer.

Étape 4 — Formater le LV neuf

Cette étape écrit sur le périphérique bloc et détruirait un filesystem déjà présent. Effectuez-la exclusivement sur le LV neuf dont le chemin a été confirmé à l'étape précédente.

sudo mkfs.ext4 /dev/vgdata/lvprojet
sudo blkid /dev/vgdata/lvprojet

mkfs.ext4 crée les structures du filesystem. blkid permet ensuite de relever son type et son UUID. L'UUID est utile pour monter le filesystem sans dépendre uniquement d'un chemin de périphérique.

Étape 5 — Monter le filesystem

Après avoir vérifié que le répertoire /mnt/lvprojet n'est pas déjà utilisé :

sudo mkdir -p /mnt/lvprojet
findmnt /mnt/lvprojet
sudo mount /dev/vgdata/lvprojet /mnt/lvprojet

La commande findmnt doit être examinée avant le montage : si le répertoire est déjà un point de montage, arrêtez-vous et investiguez.

mount rend le filesystem accessible depuis l'arborescence Linux. Le volume logique et le filesystem ne se confondent toujours pas avec le point de montage.

Étape 6 — Vérifier le résultat et les données

findmnt /mnt/lvprojet
df -hT /mnt/lvprojet
lsblk -f
printf 'test LVM\n' | sudo tee /mnt/lvprojet/temoin.txt >/dev/null
sudo cat /mnt/lvprojet/temoin.txt

Le LV doit être visible dans lsblk, le filesystem ext4 dans findmnt et sa capacité dans df. La lecture du témoin confirme que le montage accepte les écritures et les lectures.

La capacité utilisable affichée par df peut être inférieure à la taille du LV à cause des métadonnées et réserves ext4.

Rendre le montage persistant : une étape à part

Un montage manuel ne garantit pas sa présence au prochain démarrage. Une entrée /etc/fstab peut le rendre persistant, idéalement en utilisant l'UUID du filesystem.

Exemple de structure, à adapter après lecture du véritable UUID :

UUID=<UUID_DU_FILESYSTEM> /mnt/lvprojet ext4 defaults 0 2

Ne collez pas cette ligne telle quelle. Une erreur dans fstab peut empêcher un montage attendu ou compliquer le démarrage. Avant toute modification, sauvegardez /etc/fstab, contrôlez la correspondance UUID/montage et utilisez les outils de vérification adaptés à la distribution.

La gestion détaillée de fstab a déjà été abordée dans le #39 ; l'objet principal du #45 reste la création du LV.

Bonnes pratiques opérationnelles

Un LV doit porter un nom lié à son usage. Gardez de la capacité libre dans le VG lorsqu'une croissance ultérieure est plausible, plutôt que d'attribuer systématiquement 100%FREE à un nouveau volume.

Consignez les dépendances des PV, la taille du VG, le chemin des LV, les UUID des filesystems et leurs points de montage. Surveillez deux indicateurs différents : espace libre du VG avec vgs et occupation des filesystems avec df.

La création d'un LV classique n'ajoute aucune redondance. Si le VG dépend de plusieurs PV, une panne de support peut affecter les volumes dont les extents y résident.

Sécurité

Les commandes de découverte (pvs, vgs, lvs, lsblk) doivent précéder lvcreate et mkfs.ext4. Un mauvais nom de VG ou un chemin de LV erroné peut provoquer une modification du mauvais stockage.

Avant une intervention en production, vérifiez l'autorisation de changement, les sauvegardes restaurables et les applications concernées. Ne formatez jamais un LV déjà utilisé pour « repartir proprement » sans procédure explicite de migration ou de restauration.

Coûts

Les outils LVM eux-mêmes n'induisent pas de coût logiciel spécifique. Les supports physiques, volumes provisionnés, snapshots et sauvegardes peuvent être facturés ou mobiliser des ressources selon l'environnement.

Créer un LV dans un VG déjà provisionné n'augmente pas nécessairement la taille du stockage acheté, mais consomme une partie de sa capacité disponible.

Limites et points de vigilance

Ce scénario traite d'un LV linéaire classique et d'ext4, sur un VG déjà existant. Il ne détaille ni les thin pools, ni les volumes RAID ou miroirs LVM, ni les volumes chiffrés, ni XFS.

Les options de lvcreate peuvent changer selon le type de volume. Certaines distributions appliquent également des règles particulières de découverte des périphériques LVM. Ne transposez pas le scénario sans adapter le type de LV et les prérequis.

Rollback et nettoyage

Pour retirer uniquement le volume neuf créé pour cet exercice, commencez par démonter le filesystem puis vérifier l'absence d'utilisation :

sudo umount /mnt/lvprojet
findmnt /mnt/lvprojet

La suppression du LV efface définitivement l'accès à ses données. N'exécutez l'opération ci-dessous que sur le LV de test identifié, après avoir vérifié son nom et son contenu :

lvremove /dev/vgdata/lvprojet

Cette commande est volontairement laissée comme instruction à valider, plutôt que comme ligne de nettoyage automatique. Si une entrée fstab a été ajoutée, elle doit également être retirée ou adaptée avant suppression.

Enfin, si le répertoire /mnt/lvprojet a été créé exclusivement pour cet exercice et qu'il est vide :

sudo rmdir /mnt/lvprojet

Aucune suppression de LV ne constitue un mécanisme de retour arrière équivalent à une sauvegarde.

Références officielles

Conclusion

Un LV est un périphérique bloc créé dans un VG. lvcreate lui attribue de l'espace mais ne crée pas automatiquement un filesystem, et un filesystem ne devient accessible qu'après montage.

La procédure repose sur une séparation stricte : identifier le VG, vérifier l'espace libre, créer le LV prévu, formater uniquement la nouvelle cible puis valider le montage et les données.

Dans le #46, nous verrons comment étendre un volume LVM lorsque les besoins de stockage augmentent, en distinguant l'extension du LV de celle du filesystem.