Valider ou annuler un instantané Linux LVM?

16

Je suis sur le point d'effectuer une mise à niveau expérimentale sur mon serveur CentOS 5. Si la mise à niveau échoue, je veux pouvoir annuler les modifications apportées au système de fichiers. Ce scénario semble similaire à l'exemple de la section 3.8 du LVM HOWTO pour les instantanés de lecture-écriture LVM2 - mais l'exemple manque plutôt dans le mode d'emploi réel.

  1. Comment puis-je valider les modifications, les fusionner à nouveau dans la partition d'origine?

  2. Comment pourrais-je rétablir les modifications et restaurer le système de fichiers à son état d'origine? Dois-je supposer que je devrai redémarrer plusieurs services, sinon un redémarrage pur et simple?

  3. Est-il possible d'instantaner uniquement certains répertoires sur une partition, ou s'agit-il d'une opération à l'échelle de la partition?

Shewfig
la source

Réponses:

11

La fonctionnalité de fusion d'instantanés LVM2 / mappeur de périphérique est disponible si vous utilisez Linux 2.6.33+ et utilisez LVM 2.0.58+:

lvconvert --merge

Voir cet article: 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 changelog LVM au 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Mais je ne peux pas encore vous dire comment l'utiliser correctement ;-)

Bertrand Mathieu
la source
dmsetup targetsdevrait afficher la fusion-capture si c'est le cas, la commande de fusion, appliquée à la capture-lv, reviendra à l'état où la capture a été prise.
Nils
L'OP semble confus quant à la validation des modifications via une sorte d'étape de fusion. Les modifications sont validées au fur et à mesure que la taille de l'instantané augmente. L'instantané (des modifications) est l'information nécessaire pour les sauvegarder via lvconvert --merge. Si l'OP est satisfait de ses modifications, il peut supprimer l'instantané via lvremove.
Vince
20

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 quelque chose d'autre, afin que vous puissiez donner à l'instantané le nom d'origine (car une mise à niveau crée beaucoup de changements et 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 supprimer la mise à niveau, exécutez simplement (à partir de l'ancien système)

# lvremove lvm/root-new

