Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Mise en place et utilisation de LVM sur Debian 4.0 Etch et 5.0 Lenny
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Mise en place et utilisation de LVM sur Debian 4.0 Etch et 5.0 Lenny

Par Pierre-Yves Landuré - Dernière modification 09/12/2009 11:59

LVM kesako ? LVM signifie "Logical Volume Manager". En bon français, Gestionnaire de Volume Logique. Il s'agit d'un outil de gestion de l'espace disque. Il vient s'intercaler entre les partitions et le disque dur, et apporte une grande souplesse et une grande puissance à la gestion des partitions. Personnellement, je m'en sert pour gérer les disques durs de mes machines virtuelles Xen. Cet outil a pourtant bien d'autres utilités, dont la possibilité de créer des partitions s'étendant sur plusieurs disques dur, de re-dimensionner très simplement des partitions, et bien d'autres choses.

Attribution du mérite

Je n'en suis pas fier, mais la majeure partie de cet article est un lâche copier-coller d'un article de la documentation Ubuntu Francophone :

LVM, une autre manière de partitionner

Merci aux auteurs de cet excellent article, notamment à Hoper et Ner0lph. Votre travail m'a beaucoup facilité la prise en main de ce magnifique outil qu'est LVM.

Bien évidement, une partie de cet article a été réécrite à ma sauce, et j'ai aussi fait quelque ajouts, notamment au sujet des "snapshots", qui sont les outils de sauvegarde de LVM. Toutefois, si vous ne savez pas ce qu'est LVM, je vous conseille de lire l'article cité ci-dessus. Mon article à simplement pour but d'être un aide mémoire, et une référence des commandes disponibles pour LVM.

Pré-requis

En premier lieu, installez le paquet lvm2 :

/usr/bin/apt-get install lvm2

Notions et vocabulaire

Avant d’utiliser réellement LVM, il faut comprendre un peu de vocabulaire. Voici quelques définitions :

Volume physique
Un volume physique ou « PV » pour « physical volume » est un disque ou une partition "formaté" par LVM. C'est l'espace de stockage ou seront inscrites les données des volumes logiques.
Groupe de volumes
Un groupe de volumes ou « VG » pour « volume group » est un ensemble de volumes physiques. Un groupe de volumes peut être constitué de un ou plusieurs volumes physiques. Pour utiliser LVM, il vous faut obligatoirement créer un groupe de volumes. Le concept des groupes de volumes permet de gérer du RAID logiciel via LVM.
Volume logique
Un volume logique ou « LV » pour « logical volume » est l'équivalent d'une partition pour LVM. Un volume logique est un espace « quelque part dans un groupe de volume » où l’on peut mettre un système de fichiers.
Extent
Un extent, ou « physical extent » aussi appelé « PE », est l'équivalent du secteur pour les groupes de volumes. La taille d'un volume logique sera toujours un multiple de la taille de PE d'un groupe de volumes. Par défaut, les PE ont une taille de 4 Mio.

Les commandes LVM sont simples à utiliser et elles intègrent toutes une aide en ligne très bien conçue. De plus, leur nom se « devine » assez facilement :

  • Les commandes agissant sur les volumes physiques commencent par pv. Vous pouvez les lister avec la commande :
    /usr/bin/man -k '^pv'
  • Les commandes agissant sur les groupes de volumes commencent par vg. Vous pouvez les lister avec la commande :
    /usr/bin/man -k '^vg'
  • Les commandes agissant sur les volumes logiques commencent par lv. Vous pouvez les lister avec la commande :
    /usr/bin/man -k '^lv'

Mise en place de LVM

Si lorsque vous lancez une commande de ce guide, vous obtenez le message « No program "*****" found for your current version of LVM. », c’est que le service LVM n’est pas actif. Lancez-le avec la commande suivante :
/etc/init.d/lvm start

Volume physique

La première étape de la mise en place de LVM consiste à créer un volume physique. Pour ce faire, choisissez un disque, ou une partition que vous n'utilisez pas. Renseignez son nom :

PV_DEV=/dev/sdb1

Attention : Toutes les données de la partition ou du disque choisi seront supprimées définitivement ! Pensez à sauvegarder !

Assurez-vous que la partition n'est pas montée :

/bin/umount ${PV_DEV}

Et créez le volume physique sur la partition choisie à l'aide la commande suivante :

/sbin/pvcreate ${PV_DEV}

Si tout s’est bien passé, aucun message d’erreur n’apparait.
Remarque : Vous pouvez utiliser directement un disque dur (par exemple /dev/sdb) plutôt qu'une partition, mais afin d'éviter les problèmes, il est recommander de créer le volume physique sur une partition occupant la totalité du disque plutôt que sur un disque complet (et donc non partitionné).

Groupe de volumes

