Migration von LVM Volumes
Posted on 10. Dez, 2009 by Markus Schabel in Informatik
Nachdem ich gerade damit beschäftigt bin, ein paar virtuelle Maschinen von einem Server auf einen anderen zu migrieren, und ich jedes Mal danach suche (und finde), wie denn das mit dem Export von LVM Logical Volumes funktioniert, muss ich es hier einmal zusammenfassen.
Für Xen-Systeme ist es recht gängig, die einzelnen Partitionen als LVM Volumes einzurichten, da diese leicht auf mehrere physikalische Geräte verteilt und einfach vergrößert werden können. Ein zusätzliches wichtiges Feature für Server-Systeme ist es, dass mit LVM auch sehr einfach Snapshots eines (laufenden) Volumes erstellt werden können.
Um ein LVM Logical Volume zu kopieren (ohne dabei Einfluss auf die laufenden Systeme zu nehmen), sollte zuerst ein Snapshot von dem entsprechenden Volume gemacht werden. Um einen Snapshot zu erstellen, wird der Befehl lvcreate verwendet, wobei der Parameter -s einen Snapshot erstellt. Mit dem Parameter -n wird der Name des Snapshot-Volumes angegeben (im Beispiel lv01-snapshot), und als letzter Parameter das Volume, von dem der Snapshot erstellt werden soll (in diesem Fall /dev/vg0/lv01). Zusätzlich muss noch die Größe des Volumes angegeben werden, da diese – aus für mich unerfindlichen Gründen – nicht automatisch übernommen wird. Diese Größe kann man mit lvdisplay /dev/vg0/lv01 herausfinden (es ist das Attribut LV Size) und mit dem Parameter -L an lvcreate übergeben:
--- Logical volume ---
LV Name /dev/vg0/lv01
VG Name lvmxen
LV UUID qhNjG9-IqN9-ISRR-uD17-TJyQ-HGcY-ZOq9pm
LV Write Access read/write
LV Status available
# open 1
LV Size 2.00 GB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:20
src-systen:~# lvcreate -L2G -s -n lv01-snapshot /dev/vg0/lv01
Logical volume "lv01-snapshot" created
Dieses Snapshot Volume kann nun über beliebige Methoden auf den Zielserver übertragen werden. Dazu muss zuerst ein DiskDump davon erstellt werden, der dann beispielsweise über HTTP oder SCP oder ähnliche Methoden auf das Zielsystem kopiert werden kann (eine elegante Methode wäre natürlich auch die Übertragung mittels netcat). Um einen DiskDump zu erstellen kann der folgende Befehl verwendet werden:
Auf dem Zielsystem muss nun ein entsprechendes Logical Volume der passenden Größe erstellt werden. Auch dazu wird der Befehl lvcreate verwendet:
Logical volume "lv01" created
Nachdem der Diskdump vom Quellsystem auf das Zielsystem übertragen wurde, kann dieser entsprechend auf das Logical Volume geschrieben werden:
Es ist natürlich genauso möglich, den Zwischenschritt über den DiskDump als Datei zu überspringen und das ganze direkt zu übertragen, beispielsweise über SCP (ideal wäre hier natürlich die Verwendung von netcat):
Bei einem hinreichend schnellen Netzwerk kann die Komprimierung mit gzip genausogut entfallen. Wobei hier vermutlich die Komprimierung weniger rechenintensiv ist, als die Verschlüsselung durch ssh.
Nachdem das Volume erfolgreich übertragen wurde, kann der Snapshot wieder gelöscht werden. Dies geschieht mit dem folgenden Befehl:
Do you really want to remove active logical volume "lv01-snapshot"? [y/n]: y
Logical volume "lv01-snapshot" successfully removed
Wenn alle Volumes eines Xen-Gastsystems übertragen wurden, sollte sich dieses am Zielsystem genauso starten lassen, wie am Quellsystem. Es ist dabei jedoch eventuell darauf zu achten vorher die IP-Adressen zu aktualisieren.





