Ceci est une ancienne révision du document !
LVM et Snapshot
LVM est un outil super puissant de gestion des volumes logiques. Cela remplace, d'une certaine façon, le partitionnement des disques. C'est quand même différent en pratique mais on ne va pas voir les détails ici ; allez plutôt lire ce qui est listé dans sources_et_liens.
Il faut bien différencier
- le volume physique (PV) qui est la partition où on va installer nos volumes, par exemple /dev/sda
- le groupe de volume (VG) qui va être un contenant des volumes proprement dit
- le volume logique (LV), qui est un emplacement sur la partition, à l'intérieur d'un VG.
Commandes utiles
Afficher les informations
lvs
(en liste) oulvdisplay
(plus complet) pour afficher des informations à propos des LV.lvs
seul va lister tous les volumes logiques du système.vgs
(en liste) ouvgdisplay
(plus complet) pour afficher des informations à propos des VG.
Lorsqu'on fait vgs
, on obtient ce genre d'information :
VG #PV #LV #SN Attr VSize VFree groska 1 24 1 wz--n- 1,80t 1,09t
- PV indique le nombre de volume physique (ici, un)
- LV le nombre de volume logique
- VSize la taille totale du groupe de volume sur le disque dur
- VFree indique combien d'espace n'est pas utilisé dans le VG par des LV : c'est donc ce qu'on peut exploiter.
Créer/supprimer un volume
Voir les tutos listés plus bas, ou le début de la procédure d'installation avec Xen vu que c'est ça qu'on fait.
En résumé, une fois qu'on a son PV (pvcreate /dev/sda3
) et VG (vgcreate NOM_VG /dev/sda3
), soit on créé la VM via Xen (xen-create-image etc
) soit on créé avec les outils LVM :
lvcreate -n NOM_LV -L TAILLE NOM_VG
- NOM_LV : nom qu'on donne au volume logique
- TAILLE : taille, par exemple 500m, 10g ou 1t
- NOM_VG : nom du groupe de volume dans lequel le LV va être.
Pour supprimer un volume, s'assurer qu'il est démonté, puis simplement :
lvremove /dev/NOM_VG/NOM_LV
Redimensionnement
Vérifier la place occupée sur le volume et restant sur le disque avant de bidouiller.
Éteindre les VM qui peuvent faire appel au volume ou, si ça ne marche pas avec des vm, démonter le volume.
Il y a deux commandes possibles : lvresize
qui a des risques non négligeable de créer des soucis, et lvextend
qui demande plus de manipulation mais est plus sécurisé.
Il faut que la taille du volume soit en rapport avec la table de partition du volume.
lvextend
On commence par augmenter la taille du volume. On peut soit dire combien on veut ajouter (–size
, soit donner tout de suite la taille finale à laquelle on veut arriver (-size
) :
lvextend --size +40G /dev/vg0/foo
Ou pour donner la taille finale voulue :
lvextend --size 120G /dev/vg0/foo
Un message “successfully resized” doit apparaître.
Vérifier la nouvelle taille avec lvdisplay
lvdisplay /dev/vg0/foo
Vérifier ensuite qu'il n'y a pas de souci avec le volume en question, sinon l'étape suivante va foirer :
fsck -f /dev/mapper/vg0-foo
fsck
préfère passer par /dev/mapper, faites-lui plaisir.
Lancer ensuite la prise en compte du redimensionnement :
resize2fs /dev/vg0/foo
Sources :
lvresize
Bien que la proposition suivante soit dans la doc d'Ubuntu, il me semble que l'appliquer bêtement va créer des soucis.
lvresize
est plus puissant car il permet d'étendre ou de réduire. Mais si on réduit en dessous du dernier bit utilisé sur le volume, on va avoir droit à un volume corrompu. C'est ce qui s'est passé à mon dernier test, donc sauvegardez ce qu'il y a sur le volume avant.
Utiliser lvresize
(dans l'exemple, on réduit à 100Go) :
lvresize -L 100g /dev/mapper/svg-ca
Pourquoi sur “mapper” ?
Avec LVM en version 1, c'est bien /dev/mvg/Vol1 qui aurait été affiché. Depuis la version 2, LVM utilise le périphérique mapper, ce qui permet pas mal de choses (comme chiffrer les volumes logiques, etc.). Pour simplifier, disons que ces deux notations « /dev/mvg/Vol1 » et « /dev/mapper/mvg-Vol1 » sont synonymes. Dans la pratique, il est conseillé quand même d'utiliser plutôt la forme « /dev/mvg/Vol1 », certaines commandes ne passeront pas autrement.
Source : Ubuntu
Snapshot
L'un des gros intérêt de LVM est le snapshot. Cela va prendre l’instantané d'un volume à un moment donné ; on peut ensuite revenir à cet état antérieur. Un snapshot, c'est comme un point de contrôle/sauvegarde rapide dans un jeu vidéo.
- <Shepeng> Quand tu fais un snapshot, il le lie au disque d'origine et y note les modifications effectuées. Le disque continue à vivre sa vie, mais tout ce qui est modifié dessus est noté sur le snapshot. Quand tu supprime le snapshot, c'est comme supprimer ces notes, elles sont perdues, tu ne peux plus revenir en arrière. Quand tu veux revenir au point de départ, il va appliquer toutes les modifications à l'envers sur le disque d'origine, en utilisant les données du snapshot, puis le snapshot étant devenu inutile, il le supprime aussi.
- <Shepeng> Non. Il représente l'état initial de Lirria. Considère-le en lecture seule. Tu en fais une copie, ça permet juste de ne pas interompre Lirria pendant toute la durée de la copie.
- <Zatalyz> je crois que je commence à voir. Donc, le snapshot va rester là, en lecture seule, pendant qu'on fait des bidouilles sur Lirria. Si on se rend compte qu'on a fait une mauvaise bidouille, on peut dire “retour à l'état du snapshot”, c'est ça ?
- <Shepeng> Oui
- <Zatalyz> Mais on peut aussi se dire que nos bidouilles sont bien, dans ce cas on détruit le snapshot ou on le met à jour avec un nouveau snapshot. C'est ça aussi ?
- <Shepeng> oui. Deux cas d'utilisation typique : copie d'une VM en production, et test d'une nouveauté/mise à jour avec possibilité de retour arrière.
- <Zatalyz> ok. Donc… Je reviens à Spofu et Lirria. Je fais mon snapshot de Lirria… Puis je créé Spofu, et je lui dit de se mettre dans l'état du snapshot de Lirria ?
- <Shepeng> Oui, puis tu supprime le snapshot. Le fait de copier le snapshot au lieu du disque initial assure de copier l'état initial
- <Zatalyz> Ok, ça devient plus clair, merci :)
Avant de créer un snapshot, il faut s'assurer qu'il aura ce qu'il faut d'espace. Pas besoin de le faire aussi gros que le volume d'origine ! Le plus simple est de vérifier la taille du volume d'origine avec df
ou ncdu
et de compter un peu plus de place.
# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 30G 2.1G 26G 8% /
Donc, ici, prévoir un snapshot de 5Go sera largement assez pour démarrer.
lvcreate -L 5g -s -n lv_test_20110617 /dev/volume_groupe/lv_test
Va créer un snapshot du LV “lv_test” à la taille de 10Go qui va avoir comme nom “lv_test_20110617”. Attention, la taille d'utilisation du snapshot évolue avec l'utilisation. Si ce snapshot se retrouve rempli à 100%, il devient alors inutilisable (état “INACTIVE”) mais pas d’inquiétude car il n'y a pas d’impact pour le LV d'origine3).
Sources et liens
- LVM sur le wiki Ubuntu, français
- LVM sur le wiki archlinux, anglais
- Manpage de LVM (uniquement en anglais)
- Guide pratique de LVM, français