Inhaltsverzeichnis
LVM Snapshot Merge
Wenn man von einem LVM Logical Volume (LV) einen Snapshot erstellt hat, kann dieser Snapshot auch mit dem Original-LV zusammengeführt werden. Dies kann beispielsweise hilfreich sein, wenn man vor einem Applikations-Update einen Snapshot von einem LV mit Dateisystem erstellt und die durchgeführten Änderungen wieder rückgängig machen möchte. Die hier gezeigten Tests wurden unter Ubuntu 12.04 LTS (12.04.5) mit Linux Kernel 3.2 durchgeführt.
Voraussetzungen
Das Device-Mapper Target snapshot-merge muss im Kernel vorhanden sein.
$ dmsetup targets mirror v1.12.2 snapshot-merge v1.1.0 snapshot-origin v1.7.2 snapshot v1.10.2 striped v1.4.1 linear v1.1.1 error v1.0.1
LVM Snapshot zusammenführen (merge)
Mit Hilfe des Kommandos lvconvert --merge /dev/vg_testvg/testsnap kann der Snapshot testsnap mit dem Original-LV zusammengeführt werden.
Ob diese Zusammenführung(merge) gleich beginnen kann, hängt vom Status des LV und des Snapshots ab. In werden folgende Möglichkeiten genannt:
- Wenn das Original-LV und der Snapshot nicht geöffnet sind, beginnt das Zusammenführen sofort.
- Wenn das Original-LV oder der Snapshot geöffnet ist, startet der Merge sobald Original-LV und Snapshot deaktiviert sind und danach eines der beiden wieder reaktiviert wird.
- Wenn das Original-LV nicht geschlossen werden kann (z.B. root Dateisystem) wird die Zusammenführung erst durch einen Reboot vom Server gestartet.
Während der Merge läuft werden Lese- und Schreibzugriffe direkt zum Snapshot weitergeleitet. Dies ermöglicht sofortigen Zugriff auf die Daten des Snapshots ohne auf die Fertigstellung des Merge warten zu müssen.
Nach Fertigstellung der Zusammenführung wird der ursprüngliche Snapshot entfernt.
Beispiel einer Zusammenführung
root@lvm:~$ lvcreate -n test -L 1G /dev/vg_testvg Logical volume "test" created root@lvm:~$ mkfs.ext4 /dev/vg_testvg/test ... root@lvm:~$ mount /dev/vg_testvg/test /mnt/test/ root@lvm:~$ cd /mnt/test/ root@lvm:/mnt/test$ touch before_snapshot root@lvm:/mnt/test$ lvcreate -s -n testsnap -L 1G /dev/vg_testvg/test Logical volume "testsnap" created root@lvm:/mnt/test$ touch after_snapshot root@lvm:/mnt/test$ cd .. root@lvm:/mnt$ umount test/ root@lvm:/mnt$ lvconvert --merge /dev/vg_testvg/testsnap Merging of volume testsnap started. test: Merged: 0.0% test: Merged: 0.0% Merge of snapshot into logical volume test has finished. Logical volume "testsnap" successfully removed root@lvm:/mnt$ mount /dev/vg_testvg/test /mnt/test/ root@lvm:/mnt$ cd test/ root@lvm:/mnt/test$ ls before_snapshot lost+found
Wenn das Dateisystem nicht ausgehängt und deaktiviert wurde, kommt folgende Fehlermeldung.
root@lvm:/mnt$ lvconvert --merge /dev/vg_testvg/testsnap Can't merge over open origin volume Merging of snapshot testsnap will start next activation.
In diesem Fall muss das LV deaktiviert und danach wieder aktiviert werden.
root@lvm:~$ umount /mnt/test root@lvm:~$ lvconvert --merge /dev/vg_testvg/testsnap Snapshot testsnap is already merging root@lvm:~$ lvchange -an /dev/vg_testvg/test root@lvm:~$ lvchange -ay /dev/vg_testvg/test root@lvm:~$ lvconvert --merge /dev/vg_testvg/testsnap One or more specified logical volume(s) not found
Sofern LVM Logging mit einem Level von mindestens 4 (level=4) aktiviert ist, findet man auch in der Log-Datei die Info, sobald der Merge abgeschlossen ist.
Oct 29 13:06:53 lvm lvm[22146]: Parsing: lvconvert --merge /dev/vg_testvg/testsnap Oct 29 13:06:53 lvm lvm[22146]: Processing: lvconvert --merge /dev/vg_testvg/testsnap Oct 29 13:23:19 lvm lvm[2346]: Merging of volume testsnap started. Oct 29 13:23:19 lvm lvm[2346]: test: Merged: 0.0% Oct 29 13:23:19 lvm lvm[2346]: Merge of snapshot into logical volume test has finished. ... Oct 29 13:24:18 lvm lvm[3328]: Can't merge over open origin volume Oct 29 13:24:18 lvm lvm[3328]: Merging of snapshot testsnap will start next activation. Oct 29 13:25:44 lvm lvm[4251]: Merge of snapshot into logical volume test has finished.
— Marko Oldenburg 2023/02/11 08:25