LVM Snapshots

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

LVM Snapshots ermöglichen einfache Point-In-Time Kopien von LVM Logical Volumes (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[1]).

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).[2] 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:

  1. Snapshot erstellen
  2. Backup der Daten des Snapshots erstellen - das originale LV kann weiterlaufen und "online" sein.
  3. 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.[3]

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.[2]

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.[4]

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.

Einzelnachweise

Weitere Informationen


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer, tätig im Bereich Knowledge Transfer bei Thomas-Krenn, hat sein Studium zu Computer- und Mediensicherheit an der FH Hagenberg abgeschlossen. Er ist regelmäßig Autor in Fachzeitschriften und Speaker bei Konferenzen wie LinuxCon, OSDC, OSMC, LinuxTag u.v.m. Seine Freizeit gestaltet er sehr abwechslungsreich. In einem Moment absolviert er seinen Abschluss im Klavierspielen, im anderen läuft er beim Linzmarathon in der Staffel mit oder interessiert sich für OpenStreetMap.


Das könnte Sie auch interessieren

LVM Mirrored Volume
LVM Snapshot Merge
LVM vergrößern