Introduction à LVM
LVM permet la création et la gestion de volume logique sous Linux. Il permet d’agrandir/rétrécir ou agréger des volumes.
LVM offre une architecture en 3 couches :
La première couche sont les “PV” se sont les volumes physiques : un disque ou une partition;
La seconde, les “VG” pour volume groupe permettent de grouper 1 ou plusieurs PV;
Enfin, il y a les “LV” volumes logiques qui permettent de faire une séparation logique d’un VG;
Pour mettre LVM en place il faut donc créer les PV puis les VG et enfin les LV
Commençons donc par créer les PV :
pvcreate /dev/sda2 /dev/sdc3 |
Puis on crée un VG que l’on nomme vg_data qui va grouper les deux PV:
vgcreate vg_data /dev/sda2 /dev/sdc3 |
Ensuite nous pouvons créer nos LV en leur affectant un taille.
Pour cela on utilise la commande lvcreate qui prend les paramétres :
lvcreate -L -n |
Ce qui donne pour notre exemple :
lvcreate -L 50G -n lv_nginx vg_data lvcreate -L 200G -n lv_home vg_data |
à chaque étape nous pouvons vérifier que la création se passe bien grâce aux commandes :
pvdisplay vgdisplay lvdisplay |
Ensuite il faut formater les volumes pour les rendre utilisables
mkfs.ext4 /dev/vg_data/lv_home mkfs.ext4 /dev/vg_data/lv_nginx |
Et on finit par monter les volumes
mount /dev/vg_data/lv_home /home mount /dev/vg_data/lv_nginx /nginx |
On peut également les mettre dans /etc/fstab afin que les volumes soient montés automatiquement
/dev/vg_data/lv_nginx /nginx ext4 defaults,relatime 1 2 /dev/vg_data/lv_home /home ext4 defaults,relatime 1 2 |
Si l’on veux supprimer un LV
umount /nginx lvremove /dev/mapper/vg_data-lv_nginx |
Pour rajouter un PV dans un VG
vgextend vg_data |
Si l’on souhaite augmenter la taille d’un LV, il faut démonter le volume, augmenter la taille du LV puis augmenter la taille du système de fichier et enfin remonter le volume
umount /nginx # démontage du volume e2fsck -f /dev/vg_data/lv_nginx # vérification du volume lvresize -L 65g /dev/vg_data/lv_nginx # redimensionnement du LV à 65g resize2fs /dev/vg_data/lv_nginx # redimensionnement du Filesysteme e2fsck -f /dev/vg_data/lv_nginx # vérification pour être sur qu'on n'a rien corrompus mount /dev/vg_data/lv_nginx /nginx/ # montage du volume |
Plutôt que de fixer la nouvelle taille du LV on peut aussi choisir d’ajouter xGo ou Mo
lvresize -L +10g /dev/vg_data/lv_nginx |
Il est également possible de réduire la taille d’un LV mais attention, cette action est beaucoup plus délicate que l’agrandissement. En effet, une erreur pourrait causer les perte de toutes les données sur le LV !
Afin d’éviter la perte des données, il est conseillé de réduire un peu plus le FS 2Go par exemple si on souhaite réduire le LV de 1Go puis, une fois le LV réduit de ré-étendre le FS.
Pour réduire la taille il faut donc :
démonter le FS
réduire le FS
redimensionner le LV
ré-entendre le FS
umount /nginx # démontage du volume e2fsck -f /dev/vg_data/lv_nginx # vérification du volume resize2fs -p /dev/vg_data/lv_nginx 63g # réduire le FS en se prenant une marge 2mo suffiraient mais rien ne vous empêche d’être plus large lvresize -L -1g /dev/vg_data/lv_nginx # réduire le LV resize2fs /dev/vg_data/lv_nginx # redimensionnement du Filesysteme e2fsck -f /dev/vg_data/lv_nginx # vérification pour être sur qu'on n'a rien corrompus mount /dev/vg_data/lv_nginx /nginx/ # montage du volume |
Il est également possible de faire des snapshot avec LVM mais je n’en parlerai pas dans cette article.