Test destructif sur lvm

LVM signifie Logical Volume Manager. Cela permet, entre bien autres choses, d'avoir un seul système de fichier dans plusieurs disques durs. Des tutoriaux sont disponibles en bas de page. Ici, on va simuler une réinstallation du système et voir comment LVM récupère sa configuration. En effet, on peut se demander si ce niveau de complication ne va pas partir en vacances lors d'un problème ou d'une réinstallation du système d'exploitation.
LVM est vraiment solide : il sauvegarde sa configuration dès que possible, a l'air de pouvoir se débrouiller même lorsqu'on a effacé /etc/lvm. En fait, ce répertoire est même restitué après avoir successivement supprimé le répertoire et purgé lvm2 !
Un redémarrage a néamoins raison de LVM. Le détachement des périphériques de boucle doit probablement suffir mais n'a pas été testé ici.

En définitive, LVM retrouve sa configuration dès lors que les disques durs sont connectés, même lorsque les périphériques ont été inversés.

Commentaires

Normalement LVM utilise des partitions physiques pour fonctionner. Afin d'éviter d'avoir à sacrifier un disque dur, on va créer de toutes pièces ces partitions à partir de fichiers.
Les résultats de commande sont affichés comme ça

Configuration de base

Toutes les actions se font en root

sudo -s

Installation du paquet lvm2, si ce n'est déjà fait

aptitude install lvm2

Accès au répertoire de root et création du répertoire de test

cd /root
mkdir test
cd test

Simulation de partitions physiques

Création des deux fichiers de 10Mo qui vont contenir les paritions

dd if=/dev/zero of=part_a bs=1M count=10
dd if=/dev/zero of=part_b bs=1M count=10

Création des partitions

losetup /dev/loop0 part_a
losetup /dev/loop1 part_b

LVM

Création des volumes physiques (Physical Volume, pv)

pvcreate /dev/loop0
pvcreate /dev/loop1

Création du groupe de volumes (Volum Group, vg)

vgcreate vg_test /dev/loop0 /dev/loop1

Vérification de l'état général de LVM

pvscan Total: 2 [19,62 MB] / in use: 0 [0 ] / in no VG: 2 [19,62 MB]

Notez le "in no VG: 2" : les PV n'ont pas encore été affectés.
Affectation des PV : 2 sont en utilisation dorénavant.

lvcreate -L 16M -n lv_test vg_test
pvscan Total: 2 [16,00 MB] / in use: 2 [16,00 MB] / in no VG: 0 [0 ]
lvscan ACTIVE '/dev/vg_test/lv_test' [16,00 MB] inherit

Création du système de fichiers

mke2fs /dev/vg_test/lv_test
mkdir monte
mount /dev/vg_test/lv_test monte
cd monte
ls lost+found

Fichiers de test

Un simple fichier texte

echo "test" > test

Création d'un fichier aléatoire avec calcul de somme de contrôle pour vérification

dd if=/dev/urandom of=gros_fichier bs=1M count=5
md5sum gros_fichier >../md5

Destruction simulée

cd ..
umount monte
aptitude --purge remove lvm2il fait un backup et recrée même le répertoire mv /etc/lvm /etc/lvm-orig
REBOOT Il est possible qu'il retrouve sa config en scannant les disques durs dispo ! En effet une réinstallation sans redémarrer lui permet de retrouver sa configuration.
aptitude install lvm2

Tests de présence des PV,VG et LV

pvscan No matching physical volumes found
vgscan No volume groups found
lvscan No volume groups found

Reconstruction

Ruse de Sioux : on inverse l'affectation des boucles aux fichiers

losetup /dev/loop1 part_a
losetup /dev/loop0 part_b

pvscan il retrouve les volumes
vgscan il retrouve vg_test
lvscan il le trouve mais dans l'état inactif

Résultat des courses : il retrouve tout ! Mais le LV est inactif.
Devant tant de prudence, on active tout de même le volume logique.

lvchange -a y vg_test lvscan ACTIVE ...

On poursuit les tests jusqu'au bout.

mount /dev/vg_test/lv_test monte
cat monte/test test
md5sum monte/gros_fichier c'est le bon !

Destruction manuelle

lvremove /dev/vg_test/lv_test il demande confirmation
vgremove /dev/vg_test
losetup -d /dev/loop0
losetup -d /dev/loop1

pvscan No matching physical volumes found
vgscan No volume groups found
lvscan No volume groups found

Références :

http://sluce.developpez.com/lvm/ http://lionel.tricon.free.fr/Articles/lvm/lvm_article.html http://www.tldp.org/HOWTO/LVM-HOWTO/index.html