Gestion de LVM
Rédigé par Marc GUILLAUME | Aucun commentaireLVM
est un outil qui permet souplement de modifier la taille d'une partition, de rajouter des volumes physiques à votre arborescence. C'est un outil précieux pour l'administrateur système. Sur cette page est indiquée la marche à suivre pour réaliser ces opérations. Pour ce qui concerne l'installation de LVM voir LVM sur kimsufi OVH.
Ressources utilisées :
- LVM HOWTO
- Artice de IT connect
admin-debianAnnotation du 10 novembre 2017, le site ne semble plus être en ligne.- Développez.com
- doc.ubuntu-fr
- guidespratiques.traduc.org
- blog.ramdani.net
- hoper.dnsalias.net
- https://documentation.online.net/fr/
ATTENTION CEPENDANT : ces commandes touchent à la structure même de votre système de fichier, et donc concernent vos données. Même si
LVM
fonctionne bien et que GNU/Linux est un système sûr, vous n'êtes jamais totalement à l'abri d'un problème, ou simplement d'une fausse manoeuvre. Donc avant de tripoter la structure de fichier d'une partition IL EST IMPÉRATIF DE SAUVEGARDER LES DONNÉES DE CETTE PARTITION. Ne venez pas pleurer sinon si vous perdez vos données.Et bien entendu également vérifiez que le système de fichier que vous utilisez puisse être redimensionné...
Augmenter la taille d'un volume
Le principe consiste à démonter le volume dont on veut modifier la taille, le vérifier avec fsck
, augmenter la taille du volume logique, adapter la taille du système de fichier au nouveau volume, le revérifier pour contrôler que tout c'est bien passé et remonter au bon point de montage. Résumé ainsi cela peut sembler compliqué, mais en détaillant l'opération nous allons voir que c'est en fait très simple.
En guise d'exemple imaginons donc que vous voulez redimensionner le répertoire /var/www
où sur Debian sont stockés les sites web. Les opérations doivent bien entendu, touchant le système de fichier et le montage des volumes, être exécutées en tant que root
, donc avec su
ou sudo
selon votre configuration. Nous admettrons que nous voulons rajouter 3 Go à la partition qui a actuellement une taille de 5 Go, donc d'obtenir une partition de 8 Go.
Démontage du volume
Si votre serveur est en production vous pouvez choisir de redimentionner à chaud (voir la note ci-dessous), mais nous allons postuler que vous pouvez supporter une interruption de service de quelques minutes.
Avec les systèmes de fichier modernes (ext3, ext4, reiserfs par exemple) on peut modifier la taille d'un volume sans avoir à le démonter (par exemple si vous voulez augmenter la taille de
/var/www
où se trouvent vos sites web sans les rendre inaccessibles), mais cela comporte toujours quelques risques et il est préférable, si c'est possible, de démonter une partition avant de changer sa taille.
Dans le cas précis de /var/www
, je vous conseille d'arrêter votre serveur web qui accédant au répertoire risque d'empêcher le démontage. Reportez-vous à la documentation de votre serveur web pour cela. Avec Apache
se serait par exemple :
# apache2ctl stop
Vous pouvez maintenant tenter de démonter votre répertoire
# umount /var/www
Si vous n'arrêtez pas votre serveur web (ou si une autre application utilise le répertoire à redimensionner) vous risquez de voir ce message :
# umount /var/www/ umount: /var/www: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
Sur mon serveur j'utilise l'outil de statistique piwik et une localisateur d'IP qui bloque le démontage tant qu'Apache tourne (même si aucune requête web sur apache ne vient utiliser la partition), lsof
me révèle ça :
# lsof /var/www/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 3119 root 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3133 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3134 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3135 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3137 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3141 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3188 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 3997 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 9736 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 9787 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat apache2 9788 www-data 11r REG 253,2 19450763 2656 /var/www/piwik.monsite.net/htdocs/misc/GeoLiteCity.dat
L'arrêt d'Apache libère le répertoire.
Vérification du volume
Mes volumes logiques sont dans le répertoire /dev/vg/
et portent un nom commençant par lv
(pour logical volume, là tout dépend de la convention que vous avez utilisée pour nommer vos volumes). Mes sites web sont sur le volume logique lvweb
. Je lance d'abord la commande de vérification de disque, mon répertoire étant monté en ext4
j'utilise l'utilitaire e2fsck
(si vous avez un autre système de fichier que ext3
ou ext4
utilisez l'outil fourni avec ce système de fichier) :
# e2fsck -f /dev/vg/lvweb
L'option -f
indique à e2fsck
de lancer une vérification forcée, même si le système ne semble pas avoir de problème. Si tout se passe bien vous devriez revenir au prompt du shell. Vous pouvez alors redimensionner votre volume logique.
Agrandir le volume
Il faut bien entendu que votre disque physique ne soit pas totalement utilisé. Si il reste de l'espace non attribué à une partition ou un volume logique, vous pouvez demander l'augmentation de taille de votre volume logique.
Il existe deux utilitaires permettant d'augmenter la taille d'un volume logique LVM
. Au premier abord cela semble redondant mais en fait il existe une différence entre ces deux utilitaires : lvresize
peut à la fois réduire et augmenter un volume, lvextend
ne peut que l'augmenter.
Commençons par voir l'utilisation de lvresize
Avec cet utilitaire deux syntaxes permettent d'ajouter de l'espace à un volume, soit en indiquant la taille totale que vous voulez donner au répertoire (l'actuelle plus ce que vous voulez rajouter), soit juste indiquer la quantité à ajouter.
Voyons d'abord l'utilisation de la première (taille absolue calculée avec la taille existante plus ce que vous voulez ajouter) :
# lvresize -L 8G /dev/vg/lvweb
j'ai demandé de passer la partition à 8 Go (5 existants plus les 3 que je veux rajouter). Voyez man lvrezise
pour la liste des quelques options.
En utilisant la notation relative on indique la quantité d'espace à ajouter précédée du signe « +
» pour indiquer que l'on veut ajouter (nous verrons plus loin l'utilisation du signe « -
» pour diminuer la taille d'une partition) :
# lvresize -L +3G /dev/vg/lvweb
J'ai là demandé de rajouter (+3G
) 3 Go à la partition actuelle, quelle que soit sa taille.
ATTENTION : cette notation peut sembler plus simple et logique, mais gare avec cette notation à ne surtout pas oublier le signe «
+
» car alors la taille demandée serait considérée comme la taille abolue à laquelle doit être dimensionnée la partition.Si j'avais par erreur tapé :
# lvresize -L 3G /dev/vg/lvwebma partition serait passée de 5 à 3 Go et toutes les données éventuellements présentes entre 3 et 5 Go auraient été détruites !
Utilisation de lvextend
On peut également indiquer soit une taille à ajouter avec + ou la taille absolue à atteindre. La différence est qu'en cas de fausse manoeuvre (oubli du plus ou taille trop petite), vous ne diminuerez pas la taille du volume, ce qui évite d'effacer des données par erreur. Son utilisation est donc à privilégier si vous voulez éviter tout risque de destruction de données.
# lvextend -L+3G /dev/vg/lvweb Extending logical volume lvhome to 8.93 GiB Logical volume lvweb successfully resized
Bien entendu la syntaxe :
# lvextend -L8G /dev/vg/lvweb
est également possible.
Avant de continuer vérifiez que tout s'est bien passé
Il est plus que conseillé de repasser un petit coup de fsck
(e2fsck
dans le cas des systèmes ext
).
# e2fsck -f /dev/vg/lvweb e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /home: 5923/192000 files (1.3% non-contiguous), 728693/766976 blocks
Occuper tout les volume avec le système de fichier
Il reste à agrandir le système de fichier pour qu'il utilise tout le nouveau volume logique :
# resize2fs /dev/vg/lvweb resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/vg-lvhome to 8631296 (4k) blocks. The filesystem on /dev/mapper/vg-lvhome is now 8631296 blocks long.
Si vous n'utilisez pas ext3
ou ext4
utiliser l'utilitaire adapté pour votre système de fichier, et si vous utilisez un système de fichier autre que ext
ou reiserfs
, vérifiez qu'il puisse être ainsi redimentionné. Tous les systèmes de fichiers ne savent pas faire ça.
Si vous n'avez pas vérifié le volume vous risquez de voir ce message vous rappellant votre erreur :
# resize2fs /dev/vg/lvweb resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/mapper/vg-lvweb' first.
On peut remarquer à cette occasion l'autre syntaxe que l'on peut utiliser pour accéder aux volumes logiques, en utilisant le « mapper » de LVM où
/dev/vg/lvweb
est désigné comme/dev/mapper/vg-lvweb
.La commande
mount
renvoit cette syntaxe :# mount [.. /dev/mapper/vg-lvweb on /var/www type ext4 (rw)
Remontez le volume dans votre arborescence
# mount /dev/vg/lvweb /var/www
Si vous ne voulez pas, ou ne pouvez pas démonter le volume
Le redimensionnement à chaud marche globalement bien (mais il ne permet pas de vérification du système de fichier) vous pouvez donc, comme on l'a dit plus haut, tout faire sans démontage de votre volume. Pour redimensionner un volume sans le démonter tapez simplement ces commandes qui font le travail en deux opérations (redimensionnement du volume puis redimensionnement du système de fichier) :
lvresize -L 8G /dev/vg/lvweb resize2fs /dev/vg/lvweb
ATTENTION : si vous devez augmenter la partition contenant
/home
en vous connectant enSSH
vous allez rencontrer le problème suivant : comme vous êtes connecté en ssh sur votre home, même si vous devenez super utilisateur parsu
la partition reste occupée, ce que vous pouvez voir aveclsof
.[23:37:47] root@ks.yakati.net : [/home/mar # lsof /home/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 26441 marc cwd DIR 253,4 4096 176001 /home/marc su 26466 root cwd DIR 253,4 4096 176001 /home/marcIl faut donc que vous vous connectiez ailleurs que dans home. Une solution est de temporairement autoriser le
login
deroot
. Une fois connecté en tant queroot
vous pouvez fermer la précédente connexion. Normalement votre « home » ne devrait plus être occupé, vous pouvez alors démonter/home
, puis redimentionner. Une fois que ça a fonctionné, il ne reste plus qu'à rebloquer la connexion root de ssh, et avant de couper votre session root active, vous connecter sur une autre console en user normal.Je n'ai jamais personnellement essayé dans ce cas le redimensionnement à chaud sans démontage, cela devrait fonctionner et éviter cet inconvénient, si vous l'avez fait et que cela a fonctionné vous pouvez me l'indiquer que je mette cette documentation à jour.
Monter des partitions LVM manuellement
Si l'on doit intervenir sur le serveur via une opération de rescue boot ou si l'on démarre depuis un live CD quelques manipulations sont nécessaires pour monter les volumes LVM.
Voici les commandes à utiliser (bien entendu en tant que super utilisateur, en utilisant sudo ou en se connectant en root) mode secours pour un montage manuel :
Scan de la partition LVM:
vgscan
Activation de la partition LVM:
vgchange -ay <VolName>
Affichage du nom logique de la partition LVM:
lvs
Création d’un répertoire en local pour monter la partition LVM:
mkdir /mnt/LVM
Monter la partition LVM sur le répertoire local:
mount /dev/<VolName>/<LogName> /mnt/LVM
Accès à la partition LVM:
cd /mnt/LVM
On peut maintenant accéder aux données dans la partition LVM.