Une fois le ou les volumes physiques créés, nous les assignons à un groupe de volumes. En premier lieu, donnez un identifiant à votre groupe de volume :

VG_NAME=vhd1

Remarque : Personnellement, j'utilise l'abréviation vhd pour Virtual Hard Drive, mais vous êtes libre de votre choix :D.

Pour créer le groupe de volumes, utilisez la commande :

/sbin/vgcreate ${VG_NAME} ${PV_DEV}

Si tout se passe bien, vous avez maintenant un groupe de volume, contenant un disque physique. Vous pouvez obtenir d’autres informations sur ce groupe de volume en tapant :

/sbin/vgdisplay

Vous disposez maintenant d'un environnement vous permettant de créer des volumes logiques.

Gestion des volumes logiques

Création d'un volume logique

Un volume logique est un espace réservé dans un groupe de volumes sur lequel on peut mettre en place un système de fichier (par exemple, swap, ou ext3). Pour le créer, nous devons en premier lieu disposer du nom du groupe de volumes destiné à héberger ce volume logique. Pour récupérer automatiquement le premier groupe de volumes de votre installation, utilisez la commande :

VG_NAME=$(/sbin/vgdisplay \
| /bin/grep "VG Name" \
| /usr/bin/head --lines=1 \
| /usr/bin/cut --characters=25-)

Remarque : Si vous disposez de plus d'un groupe de volumes (cas relativement rare je pense), vous devriez spécifier manuellement le nom du groupe de volumes de déstination :

VG_NAME=vhd3

Vous devez maintenant spécifier le nom du volume logique que nous souhaitons créer. Par exemple, pour la partition /var d'un Dom0 de Xen, vous pourriez utiliser :

LV_NAME=dom0-var

Précisez la taille que vous souhaitez attribuer à votre volume logique :

LV_SIZE=10g

Vous pouvez maintenant créer votre volume logique à l'aide de la commande :

/sbin/lvcreate -n ${LV_NAME} -L ${LV_SIZE} ${VG_NAME}
Une fois le volume logique créé, il ne reste plus qu'à y placer un système de fichier. Pour créer une volume logique ext3, utilisez la commande :
/sbin/mkfs -t ext3 /dev/${VG_NAME}/${LV_NAME}

Remarque : Vous pouvez obtenir le nom de la device du volume logique que vous venez de créer à l'aide de la commande :

/bin/echo "Nouveau volume logique (taille : ${LV_SIZE}) : /dev/${VG_NAME}/${LV_NAME}"

Suppression d'un volume logique

En premier lieu, renseignez la device du volume logique à supprimer :

DELETED_LV=/dev/vhd1/temporary-lv

Assurez-vous que le système de fichier présent sur ce volume logique n'est pas monté :

/bin/umount ${DELETED_LV}

Et supprimez définitivement le volume logique :

/sbin/lvremove ${DELETED_LV}

Agrandir un volume logique

L'un des avantages de l'utilisation de LVM est qu'il est très simple de modifier la taille d'un volume logique. La principale difficulté venant de la mise à jour du système de fichier pour prendre en compte la nouvelle taille.

En premier lieu, renseignez la device du volume logique à re-dimensionner :

RESIZED_LV=/dev/vhd1/dom0-home

Spécifiez la nouvelle taille de votre volume logique :

NEW_SIZE=20g

Assurez-vous que la taille choisie est supérieure à la taille actuelle du volume logique. Pour afficher cette dernière, vous pouvez utiliser la commande suivante :

/sbin/lvdisplay ${RESIZED_LV} | /bin/grep "LV Size"

Assurez-vous que le volume logique n'est pas monté :

/bin/umount ${RESIZED_LV}

Vérifiez que le système de fichier ne contient pas d'erreurs :

/sbin/fsck -f ${RESIZED_LV}

Vous pouvez à présent agrandir la taille du volume logique :

/sbin/lvresize -L ${NEW_SIZE} ${RESIZED_LV}
Adaptez la taille du système de fichier à la nouvelle taille de votre volume logique :
/sbin/resize2fs ${RESIZED_LV}

Enfin, vous pouvez remonter votre volume logique (si nécessaire) :

/bin/mount ${RESIZED_LV}

Notez bien que :

  • Si jamais vous indiquez une taille (ici 20 Gio) inférieure à celle de départ, vous détruirez le système de fichier. Donc, veillez à indiquer une taille supérieure à la taille d'origine du volume logique.
  • La commande resize2fs est uniquement valable pour les systèmes de fichier ext2 ou ext3.

Réduire un volume logique

Diminuer la taille d'un système de fichier est un peu plus délicat. En effet, si jamais on commet l'erreur de diminuer la taille de la "boite" (le volume logique) avant de réduire la taille du contenu (le système de fichier lui même) alors on détruit son système de fichier… pareil si on réduit trop la taille du volume logique.

