LVM sous Linux (Volumes Logiques)
Table des matières
LVM (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volumes logiques sous Linux. L'utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. C'est un système beaucoup plus souple, qui permet par exemple de diminuer la taille d'un système de fichier pour pouvoir en agrandir un autre, sans se préoccuper de leur emplacement sur le disque
Avantages de LVM :
Inconvénients de LVM :
Les disques durs, partitions de disques durs, volumes RAID ou unités logiques provenant d'un SAN forment des « volumes physiques » (physical volumes ou PV).
On concatène ces volumes physiques (1 ou plusieurs) dans des « groupes de volumes » (volume groups ou VG).
Ces VG sont équivalents à des pseudo-disques-durs.
Des « volumes logiques » (logical volumes ou LV) sont alors découpés dans les groupes de volumes, puis formatés et montés dans des systèmes de fichiers. Les LV sont équivalents à des pseudo-partitions.
Des « systèmes de fichiers » (file system ou FS) est une façon de stocker les informations et de les organiser dans des fichiers. Ils disposent d'un point de montage et ont un type (ext4, xfs, btrfs)
Je parlerai de manipulations à chaud et à froid :
A chaud signifie : système de fichiers monté
A froid signifie : système de fichiers démonté
Je vous ai fait un petit schéma sur GIMP pour représenter tous les concepts ci-dessus dans une image, c'est parfois plus parlant :
Les commandes LVM sont extrêmement simples à utiliser et portent des noms logiques :
Dans l'article, je vais utiliser le disque sdb et sdc.
Pour les dérivées Gentoo, démarrer et activer les services lvm, lvmetad, lvm-monitoring :
Pour les systèmes utilisant systemd (comme les dérivées de Red Hat) lancer et activer les services lvm2-lvmetad, lvm2-monitor :
Si, au lieu d'utiliser un disque entier en LVM on veut utiliser une partition, il faut donc créer une partition de type LVM sur tout le disque.
C'est utile dans certains cas, notamment si on veut faire du LVM sur le disque système, l'installation du chargeur d’amorçage peut s'avérer compliqué.
Dans tous les cas, qu'on utilise une partition ou un disque entier, les manipulations sont identiques.
Pour plus de simplicités, on pourra partitionner avec cfdisk, en créant la partition et en définissant le type sur LVM Linux :
cfdisk /dev/sdb
Une fois fait, on vérifie avec fdisk -l :
On va ensuite passer au LVM.
Avant toute chose, il faut créer au moins un PV.
Un PV peut être un disque entier ou une partition.
Pour afficher des infos sur un PV, on utilise la commande pvdisplay
Si on ne spécifie pas le nom du PV, tous les PV sont affichés.
Pour supprimer un PV, on utilise la commande pvremove
Pour créer un VG, on va utiliser la commande vgcreate.
La commande s'utilise ainsi :
Pour afficher des infos sur un VG, on utilise la commande vgdisplay
Si le nom du VG n'est pas indiqué, tous les VG sont affichés.
Pour supprimer un VG, on utilise vgremove
Si on a un seul PV dans le VG, et qu'on veut agrandir notre VG, on peut ajourer un deuxième PV avec la commande vgextend :
On constate qu'avec vgdisplay on a 2 PV maintenant :
Si on a plusieurs PV dans le VG et qu'on veut en ôter un, (donc réduire notre VG) on peut supprimer un PV avec la commande vgreduce :
Imaginons 2 disques de 500Go (avec 2 partitions LVM de 500Go) nommés sdb1 et sdc1.
On fait un VG de 1000Go avec ces 2 PV, si 1 des 2 disques tombe en panne, l'intégralité du VG est perdu !
Veiller donc à utiliser un système de RAID derrière.
Dans ce chapitre, je traite les LV et ls FS en même temps car ils sont très liés
On se rapproche du but !
Pour créer un LV, on va utiliser la commande ... lvcreate.
La commande, pour le plus simple s'utilise ainsi :
Ou
Exemple :
Pour ajouter un FS sur le LV, on utilise la traditionnelle commande mkfs !
Exemple :
Pour monter le FS, on utilise la traditionnelle commande mount !
ou
Exemple :
On contrôle avec la commande mount ou df que le FS est bien monté :
On peut ajouter ensuite une ligne dans le fstab pour rendre permanente la modification :
Exemple:
Pour voir les LV on utilise la commande ... lvdisplay
lvdisplay affiche tous les LV de tous les VG.
On peut spécifier un VG uniquement ou un LV d'un VG, ou rien pour tous.
Exemple :
Pour supprimer un LV, on va utiliser la commande lvremove.
Attention, toutes les données sont supprimées !!!!
Le FS doit être démonté !
La commande s'utilise comme suit :
Exemple :
Pour agrandir un LV, on va utiliser la commande lvresize. (On peut utiliser aussi lvextend, ça fait la même chose)
La commande s'utilise comme suit :
Définir une taille précise :
Ou ajouter de n Go :
Les tailles de LV sont des multiples de PE. (Physical Extend)
Après avoir agrandi le LV, il faut penser à agrandir le FS également !
Les commandes diffèrent suivant les systèmes de fichiers.
Pour ext4, on utilise la commande resize2fs.
Si on ne met pas d'option, la taille maximale est prise (ce qu'on souhaite dans le LV)
Il est préférable de démonter si possible le système de fichiers, mais l'agrandissement à chaud est possible.
Exemple en doublant la taille du LV
A noter, il est possible de redimensionner le LV et d'agrandir le FS en même temps avec l'option -r
Le FS doit pouvoir être agrandi :
XFS = oui à chaud
EXT4 = oui à chaud
BTRFS = oui à chaud
Pour remplir tout le VG, on pourra utiliser -l avec +100%FREE :
Avant de réduire le LV, si la taille finale du LV est plus petite que celle du FS, il faut réduire le FS d'abord, sinon, corruption de données !!!
Diminuer la taille du FS est un peu plus délicat. Il ne faut évidemment pas réduire plus que la place occupée...
Pour éviter tout risque, je conseille de procéder ainsi :
Attention, tous les systèmes de fichiers ne peuvent pas être réduits.
XFS = NON
EXT4 = oui à froid
BTRFS = oui à chaud
Il est recommandé de réduire plus le FS que prévu puis de le ragrandir ensuite.
Exemple : Si on passe d'un LV de 200M à 100M, on va, pas sécurité, réduire le FS de 200M à 90M, réduire le LV de 200M à 100M, puis agrandir le FS au maximum.
Pour réduire le LV, on utilise la commande lvresize. (On peut utiliser aussi lvreduce, ça fait la même chose)
La commande s'utilise comme suit :
Définir une taille précise :
Ou réduire de n Go :
Pour réduire un FS, on utilise encore la commande resize2fs, en ayant au préalable vérifié le système de fichiers avec e2fsck.
Donc en combinant les 2 options dans le bon ordre :
Exemple :
A noter, il est possible de redimensionner le LV et réduire le FS en même temps avec l'option -r
Attention, les FS ne peuvent pas tous être réduits :
XFS = NON
EXT4 = oui à froid
BTRFS = oui à chaud
Dans cette catégorie, on va voir comment agrandir un PV.
Prenons un exemple, une machine Virtuelle VMWare.
Disque VMDK 100Go.
On a en partition :
/dev/sda1 : /boot 1Go
/dev/sda2 : PV de 99Go.
On agrandit le VMDK de 50Go, et on se retrouve avec
/dev/sda1 : /boot 1Go
/dev/sda2 : PV de 99Go
50Go d'espace libre.
Avant tout, si l'opération est faite à chaud, il sera nécessaire de demander au système de réanalyser les disques. 2 solutions :
La première, avec la commande suivante issue de sg3_utils :
La deuxième, en rescannant directement, en écrivant 1 dans le fichier rescan du scsi_disk correspondant :
Une fois la nouvelle taille détectée, on va pouvoir agrandir le PV /dev/sda2 pour profiter de la place supplémentaire et agrandir un LV du VG.
On va modifier les partitions, avec cfdisk (plus simple que fdisk) de /dev/sda :
Redimensionner /dev/sda2 et utiliser tout l'espace libre (définir la taille maximale), Ecrire et quitter :
On prend en compte le nouveau schéma de partition avec
On va scanner ensuite les PV pour vérifier la nouvelle taille :
On voit que le PV ne fait pas toute la taille de la partition.
On va redimensionner le PV au maximum de sa taille :
Une info indique que l'opération a eu lieu :
Ensuite on vérifie que toute la taille est prise en compte :
La taille est prise en compte. 50Go de libre.
On vérifie le VG :
On voit que l'espace est dispo dans le VG.
Si le terminal est long à rendre la main, on peut rescanner les VG :
Ensuite, on peut agrandir nos LV à souhait comme vu précédemment
Il peut arriver que vous branchiez un disque dur avec du LVM dessus.
Problème, certains outils graphiques ne savent pas formater le disque si un LVM est actif (plus particulièrement un VG)
Pour désactiver le VG :
Ensuite, vous pouvez reformater le disque, recréer des partitions, faire tout ce que vous voulez !
LVM permet de réaliser des clichés instantanés de volumes logiques (snapshots).
Je vous renvoie à cet article dédié : LVM Avancé : Les snapshots
Introduction
LVM (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volumes logiques sous Linux. L'utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. C'est un système beaucoup plus souple, qui permet par exemple de diminuer la taille d'un système de fichier pour pouvoir en agrandir un autre, sans se préoccuper de leur emplacement sur le disque
Avantages de LVM :
- Il n'y a pas de limitations « étranges » comme avec les partitions (primaire, étendue, etc.).
- On ne se préoccupe plus de l'emplacement exact des données.
- On peut conserver quelques giga-octets de libres pour pouvoir les ajouter n'importe où et n'importe quand.
- Les opérations de redimensionnement deviennent quasiment sans risques, contrairement au redimensionnement des partitions.
Inconvénients de LVM :
- Si un des volumes physiques devient HS, alors c'est l'ensemble des volumes logiques qui utilisent ce volume physique qui sont perdus. Pour éviter ce désastre, il faudra utiliser LVM sur des disques raid par exemple.
Quelques définitions
PV : Volumes physiques
Les disques durs, partitions de disques durs, volumes RAID ou unités logiques provenant d'un SAN forment des « volumes physiques » (physical volumes ou PV).
VG : Groupes de Volumes
On concatène ces volumes physiques (1 ou plusieurs) dans des « groupes de volumes » (volume groups ou VG).
Ces VG sont équivalents à des pseudo-disques-durs.
LV : Volumes logiques
Des « volumes logiques » (logical volumes ou LV) sont alors découpés dans les groupes de volumes, puis formatés et montés dans des systèmes de fichiers. Les LV sont équivalents à des pseudo-partitions.
FS : Système de fichiers
Des « systèmes de fichiers » (file system ou FS) est une façon de stocker les informations et de les organiser dans des fichiers. Ils disposent d'un point de montage et ont un type (ext4, xfs, btrfs)
Je parlerai de manipulations à chaud et à froid :
A chaud signifie : système de fichiers monté
A froid signifie : système de fichiers démonté
Représentation visuelle
Je vous ai fait un petit schéma sur GIMP pour représenter tous les concepts ci-dessus dans une image, c'est parfois plus parlant :
Utiliser LVM
Les commandes LVM sont extrêmement simples à utiliser et portent des noms logiques :
- toutes les commandes agissant sur les volumes physiques commencent par pv (pour physical volume);
- toutes les commandes agissant sur les groupes de volumes commencent par vg (pour volumes group);
- toutes les commandes agissant sur les volumes logiques commencent par lv (pour logical volume).
Manipulations
Dans l'article, je vais utiliser le disque sdb et sdc.
Démarrer les services
OpenRC
Pour les dérivées Gentoo, démarrer et activer les services lvm, lvmetad, lvm-monitoring :
Code BASH :
/etc/init.d/lvm start /etc/init.d/lvmetad start /etc/init.d/lvm-monitoring start rc-update add lvm boot rc-update add lvmetad boot rc-update add lvm-monitoring boot
systemd
Pour les systèmes utilisant systemd (comme les dérivées de Red Hat) lancer et activer les services lvm2-lvmetad, lvm2-monitor :
Code BASH :
systemctl enable lvm2-lvmetad systemctl enable lvm2-monitor systemctl start lvm2-lvmetad systemctl start lvm2-monitor
Prérequis LVM sur partition
Si, au lieu d'utiliser un disque entier en LVM on veut utiliser une partition, il faut donc créer une partition de type LVM sur tout le disque.
C'est utile dans certains cas, notamment si on veut faire du LVM sur le disque système, l'installation du chargeur d’amorçage peut s'avérer compliqué.
Dans tous les cas, qu'on utilise une partition ou un disque entier, les manipulations sont identiques.
Code BASH :
fdisk /dev/sdb
- o (pour faire une table de partition MSDOS)
- n (nouvelle partition)
- p (type primaire)
- 1 (num de partiton)
- vide (début)
- vide (fin)
- t (type)
- 8e (type LVM)
- w (écrire)
Code BASH :
fdisk /dev/sdb
Code TEXT :
Bienvenue dans fdisk (util-linux 2.23.2). Les modifications resteront en mémoire jusqu'à écriture. Soyez prudent avant d'utiliser la commande d'écriture. Le périphérique ne contient pas de table de partitions reconnue Construction d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x2660dada. Commande (m pour l'aide) : o Construction d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0xb4087607. Commande (m pour l'aide) : n Type de partition : p primaire (0 primaire(s), 0 étendue(s), 4 libre(s)) e étendue Sélection (p par défaut) : p Numéro de partition (1-4, 1 par défaut) : 1 Premier secteur (2048-2097151, 2048 par défaut) : Utilisation de la valeur 2048 par défaut Dernier secteur, +secteur ou +taille{K,M,G} (2048-2097151, 2097151 par défaut) : Utilisation de la valeur 2097151 par défaut La partition 1 de type Linux et de taille 1023 MiB est configurée Commande (m pour l'aide) : t Partition 1 sélectionnée Code Hexa (taper L pour afficher tous les codes) :8e Type de partition « Linux » modifié en « Linux LVM » Commande (m pour l'aide) : w La table de partitions a été altérée. Appel d'ioctl() pour relire la table de partitions. Synchronisation des disques.
Pour plus de simplicités, on pourra partitionner avec cfdisk, en créant la partition et en définissant le type sur LVM Linux :
cfdisk /dev/sdb
Une fois fait, on vérifie avec fdisk -l :
Code BASH :
fdisk -l /dev/sdb
Code TEXT :
Disque /dev/sdb : 1073 Mo, 1073741824 octets, 2097152 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 : 0xb4087607 Périphérique Amorçage Début Fin Blocs Id. Système /dev/sdb1 2048 2097151 1047552 8e Linux LVM
On va ensuite passer au LVM.
Les PV
Créer un PV
Avant toute chose, il faut créer au moins un PV.
Un PV peut être un disque entier ou une partition.
Code BASH :
pvcreate /dev/sdb
Code TEXT :
Physical volume "/dev/sdb" successfully created
Afficher des infos sur un PV
Pour afficher des infos sur un PV, on utilise la commande pvdisplay
Code BASH :
pvdisplay /dev/sdb
Code TEXT :
"/dev/sdb" is a new physical volume of "1,00 GiB"
Code TEXT :
--- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 1,00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID OYbIFi-1Amm-zUFC-3lrJ-qPpb-Llu7-nxM3xl
Si on ne spécifie pas le nom du PV, tous les PV sont affichés.
Supprimer un PV
Pour supprimer un PV, on utilise la commande pvremove
Code BASH :
pvremove /dev/sdb
Code TEXT :
Labels on physical volume "/dev/sdb" successfully wiped
Les VG
Créer un VG
Pour créer un VG, on va utiliser la commande vgcreate.
La commande s'utilise ainsi :
Code BASH :
vgcreate nomduvg /dev/pv1 /dev/pv2 ...
Code BASH :
vgcreate datavg /dev/sdb
Code TEXT :
Volume group "datavg" successfully created
Afficher des infos sur un VG
Pour afficher des infos sur un VG, on utilise la commande vgdisplay
Code BASH :
vgdisplay datavg
Code TEXT :
--- Volume group --- VG Name datavg 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 1020,00 MiB PE Size 4,00 MiB Total PE 255 Alloc PE / Size 0 / 0 Free PE / Size 255 / 1020,00 MiB VG UUID GbeMTP-dmeX-d8f6-hgxP-Njyj-RQWi-OX5Cct
Si le nom du VG n'est pas indiqué, tous les VG sont affichés.
Supprimer un VG
Pour supprimer un VG, on utilise vgremove
Code BASH :
vgremove datavg
Code TEXT :
Volume group "datavg" successfully removed
Ajouter un PV au VG
Si on a un seul PV dans le VG, et qu'on veut agrandir notre VG, on peut ajourer un deuxième PV avec la commande vgextend :
Code BASH :
vgextend datavg /dev/sdc
Code TEXT :
Volume group "datavg" successfully extended
On constate qu'avec vgdisplay on a 2 PV maintenant :
Code BASH :
vgdisplay datavg | grep "Cur PV"
Code TEXT :
Cur PV 2
Supprimer un PV au VG
Si on a plusieurs PV dans le VG et qu'on veut en ôter un, (donc réduire notre VG) on peut supprimer un PV avec la commande vgreduce :
Code BASH :
vgreduce datavg /dev/sdc
Code TEXT :
Removed "/dev/sdc1" from volume group "datavg"
Attention Si plusieurs PV dans un même VG
Imaginons 2 disques de 500Go (avec 2 partitions LVM de 500Go) nommés sdb1 et sdc1.
On fait un VG de 1000Go avec ces 2 PV, si 1 des 2 disques tombe en panne, l'intégralité du VG est perdu !
Veiller donc à utiliser un système de RAID derrière.
Les LV et les FS
Dans ce chapitre, je traite les LV et ls FS en même temps car ils sont très liés
Créer un LV
On se rapproche du but !
Pour créer un LV, on va utiliser la commande ... lvcreate.
La commande, pour le plus simple s'utilise ainsi :
Code BASH :
lvcreate -n nomdulv -L taille nomduvg
Ou
Code BASH :
lvcreate -n nomdulv -l nb%VG nomduvg
Exemple :
Code BASH :
lvcreate -n adrienlv -L 100M datavg
Code TEXT :
Logical volume "adrienlv" created.
Code BASH :
lvcreate -n pourcentlv -l 10%VG datavg
Code TEXT :
Logical volume "pourcentlv" created.
Ajouter un FS
Pour ajouter un FS sur le LV, on utilise la traditionnelle commande mkfs !
XFS
Code BASH :
mkfs.xfs /dev/nomduvg/nomdulv
BTRFS
Code BASH :
mkfs.btrfs /dev/nomduvg/nomdulv
EXT4
Code BASH :
mkfs.ext4 /dev/nomduvg/nomdulv
Exemple :
Code BASH :
mkfs.ext4 /dev/nomduvg/nomdulv
Code TEXT :
mke2fs 1.42.9 (28-Dec-2013) Étiquette de système de fichiers= Type de système d'exploitation : Linux Taille de bloc=1024 (log=0) Taille de fragment=1024 (log=0) « Stride » = 0 blocs, « Stripe width » = 0 blocs 25688 i-noeuds, 102400 blocs 5120 blocs (5.00%) réservés pour le super utilisateur Premier bloc de données=1 Nombre maximum de blocs du système de fichiers=33685504 13 groupes de blocs 8192 blocs par groupe, 8192 fragments par groupe 1976 i-noeuds par groupe Superblocs de secours stockés sur les blocs : 8193, 24577, 40961, 57345, 73729 Allocation des tables de groupe : complété Écriture des tables d'i-noeuds : complété Création du journal (4096 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
Monter le FS
Pour monter le FS, on utilise la traditionnelle commande mount !
Code BASH :
mount /dev/nomduvg/nomdulv /pointdemontage
ou
Code BASH :
mount /dev/mapper/nomduvg-nomdulv /pointdemontage
Exemple :
Code BASH :
mount /dev/datavg/adrienlv /adrien
On contrôle avec la commande mount ou df que le FS est bien monté :
Code BASH :
mount | grep adrienlv
Code TEXT :
/dev/mapper/datavg-adrienlv on /adrien type ext4 (rw,relatime,data=ordered)
Code BASH :
df | grep adrienlv
Code TEXT :
/dev/mapper/datavg-adrienlv 95054 1550 86336 2% /adrien
On peut ajouter ensuite une ligne dans le fstab pour rendre permanente la modification :
Code TEXT :
/dev/mapper/nomduvg-nomdulv /pointdemontage typefs options 1 1
Exemple:
Code TEXT :
/dev/mapper/datavg-adrienlv /adrien ext4 defaults 1 1
Voir les LV
Pour voir les LV on utilise la commande ... lvdisplay
lvdisplay affiche tous les LV de tous les VG.
On peut spécifier un VG uniquement ou un LV d'un VG, ou rien pour tous.
Code BASH :
lvdisplay
lvdisplay nomduvg
lvdisplay nomduvg/nomdulv
Exemple :
Code BASH :
lvdisplay datavg/adrienlv
Code TEXT :
--- Logical volume --- LV Path /dev/datavg/adrienlv LV Name adrienlv VG Name datavg LV UUID IDpnmL-e4u8-dm4a-KhQn-mZ1w-UnMV-yRyWsQ LV Write Access read/write LV Creation host, time zeus.biopole21.com, 2016-02-16 17:05:31 +0100 LV Status available # open 0 LV Size 100,00 MiB Current LE 25 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2
Supprimer un LV
Pour supprimer un LV, on va utiliser la commande lvremove.
Attention, toutes les données sont supprimées !!!!
Le FS doit être démonté !
La commande s'utilise comme suit :
Code BASH :
lvremove nomduvg/nomdulv
Exemple :
Code BASH :
lvremove datavg/pourcentlv
Code TEXT :
Do you really want to remove active logical volume pourcentlv? [y/n]: y Logical volume "pourcentlv" successfully removed
Agrandir un LV (et le FS)
Pour agrandir un LV, on va utiliser la commande lvresize. (On peut utiliser aussi lvextend, ça fait la même chose)
La commande s'utilise comme suit :
Définir une taille précise :
Code BASH :
lvresize -L taille nomduvg/nomdulv
Ou ajouter de n Go :
Code BASH :
lvresize -L +nG nomduvg/nomdulv
Les tailles de LV sont des multiples de PE. (Physical Extend)
Code BASH :
pvdisplay /dev/sdb | grep "PE Size"
Code TEXT :
PE Size 4,00 MiB
Après avoir agrandi le LV, il faut penser à agrandir le FS également !
Les commandes diffèrent suivant les systèmes de fichiers.
Pour ext4, on utilise la commande resize2fs.
Si on ne met pas d'option, la taille maximale est prise (ce qu'on souhaite dans le LV)
Il est préférable de démonter si possible le système de fichiers, mais l'agrandissement à chaud est possible.
Code BASH :
resize2fs /dev/nomduvg/nomdulv
Exemple en doublant la taille du LV
Code BASH :
df -h /adrien
Code TEXT :
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/datavg-adrienlv 93M 1,6M 85M 2% /adrien
Code BASH :
lvresize -L +100M datavg/adrienlv
Code TEXT :
Size of logical volume datavg/adrienlv changed from 100,00 MiB (25 extents) to 200,00 MiB (50 extents). Logical volume adrienlv successfully resized.
Code BASH :
resize2fs /dev/datavg/adrienlv
Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) Le système de fichiers de /dev/datavg/adrienlv est monté sur /adrien ; le changement de taille doit être effectué en ligne old_desc_blocks = 1, new_desc_blocks = 2 Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 204800 blocs.
Code BASH :
df -h /adrien
Code TEXT :
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/datavg-adrienlv 190M 1,6M 178M 1% /adrien
A noter, il est possible de redimensionner le LV et d'agrandir le FS en même temps avec l'option -r
Le FS doit pouvoir être agrandi :
XFS = oui à chaud
EXT4 = oui à chaud
BTRFS = oui à chaud
Code BASH :
lvresize -L +100M -r /dev/datavg/adrienlv
Pour remplir tout le VG, on pourra utiliser -l avec +100%FREE :
Code BASH :
lvresize -l +100%FREE -r /dev/datavg/adrienlv
Réduire le LV (et le FS)
Avant de réduire le LV, si la taille finale du LV est plus petite que celle du FS, il faut réduire le FS d'abord, sinon, corruption de données !!!
Diminuer la taille du FS est un peu plus délicat. Il ne faut évidemment pas réduire plus que la place occupée...
Pour éviter tout risque, je conseille de procéder ainsi :
- Réduire la taille du FS plus que nécessaire
- Réduire la taille du LV pour lui donner exactement la taille souhaitée.
- Agrandir le FS pour qu'il occupe tout l'espace disponible.
Attention, tous les systèmes de fichiers ne peuvent pas être réduits.
XFS = NON
EXT4 = oui à froid
BTRFS = oui à chaud
Il est recommandé de réduire plus le FS que prévu puis de le ragrandir ensuite.
Exemple : Si on passe d'un LV de 200M à 100M, on va, pas sécurité, réduire le FS de 200M à 90M, réduire le LV de 200M à 100M, puis agrandir le FS au maximum.
Pour réduire le LV, on utilise la commande lvresize. (On peut utiliser aussi lvreduce, ça fait la même chose)
La commande s'utilise comme suit :
Définir une taille précise :
Code BASH :
lvresize -L taille nomduvg/nomdulv
Ou réduire de n Go :
Code BASH :
lvresize -L -nG nomduvg/nomdulv
Pour réduire un FS, on utilise encore la commande resize2fs, en ayant au préalable vérifié le système de fichiers avec e2fsck.
Code BASH :
umount /pointdemontage e2fsck -f /dev/nomduvg/nomdulv resize2fs /dev/nomduvg/nomdulv taille
Donc en combinant les 2 options dans le bon ordre :
Code BASH :
umount /pointdemontage e2fsck -f /dev/nomduvg/nomdulv resize2fs /dev/nomduvg/nomdulv taille lvresize -L taille /dev/nomduvg/nomdulv resize2fs /dev/nomduvg/nomdulv mount /pointdemontage
Exemple :
Code BASH :
df -h /adrien
Code TEXT :
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/datavg-adrienlv 190M 1,6M 178M 1% /adrien
Code BASH :
umount /adrien e2fsck -f /dev/datavg/adrienlv
Code TEXT :
e2fsck 1.42.9 (28-Dec-2013) 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/datavg/adrienlv : 11/49400 fichiers (9.1% non contigüs), 11884/204800 blocs
Code BASH :
resize2fs /dev/datavg/adrienlv 90M
Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) En train de redimensionner le système de fichiers sur /dev/datavg/adrienlv à 92160 (1k) blocs. Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 92160 blocs.
Code BASH :
lvresize -L 100M /dev/datavg/adrienlv
Code TEXT :
WARNING: Reducing active logical volume to 100,00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce adrienlv? [y/n]: y Size of logical volume datavg/adrienlv changed from 200,00 MiB (50 extents) to 100,00 MiB (25 extents). Logical volume adrienlv successfully resized.
Code BASH :
resize2fs /dev/datavg/adrienlv
Code TEXT :
resize2fs 1.42.9 (28-Dec-2013) En train de redimensionner le système de fichiers sur /dev/datavg/adrienlv à 102400 (1k) blocs. Le système de fichiers /dev/datavg/adrienlv a maintenant une taille de 102400 blocs.
Code BASH :
mount /dev/datavg/adrienlv /adrien df -h /adrien
Code TEXT :
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/datavg-adrienlv 93M 1,6M 85M 2% /adrien
A noter, il est possible de redimensionner le LV et réduire le FS en même temps avec l'option -r
Attention, les FS ne peuvent pas tous être réduits :
XFS = NON
EXT4 = oui à froid
BTRFS = oui à chaud
Code BASH :
lvresize -L 100M -r /dev/datavg/adrienlv
Cas particulier : Agrandir un PV d'un disque virtuel
Contexte de l'exemple
Dans cette catégorie, on va voir comment agrandir un PV.
Prenons un exemple, une machine Virtuelle VMWare.
Disque VMDK 100Go.
On a en partition :
/dev/sda1 : /boot 1Go
/dev/sda2 : PV de 99Go.
On agrandit le VMDK de 50Go, et on se retrouve avec
/dev/sda1 : /boot 1Go
/dev/sda2 : PV de 99Go
50Go d'espace libre.
Voici comment procéder
Avant tout, si l'opération est faite à chaud, il sera nécessaire de demander au système de réanalyser les disques. 2 solutions :
La première, avec la commande suivante issue de sg3_utils :
Code BASH :
rescan-scsi-bus
La deuxième, en rescannant directement, en écrivant 1 dans le fichier rescan du scsi_disk correspondant :
Code BASH :
echo '1' > /sys/class/scsi_disk/0\:0\:0\:0/device/rescan echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan echo "- - -" > /sys/class/scsi_host/host2/scan
Une fois la nouvelle taille détectée, on va pouvoir agrandir le PV /dev/sda2 pour profiter de la place supplémentaire et agrandir un LV du VG.
On va modifier les partitions, avec cfdisk (plus simple que fdisk) de /dev/sda :
Code TEXT :
cfdisk /dev/sda
Redimensionner /dev/sda2 et utiliser tout l'espace libre (définir la taille maximale), Ecrire et quitter :
Code BASH :
Disque : /dev/sda Taille : 150 GiB, 161061273600 octets, 314572800 secteurs Étiquette : dos, identifiant : 0xa11da406 Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sda1 * 2048 2099199 2097152 1G 83 Linux >> /dev/sda2 2099200 209715199 207616000 99G 8e LVM Linux Espace libre 209715200 314572799 104857600 50G ┌─────────────────────────────────────────────────────────────────────────┐ │ Type de la partition : LVM Linux (8e) │ │UUID du système de fichiers : osVgGC-DLUg-WceS-rk5X-p53v-fgBy-x6EjWX │ │ Système de fichiers : LVM2_member │ └─────────────────────────────────────────────────────────────────────────┘ Nouvel taille :149G Peut être suivi de M pour Mio, G pour Gio, T pour Tio ou S pour secteur.
On prend en compte le nouveau schéma de partition avec
Code BASH :
partprobe
On va scanner ensuite les PV pour vérifier la nouvelle taille :
Code BASH :
pvs
On voit que le PV ne fait pas toute la taille de la partition.
Code TEXT :
PV VG Fmt Attr PSize PFree /dev/sda2 rootvg lvm2 a-- <99,00g 4,00m
On va redimensionner le PV au maximum de sa taille :
Code BASH :
pvresize /dev/sda2
Une info indique que l'opération a eu lieu :
Code TEXT :
Physical volume "/dev/sda2" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized
Ensuite on vérifie que toute la taille est prise en compte :
Code BASH :
pvs
Code TEXT :
PV VG Fmt Attr PSize PFree /dev/sda2 rootvg lvm2 a-- <149,00g 50,00g
La taille est prise en compte. 50Go de libre.
On vérifie le VG :
Code BASH :
vgs
Code TEXT :
VG #PV #LV #SN Attr VSize VFree rootvg 1 4 0 wz--n- <149,00g 50,00g
On voit que l'espace est dispo dans le VG.
Si le terminal est long à rendre la main, on peut rescanner les VG :
Code BASH :
vgscan
Ensuite, on peut agrandir nos LV à souhait comme vu précédemment
Cas particulier : désactiver un VG
Il peut arriver que vous branchiez un disque dur avec du LVM dessus.
Problème, certains outils graphiques ne savent pas formater le disque si un LVM est actif (plus particulièrement un VG)
Pour désactiver le VG :
Code BASH :
vgchange -a n lenomduvg
Ensuite, vous pouvez reformater le disque, recréer des partitions, faire tout ce que vous voulez !
LVM Avancé
Les snapshots
LVM permet de réaliser des clichés instantanés de volumes logiques (snapshots).
Je vous renvoie à cet article dédié : LVM Avancé : Les snapshots