Solution 1 :
Je viens d'essayer une mise à niveau basée sur un instantané avec Ubuntu. Et oui, j'ai dû redémarrer plusieurs fois. Renommez d'abord le root-lv d'origine en autre chose, afin que vous puissiez donner à l'instantané le nom d'origine (puisqu'une mise à niveau crée beaucoup de changements et que les changements sont plus rapides sur l'instantané que sur l'original ):
# lvrename lvm root root-old
# lvcreate -n root -s lvm/root-old -L 10G
La taille doit être choisie de manière appropriée. Redémarrez ensuite, afin que le "nouveau" lvm/ubuntu soit monté en tant que root et que vous puissiez effectuer la mise à niveau. Vous pouvez maintenant tester la nouvelle version et même passer à l'ancien système en
# lvrename lvm root root-new
# lvrename lvm root-old root
# reboot
Si vous souhaitez abandonner la mise à niveau, exécutez simplement (depuis l'ancien système)
# lvremove lvm/root-new
Si vous souhaitez valider les modifications, exécutez simplement (depuis l'ancien système)
# lvconvert --merge lvm/root-new
ou, depuis le nouveau système
# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
suivi d'un redémarrage. Le système refusera de faire la fusion tout de suite, puisque les volumes sont ouverts. Ainsi, la fusion sera lancée pendant le démarrage et poursuivie pendant que vous pouvez déjà travailler avec le système.
Oh, et au fait :lorsque vous passez d'un système à l'autre, n'oubliez pas d'utiliser le noyau approprié. Comme /boot ne fait pas partie de lvm, l'ancien et le nouveau noyau y seraient placés côte à côte.
Solution 2 :
Ok, je pense avoir compris en relisant le HOWTO 3.8.
- Les instantanés en lecture seule (comme LVM1) contiennent les différences au niveau des blocs après la création de l'instantané :l'original est toujours modifié, mais l'instantané conserve une représentation de l'original. Lecture de l'instantané présente les données telles qu'elles apparaissaient à ce moment-là.
- Les instantanés en lecture-écriture (par défaut dans LVM2) peuvent être écrits :il s'agit d'un fork de la partition d'origine. Écrire à l'instantané ne change pas l'original.
Le fonctionnement d'un instantané est un ensemble de modifications au niveau du bloc par rapport à l'original. Ainsi, lorsque l'original est écrit, les choses suivantes se produisent :
- Quelque chose essaie d'écrire dans l'original.
- L'original est lu et les blocs de l'original sont copiés dans l'instantané.
- L'original est modifié.
- L'instantané contient les "différences inverses", c'est-à-dire les modifications qui donnent à l'original l'apparence qu'il avait lors de la création de l'instantané.
Ainsi, jeter l'instantané n'affectera pas du tout l'original, car l'original a été modifié et l'instantané ne contenait qu'une liste de ces modifications.
Répondant à ma propre question :
Créez un nouvel instantané avec LVM. Si la mise à jour peut être configurée pour écrire sur le point de montage de l'instantané, utilisez un instantané R/W. Sinon, RO ou R/W suffiront.
Ensuite :
- Si vous écrivez dans l'instantané R/W point de montage, commit en écrivant l'instantané à l'original, et revenir en jetant l'instantané.
- Si vous écrivez à l'original point de montage, commit en jetant l'instantané, et revenir en écrivant de l'instantané à l'original.
Je n'ai toujours pas trouvé d'outil spécifique pour effectuer cette fusion - et, étant donné que mon scénario n'est pas exactement l'utilisation prévue des instantanés, il se peut qu'il n'y en ait pas. Cela ressemble à un travail pour rdiff.
Solution 3 :
La fonctionnalité de fusion d'instantanés LVM2 / mappeur de périphériques est disponible si vous exécutez Linux 2.6.33+ et utilisez LVM 2.0.58+ :
lvconvert --merge
Voir ce post :http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/
Il fait référence à http://kernelnewbies.org/Linux_2_6_33 (regardez la section 5, MD/DM) et au journal des modifications LVM à 2.0.58 :ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
Mais je ne peux pas encore vous dire comment l'utiliser correctement;-)
Solution 4 :
LVM fonctionne au niveau du bloc. Il "ne sait même pas" ce qu'est un système de fichiers. Ainsi, vous ne pouvez pas capturer uniquement certains répertoires, à moins qu'un système de fichiers d'un autre volume LVM n'y soit monté.
Lorsque vous créez un instantané LVM, vous demandez en fait une copie en double d'un volume. Tout bloc qui serait modifié sur le volume instantané sera d'abord stocké sans modification dans l'instantané. Donc, pour "valider les modifications", vous n'avez rien à faire. Supprimez simplement le volume de l'instantané.
Je ne sais pas trop quelle est la méthode recommandée pour 'annuler les modifications', car je n'ai jamais utilisé LVM dans un tel scénario, mais je suppose que cela est bien décrit quelque part dans la documentation LVM. Quoi qu'il en soit, vous devrez probablement redémarrer tout ce qui a été modifié, un redémarrage peut être une bonne idée.
Solution 5 :
- Il n'y a aucune raison de fusionner quelques. Supprimez simplement l'instantané, la source LV reste modifiée
- Fusion nécessaire pour annuler les modifications
lvconvert --merge <snapshot name>
- LVM fonctionne avec des périphériques en mode bloc. Toute modification liée à FS doit être effectuée par des utilitaires spéciaux (xfs_growfs, e2fsck, ...) selon le type de FS
L'instantané "fige" l'état du LV d'origine. Supprimer l'instantané signifie oublier cet état. Fusionner l'instantané signifie revenir à cet état
Mais dans LVM, il enregistre les données réécrites dans l'instantané :assurez-vous que la taille de l'instantané correspond à la quantité de modifications attendue sur LV et l'instantané