Mettre en place et utiliser le gestionnaire de volumes logiques LVM sur Debian
LVM signifie "Logical Volume Manager". Il s'intercale entre les partitions et le disque dur, et apporte souplesse et puissance à la gestion des partitions. Il est particulièrement utile pour la gestion des partitions utilisées par les domaines Xen.Il donne la possibilité de créer des partitions s'étendant sur plusieurs disques dur (RAID logiciel), de re-dimensionner à la volée des partitions, etc.
Ce guide est testé sur:
- Debian 5.0 Lenny
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Vocabulaire
LVM utilise un vocabulaire précis. 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 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 :
command man -k '^pv'
- Les commandes agissant sur les groupes de volumes commencent par vg. Vous pouvez les lister avec la commande :
command man -k '^vg'
- Les commandes agissant sur les volumes logiques commencent par lv. Vous pouvez les lister avec la commande :
command man -k '^lv'
Installation
Installez le logiciel:
command apt-get install lvm2
Si en lançant une commande LVM, vous obtenez le message « No program "*****" found for your current version of LVM. », le service LVM n’est pas actif. Lancez-le:
command test -x '/etc/init.d/lvm2' && /etc/init.d/lvm2 start
command test -x '/etc/init.d/lvm' && /etc/init.d/lvm start
Création d'un volume physique
La première étape de la mise en place de LVM consiste à créer un volume physique. Choisissez une partition inutilisée. Renseignez son nom:
PV_DEV="/dev/sdb1"
Attention: Toutes les données de la partition choisie seront supprimées définitivement !
Il est possible d'utiliser directement un disque dur (par exemple /dev/sdb) plutôt qu'une partition. Il est toutefois recommandé 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é).
Assurez-vous que la partition n'est pas montée:
command umount "${PV_DEV}"
Créez le volume physique sur la partition choisie:
command pvcreate "${PV_DEV}"
Si aucun message d’erreur n’apparait, le volume physique s'est créé correctement.
Création d'un groupe de volumes
Une fois le ou les volumes physiques créés, assignez-les à un groupe de volumes. Nommez votre groupe de volumes :
VG_NAME="vhd1"
Remarque: Ici, l'abréviation vhd signifie Virtual Hard Drive.
Créez le groupe de volumes:
command vgcreate "${VG_NAME}" "${PV_DEV}"
Affichez les groupes de volumes présents sur le système:
command vgdisplay
Gestion des volumes logiques
Créer 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, il faut connaître le nom du groupe de volumes destiné à le contenir.
Nommez le futur volume logique. Par exemple, pour la partition /var d'un Dom0 de Xen, vous pouvez utiliser:
LV_NAME="dom0-var"
Renseignez la taille attribuée au volume logique:
LV_SIZE="10g"
Récupérer le nom du premier groupe de volumes du système:
VG_NAME="$(command vgdisplay \
| command grep "VG Name" \
| command head --lines=1 \
| command cut --characters=25-)"
Créez le volume logique:
command lvcreate -n "${LV_NAME}" -L "${LV_SIZE}" "${VG_NAME}"
Formatez le volume logique en ext4:
command mkfs -t ext4 "/dev/${VG_NAME}/${LV_NAME}"
Obtenez le "device" du nouveau volume logique:
echo "Nouveau volume logique (taille : ${LV_SIZE}) : /dev/${VG_NAME}/${LV_NAME}"
Supprimer un volume logique
Renseignez le "device" du volume logique à supprimer:
DELETED_LV="/dev/vhd1/temporary-lv"
Assurez-vous que le volume logique n'est pas monté:
command umount "${DELETED_LV}"
Supprimez définitivement le volume logique:
command lvremove "${DELETED_LV}"
Agrandir un volume logique
LVM permet la modification à la volée de la taille d'un volume logique. La principale difficulté vient de l'ajustement du système de fichier à la nouvelle taille.
Renseignez le "device" du volume logique à agrandir:
RESIZED_LV="/dev/vhd1/dom0-home"
Spécifiez la nouvelle taille du volume logique:
NEW_SIZE="20g"
Assurez-vous que la taille choisie est supérieure à la taille actuelle du volume logique. Affichez cette dernière:
command lvdisplay "${RESIZED_LV}" | command grep "LV Size"
Assurez-vous que le volume logique n'est pas monté:
command umount "${RESIZED_LV}"
Vérifiez que le système de fichier ne contient pas d'erreurs:
command fsck -f "${RESIZED_LV}"
Agrandissez le volume logique:
command lvresize -L "${NEW_SIZE}" "${RESIZED_LV}"
Adaptez la taille du système de fichier à la nouvelle taille du volume logique :
command resize2fs "${RESIZED_LV}"
Important : La commande resize2fs est uniquement valable pour les systèmes de fichier ext2, ext3 et ext4.
Si nécessaire, remontez le volume logique:
command mount "${RESIZED_LV}"
Réduire un volume logique
Diminuer la taille d'un système de fichier est délicat. Si jamais l'on diminue la taille du volume logique avant de réduire la taille du système de fichier, cela peut entrainer une perte de données. Il en va de même si la nouvelle taille est inférieure à l'espace utilisé par les fichiers sur le volume logique.
Important : Sauvegardez vos données avant de réduire un volume logique.
Renseignez le "device" du volume logique à réduire:
RESIZED_LV="/dev/vhd1/dom0-home"
Assurez-vous que le volume logique n'est pas monté:
command umount "${RESIZED_LV}"
Vérifiez que le système de fichier ne contient pas d'erreurs:
command fsck -f "${RESIZED_LV}"
Réduisez maintenant la taille du système de fichier présent sur le 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 la taille choisie est inférieure à l'espace utilisée du système de fichier, des données seront définitivement perdues :
command resize2fs -p "${RESIZED_LV}" "1000M"
Réduisez la taille du volume logique.
Attention : Veilliez à utiliser une taille supérieure à la taille du système de fichier réduit (voir ci-dessus).
command lvresize -L "1024M" "${RESIZED_LV}"
Adaptez la taille du système de fichier à la nouvelle taille de votre volume logique :
command resize2fs "${RESIZED_LV}"
Si nécessaire, remontez le volume logique:
command mount "${RESIZED_LV}"
Sauvegarde des volumes logiques
Créer un snapshot
Un snapshot LVM est un outil permettant de sauvegarder 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 l'espace réservé au 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.
Choisissez le nom du futur snapshot. Par exemple, pour le snapshot du volume logique "var":
SNAPSHOT_NAME="bkp-var-20090201"
Assignez un espace disque au snapshot:
SNAPSHOT_SIZE="2g"
Renseignez la source du snapshot:
SNAPSHOT_SOURCE="/dev/vhd1/var"
Créez le snapshot :
command lvcreate -L "${SNAPSHOT_SIZE}" -s -n "${SNAPSHOT_NAME}" "${SNAPSHOT_SOURCE}"
Réalisation d'une image disque du snapshot
Renseignez le shapshot à sauvegarder :
SNAPSHOT_NAME="/dev/vhd1/bkp-var-20090201"
Créez l'image compressée (minimise l'espace disque utilisé):
command dd if="${SNAPSHOT_NAME}" | command gzip -9 -c > "/var/backups/${SNAPSHOT_NAME}.bz2"
Pour restaurer un volume logique à partir d'une image disque :
command gunzip -c "/var/backups/some-snapshot.bz2" | command dd of="/dev/vhd1/some-lv"
Une fois sauvegardé, supprimez le snapshot:
command lvremove "${SNAPSHOT_NAME}"
Remerciements
- Merci à Falko Timme pour l'article Back Up (And Restore) LVM Partitions With LVM Snapshots sur HowtoForge.
- Merci à Médéric Ribreux pour sa réponse au post Faire une image d'un disque dur sur Da Linux French Page.
- Merci à Cemoi pour m'avoir indiqué l'existence de l'article Le LVM (Logical Volume Manager) sur Lea Linux.
- Merci à Hoper et Ner0lph pour leur travail sur l'article LVM, une autre manière de partitionner dans la documentation Ubuntu Francophone.