Lösung 1:
Ich habe gerade ein Snapshot-basiertes Upgrade mit Ubuntu versucht. Und ja, ich musste mehrmals neu starten. Benennen Sie zuerst das ursprüngliche root-lv in etwas anderes um, damit Sie dem Snapshot den ursprünglichen Namen geben können (da ein Upgrade viele Änderungen erzeugt und Änderungen am Snapshot schneller sind als am Original ):
# lvrename lvm root root-old
# lvcreate -n root -s lvm/root-old -L 10G
Die Größe sollte passend gewählt werden. Starten Sie dann neu, damit das 'neue' lvm/ubuntu als root gemountet wird und Sie das Upgrade durchführen können. Jetzt können Sie die neue Version testen und sogar per
auf das alte System umsteigen # lvrename lvm root root-new
# lvrename lvm root-old root
# reboot
Wenn Sie das Upgrade verwerfen möchten, führen Sie es einfach (vom alten System aus)
aus# lvremove lvm/root-new
Wenn Sie die Änderungen übernehmen möchten, führen Sie einfach (vom alten System aus)
aus# lvconvert --merge lvm/root-new
oder aus dem neuen System
# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
gefolgt von einem Neustart. Das System wird die Zusammenführung sofort ablehnen, da die Volumes offen sind. Die Zusammenführung wird also während des Bootens gestartet und fortgesetzt, während Sie bereits mit dem System arbeiten können.
Ach und übrigens:Denken Sie beim Wechsel zwischen den Systemen daran, den passenden Kernel zu verwenden. Da /boot kein Teil von lvm ist, würden der alte und der neue Kernel dort nebeneinander abgelegt.
Lösung 2:
Ok, ich glaube, ich habe es herausgefunden, nachdem ich das HOWTO 3.8 noch einmal gelesen habe.
- Nur-Lese-Snapshots (wie LVM1) enthalten die Unterschiede auf Blockebene nach der Snapshot-Erstellung – das Original wird immer noch geändert, aber der Snapshot behält eine Darstellung des Originals. Lesen aus der Schnappschuss präsentiert die Daten, wie sie zu diesem Zeitpunkt erschienen.
- Lese-Schreib-Snapshots (Standard in LVM2) können geschrieben werden:Sie sind ein fork der ursprünglichen Partition. Schreiben an der Schnappschuss verändert das Original nicht.
Die Art und Weise, wie ein Snapshot funktioniert, ist eine Reihe von Änderungen auf Blockebene gegenüber dem Original. Wenn also in das Original geschrieben wird, passieren die folgenden Dinge:
- Etwas versucht, in das Original zu schreiben.
- Das Original wird gelesen und die Blöcke des Originals werden in den Snapshot kopiert.
- Original wird geändert.
- Snapshot enthält die "umgekehrten Unterschiede" - die Änderungen, die das Original so aussehen lassen, wie es ausgesehen hat, als der Snapshot erstellt wurde.
Das Wegwerfen des Schnappschusses wirkt sich also überhaupt nicht auf das Original aus, da das Original geändert wurde und der Schnappschuss nur eine Liste dieser Änderungen enthielt.
Beantwortung meiner eigenen Frage:
Erstellen Sie einen neuen Snapshot mit LVM. Wenn das Update so konfiguriert werden kann, dass es in den Snapshot-Bereitstellungspunkt schreibt, verwenden Sie einen R/W-Snapshot. Andernfalls reicht entweder RO oder R/W.
Dann:
- Wenn in den R/W-Snapshot geschrieben wird Einhängepunkt, commit indem Sie den Snapshot in das Original schreiben und zurücksetzen indem Sie den Schnappschuss wegwerfen.
- Wenn Sie in das Original schreiben Einhängepunkt, commit indem Sie den Snapshot wegwerfen und zurücksetzen durch Schreiben vom Snapshot zum Original.
Ich habe immer noch kein Tool speziell für diese Zusammenführung gefunden - und da mein Szenario nicht genau die beabsichtigte Verwendung von Snapshots ist, gibt es möglicherweise keins. Es klingt wie ein Job für rdiff.
Lösung 3:
Die Zusammenführungsfunktion für LVM2-/Device-Mapper-Snapshots ist verfügbar, wenn Sie Linux 2.6.33+ ausführen und LVM 2.0.58+ verwenden:
lvconvert --merge
Siehe diesen Beitrag:http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/
Es verweist auf http://kernelnewbies.org/Linux_2_6_33 (siehe Abschnitt 5, MD/DM) und das LVM-Änderungsprotokoll bei 2.0.58:ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
Aber ich kann dir noch nicht sagen, wie man es richtig benutzt;-)
Lösung 4:
LVM arbeitet auf Blockebene. Es weiß nicht einmal, was ein Dateisystem ist. Sie können also nicht nur bestimmte Verzeichnisse schnappen, es sei denn, ein Dateisystem von einem anderen LVM-Volume ist dort eingehängt.
Wenn Sie einen LVM-Snapshot erstellen, fordern Sie tatsächlich ein „Copy on Write“-Duplikat eines Volumes an. Jeder Block, der auf dem Snapshot-Volume geändert würde, wird zunächst unverändert im Snapshot gespeichert. Um also Änderungen zu übernehmen, müssen Sie nichts tun. Entfernen Sie einfach das Snapshot-Volume.
Ich weiß nicht genau, was der empfohlene Weg ist, um Änderungen rückgängig zu machen, da ich LVM in einem solchen Szenario nie verwendet habe, aber ich denke, es ist irgendwo in der LVM-Dokumentation gut beschrieben. Was auch immer es ist, Sie müssen wahrscheinlich alles neu starten, was geändert wurde, ein Neustart könnte eine gute Idee sein.
Lösung 5:
- Es gibt keinen Grund für eine Fusion etwas. Einfach Snapshot entfernen, Source LV bleibt geändert
- Merge erforderlich, um Änderungen rückgängig zu machen
lvconvert --merge <snapshot name>
- LVM arbeitet mit Blockgeräten. Alle FS-bezogenen Änderungen sollten je nach FS-Typ von speziellen Dienstprogrammen (xfs_growfs, e2fsck, ...) durchgeführt werden
Schnappschuss 'friert' den Zustand des ursprünglichen LV ein. Snapshot entfernen bedeutet, diesen Zustand zu vergessen. Schnappschuss zusammenführen bedeutet, zu diesem Zustand zurückzukehren
Aber innerhalb von LVM werden umgeschriebene Daten in Snapshots gespeichert:Stellen Sie sicher, dass die Snapshot-Größe der erwarteten Menge an Änderungen auf LV und Snapshot entspricht