Inhaltsverzeichnis
LVM Snapshots
LVM Snapshots ermöglichen einfache Point-In-Time Kopien von LVM Logical Volume (LVs). Bei Snapshots handelt es sich jedoch nicht um echte Kopien des Original-LVs. Nur wenn Daten des Original-LV nach der Erstellung eines Snapshots verändert werden, werden jeweils zuvor die ursprünglichen Daten in den Snapshot kopiert (Copy-on-Write).
Funktionsweise und Verwendungen
Snapshots belegen nur dann denselben Plattenplatz wie deren zugehörige originale LVs, wenn nach dem Erstellen des Snapshots alle Daten des Original-LV verändert werden. Ändern sich nach dem Erstellen nur wenig Daten, reicht auch weniger Platz aus. Man kann daher durchaus einen Snapshot erstellen, der nur 10% der Größe des Original-LVs hat. Wichtig ist dann, den freien Platz des Snapshot-Volumes im Auge zu behalten, da ein voll ausgelastetes Snapshot-Volume unbrauchbar wird (Änderungen gegenüber des Original-LVs können nicht mehr protokolliert werden). Mittels lvs-Befehl kann die Auslastung eines Snapshot-Volumes überprüft werden. Hervorzuheben ist auch, dass Snapshots selbst nicht als Backup-Mittel gedacht sind, da ja nur die Änderungen gespeichert werden. Typischerweise sieht das Backup-Szenario wie folgt aus:
- Snapshot erstellen
- Backup der Daten des Snapshots erstellen - das originale LV kann weiterlaufen und „online“ sein.
- Snapshot wieder entfernen, da ansonsten die Verfolgung der Änderungen weiterlaufen würde.
Dadurch kann z.B. vermieden werden, dass Server für ein Backup heruntergefahren werden müssen, da der Snapshot die Daten für die Sicherung zur Verfügung stellt.
Ein weitere Verwendung von Snapshots wäre für experimentelle Tests, die nicht am original Dateisystem durchgeführt werden soll. Hierbei kann ein Snapshot erstell werden, dieser gemountet und die Tests durchgeführt werden. Somit wird nur der Snapshot verändert und das originale Dateisystem bleibt unverändert.
Konfigurations-Beispiel
In jener Volume Group, für die ein Snapshot erstellt werden soll, muss nicht allokierter Speicherplatz für den Snapshot vorhanden sein. Sollte bereits der gesamte Speicherplatz der Volume Group für Logical Volumes im Einsatz sein, zeigt der Artikel LVM vergrößern wie eine Volume Group vergrößert wird.
Im folgenden Beispiel stehen noch 2GB zur Verfügung, die für einen Snapshot zum Einsatz kommen:
root@ubuntu:~# vgdisplay --- Volume group --- VG Name vg00 [...] VG Size 7.98 GiB PE Size 4.00 MiB Total PE 2044 Alloc PE / Size 1533 / 5.99 GiB Free PE / Size 511 / 2.00 GiB VG UUID YTEj9f-9LCT-EOP5-JBEA-YHSz-c0R1-TMzVmy
Der vorhandene Platz von 2 GiB in vg00 wird als Snapshot-Volume eingesetzt:
root@ubuntu:~# lvcreate -l100%FREE -s -n data_snap /dev/vg00/data Logical volume "data_snap" created
Nun sind die gesamten 2 GiB als Snapshot-LV für das LV „data“ verfügbar. Möchte man die 2 GiB nun aber aufteilen, um es für mehrere LVs als Snapshot-LV zu verwenden, muss zuerst data_snap entfernt werden:
root@ubuntu:~# lvremove /dev/vg00/data_snap Do you really want to remove active logical volume data_snap? [y/n]: y Logical volume "data_snap" successfully removed
Nun ist der vorhandene Platz wieder frei und kann aufgeteilt werden:
root@ubuntu:~# vgs VG #PV #LV #SN Attr VSize VFree vg00 4 2 0 wz--n- 7.98g 2.00g root@ubuntu:~# lvcreate -l50%FREE -s -n data_snap /dev/vg00/data Logical volume "data_snap" created root@ubuntu:~# vgs VG #PV #LV #SN Attr VSize VFree vg00 4 3 1 wz--n- 7.98g 1.00g root@ubuntu:~# lvcreate -l100%FREE -s -n data_snap1 /dev/vg00/data1 Logical volume "data_snap1" created
Werden nun im laufenden Betrieb Daten im Filesystem verändert, so wird dessen ursprünglicher Inhalt zuerst in den Snapshot kopiert. Dieser Block wird auch als „kopiert“ in der Exception Table markiert. Seit dem lvm2-Format werden standardmäßig read/write Snapshots erstellt. Greift man nun auf einen Snapshot zu, werden die geänderten Blöcke als „used“ in der Exception Table markiert und von nun an niemals kopiert. Bezüglich der Größe des Snapshots dürfen sich im Orignial-Volume „data“ maximal 1 GiB ändern, damit der Snapshot nutzbar bleibt. Ändern sich im Original-Volume mehr Daten, wird der Snapshot verworfen und ist verloren.
Für die Erstellung einer Sicherung kann der Snapshot wie üblich gemountet und anschließend gesichert werden. Im obigen Beispiel befand sich zum Zeitpunkt der Erstellung von „data_snap“ Datei im LV „data“, von derer nun ein Snapshot existiert. Diese Datei soll nun gelöscht und dessen Vorhanden-Sein im Snapshot verifiziert werden.
root@ubuntu:~# mount /dev/vg00/data data root@ubuntu:~# mount /dev/vg00/data_snap data_snap root@ubuntu:~# cd data root@ubuntu:~/data# l file lost+found/ root@ubuntu:~/data# rm file root@ubuntu:~/data# cd .. root@ubuntu:~# cd data_snap/ root@ubuntu:~/data_snap# l file lost+found/
Die gelöschte Datei ist im Snapshot durchaus noch verfügbar und kann daher auch gesichert oder auch wiederhergestellt werden.
— Marko Oldenburg 2023/02/11 08:25