Un système de fichiers (FS ou filesystem) est installé normalement dans une partition d’un disque dur. Il ne peut donc pas dépasser la taille de ce disque, et il est difficile de l’étendre. LVM (Logical Volume Manager) ajoute une couche d’abstraction entre le système de fichiers et les partitions du ou des disques et permet une approche plus souple. Un FS n’est pas créé dans une partition, mais dans un volume logique. Ce dernier peut s’étendre sur plusieurs disques et peut être agrandi par la suite.
- Concepts de base
- LVM dans la configuration par défaut de CentOS
- Exemple de partitionnement LVM personnalisé
- Redimensionnement à chaud de la partition principale
Concepts de base
LVM ajoute trois niveaux entre le disque dur et le système de fichiers.
- Physical Volumes (PV)
- Volume Groups (VG)
- Logical Volumes (LV)
Voyons un peu plus en détail à quoi correspond chacun de ces niveaux.
- Physical Volume (PV) – En règle générale, un PV est une partition du disque dur gérée par LVM. Il peut s’agir d’un disque dur entier et même d’un assemblage RAID. La partition, le disque dur ou l’assemblage RAID doit être défini en tant que PV pour que les commandes LVM puissent fonctionner.
- Volume Group (VG) – Un ou plusieurs PV peuvent être assemblés en un groupe, ce qui permet par exemple de réunir les partitions de plusieurs disques durs. Un VG constitue donc un ensemble de PV, d’un point de vue physique.
- Logical Volume (LV) – Un Logical Volume (LV) est une partie d’un Volume Group (VG). Pour l’utilisateur, le LV fonctionne comme une partition virtuelle. C’est là où il installera le système de fichiers. Ce dernier ne sera plus créé dans une partition comme
/dev/sda2
ou/dev/sda3
, mais dans un LV comme par exemple/dev/mapper/vg0-root
ou/dev/mapper/vg0-swap
.
LVM dans la configuration par défaut de CentOS
Pour ne pas nous embrouiller dans la théorie, on partira d’un cas pratique relativement simple à comprendre. Lorsqu’on installe un serveur sous CentOS et que l’on opte pour la configuration par défaut, on obtient un schéma de partitionnement basé sur LVM. Dans l’exemple qui suit, j’ai installé CentOS dans une machine virtuelle dotée d’un disque de 20 Go, en gardant les options par défaut.
Jetons d’abord un oeil sur le partitionnement du disque dur.
# fdisk -l /dev/sda Disque /dev/sda : 21.5 Go, 21474836480 octets, 41943040 secteurs Unités = secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0x000cb56b Périphérique Amorçage Début Fin Blocs Id. Système /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 41943039 19921920 8e Linux LVM
Voyons à quoi correspond la partition /dev/sda1
.
# mount | grep sda1 /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,...)
C’est donc ma partition /boot
, une partition classique de type Linux
(83
). Elle n’est manifestement pas gérée par LVM. Le gros du système se trouve apparemment sur la partition /dev/sda2
, de type Linux LVM
(8e
).
La commande pvs(8)
me permet d’afficher les infos sur les Physical Volumes (PV) de mon système.
# pvs PV VG Fmt Attr PSize PFree /dev/sda2 cl_centosbox lvm2 a-- 19,00g 0
Ici, je dispose d’un Physical Volume (PV) défini sur /dev/sda2
, d’une taille de 19 Go, et qui contient un Volume Group (VG) cl_centosbox
. La commande vgs(8)
me permet d’afficher les détails de ce Volume Group.
# vgs VG #PV #LV #SN Attr VSize VFree cl_centosbox 1 2 0 wz--n- 19,00g 0
De manière similaire, j’utiliserai la commande lvs(8)
pour en savoir plus sur les Logical Volumes (LV) définis sur la machine.
# lvs LV VG Attr LSize Pool Origin Data% ... root cl_centosbox -wi-ao---- 17,00g swap cl_centosbox -wi-ao---- 2,00g
Dans le cas présent, j’ai deux Logical Volumes (LV) root
et swap
définis dans le Volume Group (VG) cl_centosbox
. Voici comment ils sont référencés dans /etc/fstab
.
/dev/mapper/cl_centosbox-root / xfs defaults 0 0 /dev/mapper/cl_centosbox-swap swap swap defaults 0 0
Exemple de partitionnement LVM personnalisé
Dans l’exemple qui suit, on va installer CentOS 7 dans une machine virtuelle, en optant pour un partitionnement personnalisé basé sur LVM.
- Cliquer sur Destination de l’installation.
- Vérifier si le ou les disques durs sont bien sélectionnés.
- Cocher Je vais configurer le partitionnement et cliquer sur Terminé.
- Dans le menu déroulant, vérifier si le schéma LVM est bien sélectionné.
La partition /boot
ne sera pas gérée par LVM.
- Cliquer sur le bouton « + » pour créer un nouveau point de montage.
- Créer le point de montage /boot avec une capacité de 200 MiB ou plus.
- Conserver le Type de périphérique Partition standard.
- Choisir le système de fichiers ext2 et l’étiquette boot.
- Confirmer Mise à jour des paramètres.
En revanche, la partition swap
sera bien gérée par LVM. L’installateur propose un Volume Group cl_centosbox
par défaut, nommé en fonction du nom d’hôte. On va remplacer ce VG par défaut par un VG personnalisé vg0
.
- Cliquer sur le bouton « + » pour créer un autre point de montage.
- Créer le point de montage swap en spécifiant sa capacité en GiB.
- Garder le Type de périphérique LVM.
- Remplacer le Volume Group
cl_centosbox
parvg0
. - Choisir l’étiquette swap.
- Confirmer Mise à jour des paramètres.
La partition principale occupera l’espace disque restant et fera également partie du Volume Group vg0
.
- Cliquer sur le bouton « + » pour créer un dernier point de montage.
- Créer le point de montage / sans spécifier la capacité souhaitée.
- Garder le Type de périphérique LVM.
- Garder le Volume Group
vg0
. - Choisir le système de fichiers ext4 et l’étiquette root.
- Confirmer Mise à jour des paramètres, puis Terminé.
Voyons ce que donne notre installation personnalisée après le redémarrage initial. Pour le disque dur, la seule chose qui a changé, c’est la taille de la partition /boot
sur /dev/sda1
.
# fdisk -l /dev/sda ... Périphérique Amorçage Début Fin Blocs Id. Système /dev/sda1 * 2048 411647 204800 83 Linux /dev/sda2 411648 41943039 20765696 8e Linux LVM
Nous disposons d’un Physical Volume (PV) sur /dev/sda
, avec un Volume Group vg0
.
# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 19,80g 0
Ce Volume Group occupe toute la taille de la partition.
# vgs VG #PV #LV #SN Attr VSize VFree vg0 1 2 0 wz--n- 19,80g 0
Il contient deux Logical Volumes root
et swap
.
# lvs LV VG Attr LSize Pool Origin Data% ... root vg0 -wi-ao---- 17,80g swap vg0 -wi-ao---- 2,00g
Dans /etc/fstab
, ces Logical Volumes (LV) sont référencés comme ceci.
/dev/mapper/vg0-root / ext4 defaults 1 1 /dev/mapper/vg0-swap swap swap defaults 0 0
Redimensionnement à chaud de la partition principale
Prenons un cas concret tel qu’il peut se présenter dans le quotidien d’un admin. Votre serveur est installé dans une machine virtuelle, et vous souhaitez agrandir la taille du disque. Dans notre installation sous VirtualBox, nous pourrons redimensionner le disque virtuel comme ceci. Au prochain démarrage du serveur, le disque disposera d’une certaine quantité d’espace libre, comme nous pouvons le voir avec cfdisk
.
Dans cet espace libre, je crée une partition logique /dev/sda5
de type Linux LVM
(8e
).
Ma nouvelle partition n’apparaît pas encore. Je peux utiliser la commande partprobe(8)
pour informer le système d’exploitation de la modification de la table de partitions.
# partprobe
Voilà comment se présente mon disque dur.
# fdisk -l ... Périphérique Amorçage Début Fin Blocs Id. Système /dev/sda1 * 2048 411647 204800 83 Linux /dev/sda2 411648 41943039 20765696 8e Linux LVM /dev/sda3 41943040 83886079 20971520 5 Extended /dev/sda5 41943103 83886079 20971488+ 8e Linux LVM
Je crée un nouveau Physical Volume (PV) dans ma nouvelle partition.
# pvcreate /dev/sda5 Physical volume "/dev/sda5" successfully created.
J’affiche l’état de mes Physical Volumes (PV).
# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 19,80g 0 /dev/sda5 lvm2 --- 20,00g 20,00g
J’étends mon Volume Group vg0
pour qu’il englobe également le Physical Volume (PV) /dev/sda5
.
# vgextend vg0 /dev/sda5 Volume group "vg0" successfully extended
Mon Volume Group vg0
est désormais bien réparti sur les deux Physical Volumes.
# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 19,80g 0 /dev/sda5 vg0 lvm2 a-- 20,00g 20,00
Mon Logical Volume root
n’occupe actuellement que près de la moitié de l’espace disque disponible.
# lvs LV VG Attr LSize Pool Origin Data% ... root vg0 -wi-ao---- 17,80g swap vg0 -wi-ao---- 2,00g
Je peux étendre sa taille de manière à ce qu’il occupe le restant de l’espace disponible.
# lvextend -l +100%FREE /dev/mapper/vg0-root Size of logical volume vg0/root changed from 17,80 GiB (4557 extents) to 37,80 GiB (9676 extents). Logical volume vg0/root successfully resized.
Voyons le résultat.
# lvs LV VG Attr LSize Pool Origin Data% ... root vg0 -wi-ao---- 37,80g swap vg0 -wi-ao---- 2,00g
Ma partition principale utilise un système de fichiers ext4
. Je peux redimensionner ce système de fichiers en utilisant la commande suivante.
# resize2fs /dev/mapper/vg0-root resize2fs 1.42.9 (28-Dec-2013) Le système de fichiers de /dev/mapper/vg0-root est monté sur / ; le changement de taille doit être effectué en ligne old_desc_blocks = 3, new_desc_blocks = 5 Le système de fichiers /dev/mapper/vg0-root a maintenant une taille de 9908224 blocs.
L’opération a bien fonctionné, et j’ai doublé l’espace disque disponible pour mon système.
# df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/vg0-root 38G 968M 35G 3% / ...
Bonjour
j’ai installé centos 7 en parallèle avec Windows 10 et ubentu, mais après je veux augmenter la partition de centos 7 et je n’arrive pas à le faire
Supprimez Windows et Ubuntu. Réinstallez CentOS proprement.
super tuto
Merci de prendre le temps de partager tes connaissance
Bonjour,
Est-ce que l’opération inverse est-elle autorisée ? Quels sont les risques ou pièges à éviter ?
Merci pour vos informations.
pour un systeme de fichier XFS :
xfs_growfs /dev/mapper/vg0-root
au lieu de :
resize2fs /dev/mapper/vg0-root
qui est pour EXT4
Merci pour ce commentaire bien utile !