LVM (Logical Volume Manager)
LVM (Logical Volume Manager) permet de gérer des partitions logiques, et non pas physiques, ce qui a notamment comme avantage de pouvoir plus facilement modifier leur taille.
Pré-requis
Partition non formatée
Il faut disposer d’une partition non formatée. Dans notre cas, il s’agit de /dev/sda9, qui dispose d’un peu plus de 300 Go de libres. Cette partition sera utilisée principalement pour gérer des images de machines virtuelles créées avec KVM.
# fdisk -l /dev/sda
Disk /dev/sda: 750.2 GB, 750156374016 bytes
255 têtes, 63 secteurs/piste, 91201 cylindres, total 1465149168 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x73a05bd4
Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 2048 102402047 51200000 7 HPFS/NTFS/exFAT
/dev/sda2 102402048 204802047 51200000 7 HPFS/NTFS/exFAT
/dev/sda3 204804094 1465147391 630171649 5 Étendue
La partition 3 ne débute pas sur une frontière de cylindre physique.
/dev/sda5 204804096 284803071 39999488 83 Linux
/dev/sda6 284805120 294567935 4881408 82 partition d'échange Linux / Solaris
/dev/sda7 294569984 392224767 48827392 83 Linux
/dev/sda8 392226816 802082815 204928000 83 Linux
/dev/sda9 802084864 1465147391 331531264 83 Linux
Installation du package LVM
Sur une distribution de type Debian/Ubuntu
sudo apt install lvm2
Création du volume physique PV
La mise en place de volumes logiques est un modèle à trois couches :
- Volume physique
- Volume groupe
- Volume logique
# pvcreate /dev/sda9
Writing physical volume data to disk "/dev/sda9"
Physical volume "/dev/sda9" successfully created
On peut lister les volumes physiques avec la commande pvdisplay. Exemple :
# pvdisplay
"/dev/sda9" is a new physical volume of "316,17 GiB"
--- NEW Physical volume ---
PV Name /dev/sda9
VG Name
PV Size 316,17 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID ReKoL9-gneB-DXfg-5MpV-pKyP-n5Rl-TRdnXh
Création du Volume Groupe VG
Avant de pouvoir créer des volumes logiques, il faut avoir créé un Volume Group. Ceci s’effectue via la commande vgcreate. La syntaxe est la suivante :
vgcreate NOM-du-VG NOM-Du-PV
Exemple :
# vgcreate vmvg /dev/sda9
Volume group "vmvg" successfully created
On peut vérifier que cela est répercuté au niveau du volume physique. Le paramètre VG Name est maintenant renseigné :
Informations via la commande vgdisplay. Par exemple :
# vgdisplay vmvg
--- Volume group ---
VG Name vmvg
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 316,17 GiB
PE Size 4,00 MiB
Total PE 80940
Alloc PE / Size 0 / 0
Free PE / Size 80940 / 316,17 GiB
VG UUID kd3LKL-tMjA-eIq4-EhMs-LdWV-LFVl-2rBhk1
Création d’un volume logique LV
A ce niveau, il est possible de créer des volumes logiques sur notre VG, via la commande lvcreate, avec la syntaxe :
lvcreate -L[taille] -n[nom-du-lv] [nom-du-vg]
Dans notre exemple, ce serait :
lvcreate -L8000 -n vm_debian6 vmvg
Logical volume "vm_wheezy" created
Cette commande créera un volume logique de 8 Go sur le volume groupe vmvg, et nommé vm_debian6.
On peut avoir la liste des LV créés avec la commande lvscan :
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
La commande lvdisplay pour les détails d’un volume logique :
# lvdisplay
--- Logical volume ---
LV Path /dev/vmvg/vm_wheezy
LV Name vm_wheezy
VG Name vmvg
LV UUID bOAd1B-Xg0e-Unj3-onj2-IZUY-k654-tqdvtd
LV Write Access read/write
LV Creation host, time portable-vli, 2012-11-22 16:53:41 +0100
LV Status available
# open 0
LV Size 7,81 GiB
Current LE 2000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
Les volumes logiques sont prêts à être utilisés par virt-manager…
Quelques commandes utiles
pvscan : liste les différents volumes physiques disponibles
# pvscan
PV /dev/sda9 VG vmvg lvm2 [316,17 GiB / 300,55 GiB free]
Total: 1 [316,17 GiB] / in use: 1 [316,17 GiB] / in no VG: 0 [0 ]
vgscan : liste les différents volume groups
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "vmvg" using metadata type lvm2
lvscan : liste les différents volumes logiques
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
Supprimer un volume logique LV
Pour supprimer un volume logique, il suffit d’utiliser la commande lvremove, une fois que le volume logique est démonté. Exemple :
# lvscan
ACTIVE '/dev/vmvg/vm_wheezy' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_seven' [15,62 GiB] inherit
# lvremove /dev/vmvg/vm_wheezy
Do you really want to remove active logical volume vm_wheezy? [y/n]:
Logical volume "vm_wheezy" successfully removed
# lvscan
ACTIVE '/dev/vmvg/vm_debian6' [7,81 GiB] inherit
ACTIVE '/dev/vmvg/vm_seven' [15,62 GiB] inherit
Formatage du volume logique LV
Afin de pouvoir monter le volume logique, il est nécessaire de le formater auparavant, via les commandes mkfs. Par exemple, pour formater en ext4, on utilisera la commande :
mkfs -t ext4 /dev/vmvg/Vol1
On peut ensuite monter le volume comme une partition “normale” :
mkdir /Essai1
mount /dev/mvg/Vol1 /Essai1
df -h
Augmenter la taille d’une partition LVM
L’un des avantages principaux des volumes logiques est de permettre de redimensionner la partition “à la volée” ou presque, beaucoup plus facilement et sans perte de données par rapport à une partition physique.
Pour ce faire, il est possible d’utiliser la commande lvextend. Par exemple :
lvextend -L 12G /dev/vmvg/Vol1
va étendre la taille du volume logique à 12 GB.
lvextend -L +1G /dev/vmvg/Vol1
va ajouter 1 GB au volume logique. Il faut ensuite retailler le file system qui repose sur ce volume logique :
lvextend -l +1125 /dev/vmvg/Vol1
va ajouter le reste disponible du “volume groupe” (Free PE/Size) au volume logique.
lvextend -l 100%FREE /dev/vmvg/Vol1
va ajouter l’espace restant disponible du “volume groupe”
Il faut ensuite retailler le file system qui repose sur ce volume logique :
umount /dev/vmvg/Vol1
e2fsck -f /dev/vmvg/Vol1
resize2fs /dev/vmvg/Vol1
mount /dev/vmvg/Vol1
Réduire la taille d’une partition LVM
Nous vous montrons ici comment réduire un volume ou une partition LVM sous Linux en redimensionnant d’abord le système de fichiers, puis le volume logique.
Dans cet exemple, nous allons travailler sur la réduction du volume logique /var/centos/var de 10 Go à 5 Go.
Vue d’ensemble de Logical Volume Manager (LVM)
Avant de travailler à travers le processus de redimensionnement, il est important que vous compreniez d’abord quelques concepts de base autour des volumes physiques, des groupes de volumes, des volumes logiques et du système de fichiers.
- Volume physique (PV) : Ceci peut être créé sur un disque physique entier (pensez à /dev/sda) ou sur une partition Linux.
- Groupe de volume (VG) : Il est composé d’au moins un ou plusieurs volumes physiques.
- Volume logique (LV) : C’est ce qu’on appelle parfois la partition, elle se trouve à l’intérieur d’un groupe de volume et a un système de fichiers écrit sur elle.
- Système de fichiers : Un système de fichiers tel que ext4 sera sur le volume logique.
Comment diminuer ou rétrécir le volume logique
Pour diminuer la taille d’une partition LVM, vous devez d’abord diminuer le système de fichiers afin d’éviter une éventuelle corruption des données. Comme il est possible que cela se produise si vous entrez la commande incorrectement, il est fortement recommandé que vous ayez une sauvegarde complète de vos données avant de continuer. Réduire un volume logique vous donnera plus d’espace dans le groupe de volume, ce qui signifie que vous pourriez plutôt étendre un autre volume logique avec ce nouvel espace trouvé.
La première étape dépendra si vous cherchez à réduire le volume d’une racine LVM ou d’un volume non racine.
Réduire le volume d’une racine
Le volume de la racine serait typiquement le volume logique qui est monté sur /. Vous ne pouvez pas le démonter pour le rétrécir car il est utilisé par le système d’exploitation en cours d’exécution, ce qui signifie que vous devrez d’abord démarrer à partir d’un Live CD pour le faire.
Réduire un volume non racinaire
Alternativement, si le volume que vous réduisez est un volume non racine, c’est-à-dire tout autre volume non monté à la racine du système de fichiers, vous pouvez démonter le volume comme indiqué ci-dessous pour continuer. Veuillez noter que lorsque vous démontez le volume, les données ne seront pas disponibles, vous devrez peut-être planifier un temps d’arrêt et arrêter d’exécuter les applications qui utilisent les données avant de les démonter. Démonter en spécifiant soit le volume logique, soit l’emplacement où il est actuellement monté, dans l’exemple ci-dessous nous spécifions le volume logique qui peut être trouvé dans /dev/(vg-name)/(lv-name).
umount /dev/centos/var
Toutes les étapes suivantes s’appliquent maintenant à un volume racinaire ou non racinaire.
Avant de pouvoir tenter de réduire la taille d’un volume LVM, vous devez d’abord exécuter une vérification du système de fichiers. Si vous ne le faites pas, vous obtiendrez un message d’erreur et vous ne pourrez pas continuer. C’est une étape nécessaire car le redimensionnement d’un système de fichiers en mauvais état peut entraîner une corruption des données. L’option -f permet d’exécuter la vérification même si le système de fichiers semble propre, tandis que l’option -y suppose que toutes les questions sont répondues par l’affirmative et répondra si on lui demande de résoudre un problème.
e2fsck -fy /dev/centos/var
Ensuite, vous devez rétrécir le système de fichiers, pour être sûr, nous allons rétrécir le système de fichiers plus bas que ce à quoi le volume logique va rétrécir. C’est parce que nous ne voulons pas réduire accidentellement le volume logique à une taille inférieure à celle du système de fichiers à l’étape suivante, car cela peut entraîner la corruption et la perte de données. Ne t’inquiète pas, on récupérera l’espace à la fin.
La commande ci-dessous réduira la taille totale du système de fichiers de sorte qu’il ne soit que de 4G, notez que quelle que soit la taille que vous spécifiez de réduire à vous doit avoir en espace libre dans le système de fichiers sinon vous devez d’abord supprimer les données.
resize2fs /dev/centos/var 4G
Une fois le système de fichiers réduit, on peut réduire la taille du volume logique avec la commande lvreduce. Réduisez-le à la taille que vous voulez que le volume soit, comme spécifié par l’indicateur -L. Au lieu de cela, si vous voulez réduire d’une taille spécifiée, mettez simplement un - devant la taille. Les deux sont indiqués ci-dessous pour être complets, mais vous n’avez besoin d’en exécuter qu’un seul.
Pour réduire à 5G
lvreduce -L 5G /dev/vg/nom-disque
Réduire de 5G
lvreduce -L -5G /dev/vg/nom-disque
Une fois que vous exécutez la commande lvreduce, vous recevrez un avertissement vous indiquant la taille que vous avez choisi de réduire pour ainsi utiliser ceci comme une chance de confirmer que vous réduisez le volume logique à une taille qui n’est PAS plus petite que la taille à laquelle vous avez précédemment réduit le système de fichiers. Une fois que vous avez confirmé, il vous suffit d’entrer’y’ et d’appuyer sur’enter’.
Une fois que le volume logique a été réduit à la taille requise, exécutez resize2fs sur le volume car cela permettra d’étendre le système de fichiers pour utiliser tout l’espace disponible dans le volume logique. Cela permet d’utiliser tout l’espace libre restant afin qu’aucun espace ne soit gaspillé à partir du moment où nous avons précédemment réduit le système de fichiers à une taille inférieure à celle du volume logique.
resize2fs /dev/centos/var
Il ne reste plus qu’à monter le volume. S’il s’agit d’un volume racine et que vous travaillez dans un Live CD, redémarrez simplement dans votre système d’exploitation Linux principal.
S’il s’agissait d’un volume non racine et que vous l’avez démonté pour compléter la réduction, il suffit de le remonter. Vous pouvez le faire avec’mount -a’ en supposant que vous avez la configuration déjà définie dans /etc/fstab, sinon spécifiez le volume logique et où il doit être monté. Ici, nous montons manuellement sur /mnt juste pour tester.
mount /dev/centos/centos/var /mnt
Après avoir redémarré le système d’exploitation principal ou terminé le montage, vérifiez l’espace affiché avec la commande’df’ pour confirmer qu’il a été réduit comme prévu.
[root@CentOS7 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 9.8G 1.4G 8.5G 14% /
devtmpfs 908M 0 908M 0% /dev
tmpfs 914M 0 914M 0% /dev/shm
tmpfs 914M 8.6M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sda1 497M 96M 402M 20% /boot
/dev/mapper/centos-var 4.8G 20M 4.6G 1% /mnt
Synthèse
Les commandes (exécution en mode su)
Pour lister tous les périphériques visibles :
lvmdiskscan
Pour afficher les PVs créés :
pvdisplay
pvs
Pour créer un disque physique :
pvcreate /dev/sdb
Pour agrandir le PV à la totalité du disque physique (/dev/sdb
pvresize /dev/sdb
Pour savoir quels PVs sont utilisés et par qui :
pvs -o+pv_used
Pour déplacer les données d’un PV vers un autre du même VG :
pvmove /dev/sdb /dev/sdc
Pour supprimer un PV non utilisé d’un VG :
vgreduce vg01 /dev/sdb
Pour supprimer un PV de LVM :
pvremove /dev/sdb
Pour créer un VG (vg01) dans le PV /dev/sdb :
vgcreate vg01 /dev/sdb
Pour afficher les VGs créés :
vgdisplay
vgs
Pour renommer un VG :
vgrename vg01 Newvg01
Pour ajouter un PV à un VG :
vgextend vg01 /dev/sdc
Pour créer un LV de 5GB (lv01) dans le VG vg01 :
lvcreate -L 5G -n lv01 vg01
Pour créer un LV en prenant la totalité de l’espace disponible :
lvcreate -l 100%FREE -n lv01 vg01
Pour créer un LV en prenant seulement 5% du VG :
lvcreate -l 5%VG -n lv01 vg01
Pour afficher les LV créés :
lvdisplay
lvs
Pour étendre un LV de 50GB :
lvresize -L +50G /dev/vg01/lv01
Pour réduire un LV de 5% de sa taille :
lvresize -l -5%LV /dev/vg01/lv01
Attention : Lorsque vous souhaitez agrandir un LV, un VG ou un PV, il faut bien évidement vérifier la couche au dessus de l’élément. Par exemple si vous voulez agrandir de 10GB le LV, il faut vérifier que le VG possède un espace non attribué de 10GB.
Pour renommer un LV :
lvrename lv01 Newlv01
Pour créer un FS dans le LV :
mkfs.ext4 /dev/vg01/lv01
Pour redimensionner le FS dû au redimensionnement du LV :
resize2fs /dev/vg01/lv01
Pour monter un répertoire dans le LV :
mkdir /data01
mount /dev/vg01/lv01 /data01