Le thin provisioning LVM alloue l'espace disque au fur et à mesure des écritures, pas à la création du volume. Vous pouvez ainsi tailler des volumes dont la somme des tailles déclarées dépasse l'espace physique réellement disponible, le fameux sur-engagement. Ce guide montre comment créer un thin pool, y provisionner des volumes, surveiller son remplissage avec le Data%, et configurer l'extension automatique pour éviter la saturation. Pour administrateurs Linux intermédiaires, sur Debian/Ubuntu et RHEL/AlmaLinux. Toutes les sorties proviennent d'un test réel sur AlmaLinux 10 (LVM 2.03.36).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Distinguer un thin pool d'un thin volume
- Créer un pool et y tailler des volumes sur-engagés avec
lvcreate --thin - Lire le
Data%pour suivre la consommation réelle - Configurer l'extension automatique (
thin_pool_autoextend_threshold) - Comprendre le danger d'un pool plein et le prévenir
Prérequis
Section intitulée « Prérequis »Une pile LVM fonctionnelle (voir le guide LVM) et les outils thin installés. Sur RHEL et AlmaLinux 10, lvm2 tire déjà device-mapper-persistent-data ; sur Debian 13, thin-provisioning-tools n'est qu'une recommandation de lvm2, absente d'une installation minimale :
sudo apt install thin-provisioning-tools lvm2sudo dnf install device-mapper-persistent-data lvm2Sans ces outils, LVM crée quand même le pool, mais il ne peut plus en vérifier les métadonnées : à chaque activation, il affiche « WARNING: Check is skipped, please install recommended missing binary /usr/sbin/thin_check! ». Un pool dont les métadonnées ne sont jamais contrôlées est un pool dont on découvrira la corruption trop tard. Le noyau doit aussi charger le module dm-thin-pool, présent par défaut sur toutes les distributions récentes.
Thin pool et thin volume : le modèle
Section intitulée « Thin pool et thin volume : le modèle »Le thin provisioning ajoute un niveau d'indirection. Au lieu de tailler un volume directement dans le Volume Group, on crée d'abord un thin pool (un réservoir d'espace réel), puis on provisionne des thin volumes à l'intérieur de ce pool. Chaque thin volume annonce une taille (sa taille virtuelle), mais ne consomme l'espace physique du pool qu'au moment où des données y sont écrites.
La conséquence directe est le sur-engagement (overcommit) : la somme des tailles virtuelles des volumes peut dépasser la taille réelle du pool, exactement comme une banque prête plus d'argent qu'elle n'a de liquidités, en pariant que tous les clients ne retirent pas tout en même temps.
Créer un thin pool et un thin volume
Section intitulée « Créer un thin pool et un thin volume »On crée le pool avec --type thin-pool, puis un volume avec --thin en indiquant sa taille virtuelle via -V :
-
Créer le thin pool (ici 1,5 Gio d'espace réel) dans un VG nommé
vg_data:Fenêtre de terminal sudo lvcreate --type thin-pool -L 1.5G -n pool0 vg_dataThin pool volume with chunk size 64.00 KiB can address at most <15.88 TiB of data.Logical volume "pool0" created. -
Provisionner un thin volume de 5 Gio virtuels dans ce pool de 1,5 Gio :
Fenêtre de terminal sudo lvcreate --thin -V 5G -n thinvol vg_data/pool0WARNING: Sum of all thin volume sizes (5.00 GiB) exceeds the size ofthin pool vg_data/pool0 and the size of whole volume group (<2.00 GiB).WARNING: You have not turned on protection against thin pools running out of space.WARNING: Set activation/thin_pool_autoextend_threshold below 100 to triggerautomatic extension of thin pools before they get full.Logical volume "thinvol" created.
LVM avertit explicitement du sur-engagement et de l'absence de protection, et indique même le réglage qui l'active. Ces avertissements ne sont pas des erreurs : ils rappellent que le suivi du remplissage devient votre responsabilité.
Le sur-engagement en action
Section intitulée « Le sur-engagement en action »C'est ici que le thin provisioning prend tout son sens. La colonne Data% montre l'espace réellement consommé dans le pool, indépendamment des tailles virtuelles déclarées. Juste après la création, tout est à zéro :
sudo lvs -o lv_name,lv_size,pool_lv,data_percent vg_data LV LSize Pool Data% pool0 1.50g 0.00 thinvol 5.00g pool0 0.00thinvol affiche 5 Gio alors que le pool n'en contient que 1,5, et pourtant rien n'est consommé. Écrivons 500 Mio de données réelles dans le volume, puis observons à nouveau :
sudo mkfs.xfs /dev/vg_data/thinvolsudo mount /dev/vg_data/thinvol /mnt/datasudo dd if=/dev/zero of=/mnt/data/bigfile bs=1M count=500sudo lvs -o lv_name,lv_size,data_percent vg_data LV LSize Data% pool0 1.50g 39.12 thinvol 5.00g 11.74Le pool est désormais rempli à 39,12 % (les 500 Mio écrits, plus les structures de XFS), et le thin volume à 11,74 % de ses 5 Gio virtuels. Seul l'espace réellement écrit est consommé : c'est tout l'intérêt du thin provisioning.
Le danger : un pool qui se remplit
Section intitulée « Le danger : un pool qui se remplit »Un thin pool sur-engagé finit par se remplir si ses volumes grossissent tous en même temps. Le test l'a poussé à bout : 1,5 Gio écrits dans thinvol alors que le pool n'en contient que 1,5 au total. Au bout d'une minute, dd échoue sur « No space left on device », et lvs montre le pool plein :
LV Attr Data% Meta% pool0 twi-aotzD- 100.00 25.20 thinvol Vwi-aotz-- 30.00Le D de l'attribut signale un pool à court d'espace de données. Le journal du noyau raconte la séquence : « switching pool to out-of-data-space (queue IO) mode », puis 61 secondes plus tard « (error IO) mode ». Ce délai est le paramètre no_space_timeout du module dm_thin_pool, qui vaut 60 secondes, et lvs -o lv_when_full affiche queue, le comportement par défaut.
Le sur-engagement n'est donc pas magique : si tous les volumes se remplissent en même temps, le pool sature. La règle est simple : surveiller le Data% et le Meta%, et étendre le pool avant d'atteindre la limite.
sudo lvs -o lv_name,attr,data_percent,metadata_percent vg_dataÉtendre le pool automatiquement
Section intitulée « Étendre le pool automatiquement »Plutôt que de surveiller à la main, on configure LVM pour étendre le pool tout seul avant qu'il ne sature. Deux directives dans /etc/lvm/lvm.conf, section activation :
activation { thin_pool_autoextend_threshold = 80 thin_pool_autoextend_percent = 20}thin_pool_autoextend_threshold: seuil de déclenchement. À 80, le pool s'étend dès qu'il atteint 80 % de remplissage. La valeur 100 désactive l'extension automatique (minimum accepté : 50).thin_pool_autoextend_percent: le pool grandit de ce pourcentage de sa taille à chaque déclenchement.
L'extension repose sur le démon dmeventd, qui reçoit les notifications du noyau et lance lvextend automatiquement. Encore faut-il que le pool soit surveillé :
sudo lvchange --monitor y vg_data/pool0sudo lvs -o +seg_monitor vg_data/pool0 # doit afficher "monitored"Quand utiliser le thin provisioning
Section intitulée « Quand utiliser le thin provisioning »Le thin provisioning brille quand l'espace déclaré dépasse largement l'espace utilisé, ou quand on multiplie les volumes :
- Snapshots nombreux et peu coûteux : les snapshots fins partagent les blocs du pool au lieu de préallouer une taille fixe.
- Disques de VM et de conteneurs : on provisionne large sans immobiliser le disque. C'est exactement ce que fait Proxmox VE avec son backend LVM-thin, qui supporte snapshots et clones natifs.
- Sur-allocation maîtrisée : donner à chaque service un volume confortable sans acheter le disque total d'avance.
La contrepartie est toujours la même : le monitoring n'est pas optionnel. Un thin pool sans surveillance est une panne qui attend son heure.
Dépannage
Section intitulée « Dépannage »Les pannes de thin provisioning se lisent dans lvs et dans le journal du noyau. Surveillez l'attribut du pool (un D signale un pool plein), les colonnes Data% et Meta%, et les messages device-mapper: thin de dmesg.
| Symptôme | Cause probable | Solution |
|---|---|---|
| Required device-mapper target(s) not detected in your kernel | module dm-thin-pool absent | sudo modprobe dm-thin-pool |
| Check is skipped, please install recommended missing binary /usr/sbin/thin_check! | outils thin manquants | installer thin-provisioning-tools (Debian) ou device-mapper-persistent-data (RHEL) |
| Écritures bloquées une minute, puis No space left on device | pool saturé (Data% ou Meta% à 100, attribut D) | étendre le pool (lvextend), ajouter un disque au VG |
| Le pool ne s'étend pas tout seul | pool non surveillé ou VG plein | lvchange --monitor y, vérifier vgs (VFree) |
À retenir
Section intitulée « À retenir »- Le thin provisioning alloue l'espace à l'écriture, pas à la création.
- Un thin pool (espace réel) contient des thin volumes (taille virtuelle) avec
lvcreate --type thin-poolpuislvcreate --thin -V. - Le sur-engagement autorise une somme de tailles virtuelles supérieure au pool ; le
Data%montre le réel. - Un pool plein corrompt les données : surveiller
Data%etMeta%. - Activer l'extension automatique (
thin_pool_autoextend_threshold) et le monitoring (lvchange --monitor y). - L'autoextend a besoin d'espace libre dans le VG : le thin ne crée pas de disque.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Déplacer un volume à chaud (pvmove)
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
FAQ : questions fréquentes sur le thin provisioning LVM
Section intitulée « FAQ : questions fréquentes sur le thin provisioning LVM »Ces réponses reprennent les questions les plus fréquentes sur le thin provisioning : le sur-engagement, la surveillance du pool et son extension automatique.
Data% et d'étendre le pool avant la saturation.Data% ou le Meta% d'un thin pool atteint 100 %, les écritures sont d'abord mises en file d'attente (environ 60 secondes en mode queue, le défaut) puis échouent. Un pool saturé risque de corrompre le système de fichiers et impose une réparation (fsck/xfs_repair). La saturation des métadonnées est particulièrement vicieuse : le pool devient inutilisable même s'il reste de l'espace de données. Le monitoring est donc obligatoire.lvs -o lv_name,attr,data_percent,metadata_percent
Data% suit l'espace de données consommé, Meta% les métadonnées. Pour automatiser, on règle thin_pool_autoextend_threshold (par exemple 80) dans /etc/lvm/lvm.conf et on active la surveillance par dmeventd avec lvchange --monitor y vg/pool. Le pool s'étend alors tout seul, à condition que le Volume Group dispose d'espace libre.lvcreate --type thin-pool, puis les volumes avec lvcreate --thin -V. Plusieurs thin volumes partagent ainsi le même réservoir.