Si vous souhaitez valider les modifications, exécutez simplement (à partir de l'ancien système)

# lvconvert --merge lvm/root-new

ou, du 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 immédiatement, car les volumes sont ouverts. La fusion sera donc 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é. Puisque / boot ne fait pas partie de lvm, l'ancien et le nouveau noyau y seraient placés côte à côte.

Viktor Dick
la source
Merci pour votre réponse. Je viens de rejouer votre procédure dans une machine virtuelle CentOS 7 et cela a fonctionné comme un charme. Après avoir réinitialisé ma machine virtuelle au milieu du processus de fusion, le sous-système LVM l'a repris pendant que le système accédait toujours aux fichiers mis à niveau.
Anderson Medeiros Gomes
Une partie de cette réponse semble suggérer de commettre des changements via lvconvert --merge. À mesure que la taille de l'instantané augmente, les modifications sont également validées. Un lvconvert --merge annule (annule) les modifications à l'aide des informations sur l'instantané.
Vince
10

Ok, je pense l'avoir compris en relisant le HOWTO 3.8.

  • Les instantanés en lecture seule (comme LVM1) contiennent les différences au niveau du bloc après la création de l'instantané - l'original est toujours modifié, mais l'instantané conserve une représentation de l'original. La lecture de l' instantané présente les données telles qu'elles apparaissaient à l'époque.
  • Les instantanés en lecture-écriture (par défaut dans LVM2) peuvent être écrits dans: ils sont un fork de la partition d'origine. L'écriture dans l' instantané ne modifie 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:

  1. Quelque chose essaie d'écrire sur l'original.
  2. L'original est lu et les blocs de l'original sont copiés dans l'instantané.
  3. L'original est changé.
  4. Le cliché contient les «différences inverses» - les modifications qui donnent à l'original l'apparence qu'il avait lors de la création du cliché.

Donc, jeter le cliché n'affectera pas du tout l'original - car l'original a été modifié et le cliché contenait juste une liste de ces modifications.

Répondre à 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 feront l'affaire.

Alors:

  • Si vous écrivez sur le point de montage de l' instantané R / W , validez en écrivant l'instantané dans l'original et annulez en jetant l'instantané.
  • Si vous écrivez sur le point de montage d' origine , validez en jetant l'instantané et revenez en écrivant de l'instantané sur l'original.

Je n'ai toujours pas trouvé d'outil spécifiquement pour effectuer cette fusion - et, étant donné que mon scénario n'est pas exactement l'utilisation prévue des instantanés, il n'y en a peut-être pas. Cela ressemble à un travail pour rdiff.

Shewfig
la source
Aucun outil de fusion LVM n'est encore disponible. Il est en préparation, mais je ne pense pas qu'il soit complet.
Ignacio Vazquez-Abrams du
l'outil de fusion existe maintenant (au moins sur Ubuntu Trusty) - lvconvert --merge <snapshot-name>"restaurera" votre disque d'origine sur cet instantané et supprimera cet instantané. Vous pouvez bien sûr le restaurer rapidement tout de suite.
dpb
3

LVM fonctionne au niveau du bloc. Il «ne sait même pas» ce qu'est un système de fichiers. Vous ne pouvez donc pas créer d'instantanés uniquement certains répertoires, sauf si un système de fichiers d'un volume LVM différent y est monté.

Lorsque vous créez un instantané LVM, vous demandez en fait une copie en copie sur un volume. Tout bloc qui serait modifié sur le volume instantané sera d'abord stocké non modifié dans l'instantané. Donc, pour «valider les changements», vous n'avez rien à faire. Retirez simplement le volume de l'instantané.

Je ne sais pas vraiment 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 dans la documentation LVM quelque part. 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.

Jacek Konieczny
la source
2
  1. Il n'y a aucune raison d'en fusionner . Il suffit de supprimer l'instantané, la source LV reste modifiée
  2. Fusion nécessaire pour annuler les modifications lvconvert --merge <snapshot name>
  3. LVM fonctionne avec des périphériques blocs. Toutes les modifications liées à FS doivent être effectuées par des utilitaires spéciaux (xfs_growfs, e2fsck, ...) selon le type de FS

Instantané «geler» l'état d'origine du LV. Supprimer l'instantané signifie oublier cet état. Fusionner l'instantané signifie revenir à cet état

Mais à l'intérieur de LVM, il enregistre les données réécrites dans l'instantané: assurez-vous que la taille de l'instantané correspond à la quantité attendue de changements sur LV et l'instantané

deman_killer
la source
En fait, l'instantané ne gèle rien. Il enregistre les modifications dans un emplacement supplémentaire afin qu'elles puissent être annulées si nécessaire.
Vince
0

La documentation est déroutante. Il me semble que lvcreate --merge signifie annuler toutes les modifications et lvremove signifie valider les modifications. La distinction réside dans la façon dont vous l'utilisez.

Dans la plupart des cas, vous utilisez simplement l'instantané comme une copie figée en temps réel du volume en direct, et le volume en direct change constamment. Dans ce cas, si vous fusionnez, cela signifierait logiquement que vous allez écraser le volume en direct avec la copie figée, ou en d'autres termes, fusionner signifie annuler les modifications et supprimer signifie valider les modifications.

Si vous écrivez sur l'instantané (une nouvelle option avec LVM2), ce qui n'est pas le comportement par défaut, il semble, et nécessite probablement de changer la configuration ailleurs pour que les applications écrivent sur l'instantané au lieu du volume d'origine, alors l'inverse serait vrai.

Soyez prudent lorsque vous traitez des instantanés, car certaines personnes supposeront que vous avez l'intention de les utiliser dans un sens et vous donneront des instructions qui pourraient détruire votre système si vous opérez dans l'hypothèse inverse!

RedScourge
la source
Vous écrivez sur l'instantané simplement en montant l'instantané; ce qui est monté là où a peu à voir avec les valeurs par défaut de LVM - peu importe ce que vous faites exactement avec chaque volume logique, que ce soit un instantané ou non, il suit simplement s'il est ouvert ou non.
Josip Rodin