Logo Khaganat
Traductions de cette page?:

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) ou lvdisplay (plus complet) pour afficher des informations à propos des LV. lvs seul va lister tous les volumes logiques du système.
  • vgs (en liste) ou vgdisplay (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.
  • <Zatalyz> Hum, passons à l'exemple de cas pratique. Je veux faire un Spofu1) de Lirria2). Donc, je stoppe Lirria, je fais le snapshot. Ce snapshot peut être utilisé en parallèle de Lirria ?
  • <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

1)
Serveur de jeu pour tester des modifications.
2)
Serveur de jeu en production, bien qu'en pré-alpha.
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/lvm_snapshot.1482486579.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact