Réseau - Web - GNU/Linux

2013 03 mars

Gestion de LVM

Rédigé par Marc GUILLAUME | Aucun commentaire

LVM 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 :

  1. LVM HOWTO
  2. Artice de IT connect
  3. admin-debian Annotation du 10 novembre 2017, le site ne semble plus être en ligne.
  4. Développez.com
  5. doc.ubuntu-fr
  6. guidespratiques.traduc.org
  7. blog.ramdani.net
  8. hoper.dnsalias.net
  9. 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/lvweb

ma 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 en SSH vous allez rencontrer le problème suivant : comme vous êtes connecté en ssh sur votre home, même si vous devenez super utilisateur par su la partition reste occupée, ce que vous pouvez voir avec lsof.

[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/marc

Il faut donc que vous vous connectiez ailleurs que dans home. Une solution est de temporairement autoriser le login de root. Une fois connecté en tant que root 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.

Écrire un commentaire

Quelle est la première lettre du mot upwkls ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.025s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml