LVM concepts de base, Snapshot et redimensionnement de partitions

Le LVM, c'est quoi qu'est ce? C'est une maniére de gérer l'espace disque pour pouvoir gérer la taille des partitions sans avoir a arréter des machines en production. Bon ça c'est surtout si vous utilisez reiserFS en fait, en etx2 ou ext3 vous ne pourrez qu'agrandir un systéme de fichier monté, pas le retrécir. Et ReiserFS, c'est bien sauf que dump ne marche pas sous reiserFS (et même si linus pense que dump c'est dla m**de, bha plein de gens l'utilisent quand même, na!).

Un LVM est composé de trois "objets" différents:

  • Le Volume Group
  • Le ou les Physical Volume
  • Le ou les Logical Volume

Un Volume Group est juste un ensemble contenant les deux autres. la commande vgdisplay affiche la liste des volume group Toutes les commandes concernant les volumes group commencent par vg...

Les Physical Volumes sont des disques ou des partitions Par exemple /dev/cciss/c0d0p2 ou /dev/cciss/c0d1 la commande pvdisplay affiche la liste des physical volume. Toutes les commandes concernant les physical volumes commencent par pv...

Les Logical Volumes sont l'équivalent LVM des partitions. Sauf qu'un logical volume peut s'étendre sur plusieurs disques et ou partitions. La commande lvdisplay affiche la liste des logical volumes. Toutes les commandes concernant les logical volumes commencent par lv...

L'intérêt est que l'on peut modifier la taille des logical volume sans perte de données (voir a chaud dans le cas d'un agrandissement). Le démontage préalable est tout de même recommandé.

toto



Changer la taille de la partition / de 30Go a 8Go:

#df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol03
30G 2.6G 26G 10% /
Le logical volume a modifier est donc /dev/mapper/VolGroup00-LogVol03.

Il faut redémarrer la machine avec un cd d'installation en mode rescue et lui dire de monter les volumes (sinon les devices ne sont pas créés dans /dev).

Commencez par démonter le volume:

#umount /mnt/sysimage

si vous avez démarré sur un cd centos forcer un fsck

#e2fsck -f /dev/mapper/VolGroup00-LogVol03

sinon un mount devrait vous aider sur la localisation de votre /

Redimensionner le système de fichier (si c'est de l'ext3 ou de l'ext2):

#resize2fs /dev/mapper/VolGroup00-LogVol03 8G -p

Le "-p" sert a afficher une barre de progression.

Redimensionner le logical volume

#lvm lvreduce --size 8G /dev/VolGroup00/LogVol03

Ensuite il suffit de redémarrer la machine, un fsck est programmé au boot et normalement tout fonctionne correctement.


Création d'un repertoire /data sur un nouveau disque vierge

Bha quoi c'est une vierge avec un disque non?

Il faut tout d'abord créer le repertoire:
#mkdir /data

ensuite, il faut créer un phyical volume associé au nouveau disque:
#pvcreate /dev/cciss/c0d1
On peut verifier sa présence avec #lvdisplay

- NEW Physical volume -
PV Name /dev/cciss/c0d1
VG Name
PV Size 67.81 GB / not usable 0
Total PE 2170

Comme on le voit il n'est pour l'instant associé a aucun volume group

C'est ce que nous allons faire avec vgextend
#vgextend /dev/cciss/c0d1 VolGroup00
On peut verifier avec pvdisplay qu'il est bien dans le volume group

Ensuite on crée le logical volume
#lvcreate -l 2170 -n LogVol05 VolGroup00 /dev/cciss/c0d1
le -l est le nombre de physical extent (PE affichés dans lvdisplay) ensuite vient le -n suivit du nom du logical volume le volume group auquel il appartient et enfin le physical volume sur lequel on veut créer le logical volume.

Dans notre cas on veut remplir totalement le disque c0d1 avec ce logical volume, on a vu précédemment que la taille du physical volume était de 67,81GB la commande
#lvcreate -L 67G -n LogVol05 VolGroup00 /dev/cciss/c0d1
aurait donc été moins précise, nous aurions laissé de coté un peu d'espace disque.

On crée ensuite le systéme de fichier:
#mke2fs -L "/data" /dev/VolGroup00/LogVol05
On ajoute le journal
#tune2fs -j /dev/VolGroup00/LogVol05

on peut maintenant monter le nouveau disque dans /data
#mount /dev/VolGroup00/LogVol05 /data

et modifier le fichier /etc/fstab pour que le systéme de fichier soit monté en cas de reboot Il faut ajouter une ligne de ce genre

/dev/VolGroup00/LogVol05 /data ext3 defaults 1 2


Snapshots

c'est presque ça les snapshots

Les snapshots sont des volumes logiques permettant d'effectuer une sauvegarde cohérente d'un autre volume logique du même volume group.

A la création d'un snapshot, celui ci prend une "photo" du volume logique cible (ce qui est quasi immédiat) et commence a enregistrer les modifications apportées au volume logique cible.

Avantage des snapshots: Les snapshots sont un outil de sauvegarde. Ils permettent de stocker une image statique d'un volume logique a un instant t. On peut ensuite effectuer une sauvegarde du snapshot, qui contiendra les données présentes sur le volume cible a la création du snapshot.

Limite des snapshots: Les snapshots NE SONT PAS une sauvegarde d'un volume logique, ils enregistrent uniquement les modifications apportées au volume cible, ils ne contiennent pas les données de celui ci; de plus ils sont non persistants, c'est a dire qu'ils disparaissent en cas de reboot.

En cas de crash du disque dur contenant le volume cible, le snapshot ne vous sera d'aucune utilité. Par contre ils seront utiles en cas de suppression de fichiers non désirée sur le volume logique cible.

Une idée très répandue sur le net veut que la taille d'un snapshot doive être égale a environ 15-20% de la taille du volume logique cible. Ces approximations sont totalement infondées, la taille nécessaire a un snapshot dépend de l'activité sur le volume logique cible pendant la durée de vie de ce snapshot. La suppression de toutes les données sur le volume logique cible demandera par exemple un snapshot d'une taille au moins égale a la taille du volume logique cible.

La taille d'un snapshot doit donc être calculée suivant l'estimation du volume de données écrit sur le lecteur cible pendant la durée de votre sauvegarde. Dans la plupart des cas cela nécessitera bien moins de 15%...

Création du snapshot: Un snapshot se crée avec lvcreate comme un volume logique normal
#lvcreate -L 100m -s --name snapshot /dev/VolumeGroup00/LogVol05
L'option -s spécifie le type "snapshot" et le dernier argument doit être le chemin du volume logique cible. L'option -L spécifie la taille suivie de la lettre correspondant a l'unité...

Ensuite on peut le monter pour accéder aux données:
#mount /dev/mapper/VolGroup00-snapshot /mnt/snapshot

Une fois la sauvegarde effectuée, il suffit de le démonter
#umount /mnt/snapshot

et de le supprimer (sinon les modifications sur le volume logique cible continuent a être enregistrées).
#lvremove /dev/VolGroup00/snapshot


Références: Concepts de base en français: chez léa.

FAQ quasi exhaustive sur le LVM (mais très légère sur les snapshots)

Les archives de LA mailing list sur LVM:

Une bonne explication de ce que sont les snapshots:

Je vous invite a corriger toutes mes âneries si vous êtes balaises en LVM ici en commentaire ou sur l'article de wikipedia