Important : Avant de vous lancer dans cette opération, SAUVEGARDEZ. La réduction de taille d'un volume logique est dangereuse et peut entrainer une perte de données.

Renseignez la device du volume logique à re-dimensionner :

RESIZED_LV=/dev/vhd1/dom0-home

Assurez-vous que le volume logique n'est pas monté :

/bin/umount ${RESIZED_LV}

Vérifiez que le système de fichier ne contient pas d'erreurs :

/sbin/fsck -f ${RESIZED_LV}

Réduisez maintenant la taille du système de fichier présent sur votre volume logique.

Attention : Veilliez à choisir une taille de système de fichier supérieure à l'espace disque occupé par les fichiers présents sur le système de fichier. Si vous choisissez une taille inférieure, vous perdrez définitivement des données :

/sbin/resize2fs -p ${RESIZED_LV} 1000M

Vous pouvez à présent réduire la taille du volume logique.

Attention : Veilliez à utiliser une taille supérieure à la taille du système de fichier réduit (voir ci-dessus).

/sbin/lvresize -L 1024M ${RESIZED_LV}
Une fois la taille du volume logique réduite, adaptez la taille du système de fichier à la nouvelle taille de votre volume logique :
/sbin/resize2fs ${RESIZED_LV}

Enfin, vous pouvez remonter votre volume logique (si nécessaire) :

/bin/mount ${RESIZED_LV}

Créer une image figée (snapshot) d'un volume logique

Un snapshot LVM est un outil permettant de sauvegarder tranquillement un volume logique tout en continuant à l'utiliser. Un snapshot n'est pas exactement une copie d'un volume logique, mais plutôt une sauvegarde des Physical Extent du volume logique à un moment donné. Si les données d'un PE sont modifié après la création du snapshot, le PE d'origine est sauvegardé dans le snapshot.

Ce mode de fonctionnement fait qu'un snapshot ne nécessite que de l'ordre de 15 à 20% de l'espace assigné à un volume logique. Par exemple, pour créer le snapshot d'un volume logique de 10 Go, 2 Go suffisent.

Pour créer un snapshot, il faut d'abord lui choisir un nom. Par exemple, pour le snapshot du volume logique "var" :

SNAPSHOT_NAME=bkp-var-20090201

Et lui assigner un espace disque :

SNAPSHOT_SIZE=2g

Et préciser la source du snapshot :

SNAPSHOT_SOURCE=/dev/vhd1/var

Enfin, vous pouvez créer le snapshot :

/sbin/lvcreate -L ${SNAPSHOT_SIZE} -s -n ${SNAPSHOT_NAME} ${SNAPSHOT_SOURCE}

Pour récupérer automatiquement le premier groupe de volumes de votre installation, utilisez la commande :

VG_NAME=$(/sbin/vgdisplay \
| /bin/grep "VG Name" \
| /usr/bin/head --lines=1 \
| /usr/bin/cut --characters=25-)

Vous pouvez maintenant monter le snapshot ainsi créé et récupérer le contenu que vous souhaitez sauvegarder :

/bin/mkdir /tmp/${SNAPSHOT_NAME}
/bin/mount /dev/${VG_NAME}/${SNAPSHOT_NAME} /tmp/${SNAPSHOT_NAME}
cd /tmp/${SNAPSHOT_NAME}

Une autre solution est de faire une image du snapshot (ceci ne nécessite pas de monter le snapshot). Pour ce faire, installez bzip2 si nécessaire :

/usr/bin/apt-get install bzip2

Et lancez la création de l'image (compressée, afin de minimiser l'espace disque utilisé) :

/bin/dd if=/dev/${VG_NAME}/${SNAPSHOT_NAME}  | /bin/bzip2 -9 -c > /var/backups/${SNAPSHOT_NAME}.bz2

Remarque : Pour restaurer l'image ainci créé, vous pouvez utiliser la commande suivante :

/bin/bunzip2 -c /var/backups/some-snapshot.bz2 | /bin/dd of=/dev/vhd1/some-lv

Une fois le snapshot sauvegardé, vous pouvez le supprimer :

/sbin/lvremove /dev/${VG_NAME}/${SNAPSHOT_NAME}

Remerciements

une erreur de frappe : Extend vs Extent

Posté par azerttyu le 09/12/2009 11:56
Bonjour

Merci pour cet article qui complete la doc ubuntu entre autre sur les aspects des snapshots. Je remarque toutefois une petite erreur de frappe, les PE et LE sont des extents -> http://fr.wikipedia.org/wiki/Extent et non extend qui n'a pas grand chose à voir sur ce point :)

Merci à vous

Merci

Posté par Pierre-Yves Landuré le 09/12/2009 11:59
merci de m'avoir signalé cette erreur. Je l'ai corrigée.

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio