Zpool migrieren

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

ZPool migrieren

Ich hatte das Problem, einen Zpool von Proxmox auf eine kleinere SSD migrieren zu müssen. Das war nicht weiter kompliziert, wenn man die Fallstricke kennt. Da ich immer einen hohen Respekt vor dem Zpool Cache habe, vermeide ich es wenn möglich, den Zpool umzubennen, erst recht, wenn auf dem Zpool ein RootFS liegt. In diesem Fall habe ich temporär einen Laptop verwendet, an dem die neue SSD per USB angeschlossen wurde. Leider gibt es von Proxmox selbst (noch) keine Rettungs CD/ISO/USB, die sich eignen würde den Pool zu migrieren ....

Ziel ist es den vorhandenen ZPool so zu migrieren, dass nichts beschädigt wird und im Fall der Fälle einfach wieder zurück gebaut werden kann.

Die Zutaten:

  • Einen USB Stick
  • Eine Rechner bzw. Laptop an dem die neue Ziel SSD angeschlossen wird
  • Ein ISO Image, welches mit ZFS bestückt wurde
  • Ein Netzwerkkabel ;-)
  • Ein wenig Zeit

USB Stick

Wir nehmen ein ISO, welcher von einem Gentoo User erstellt wurde:

und erstellen den USB Stick, wie hier erläutert.

Im wesentlichen wird die ISO per loop eingehangen und dann das usb-inst.sh Script ausgeführt, welches sich darin befindet

Wichtig an der Stelle: die ZFS Version kann neueren Datums sein, als das ZFS vom zu migrierenden Host! Das wird später noch einmal wichtig.

Neue Zielfestplatte vorbereiten

Die neue Festplatte entweder per USB anbinden am Laptop oder am Rechner per SATA anschließen und vom USB Stick booten. Anschließend wird die GPT Partitionierung mittels sgdisk erledigt. In diesem Beispiel ist die neue Festplatte per /dev/sdb erreichbar:

Gnome-terminal.png
# sgdisk -Z -o /dev/disk/sdb
# sgdisk -Z /dev/disk/by-id/sdb
# sgdisk -a1 -n1:34:2047 -t1:EF02 -n9:-8M:0 -t9:BF07 -n2:2048:0 -t2:BF01 -c 2:zfs /dev/sdb

Dann kann der neue Zpool erstellt werden. Es ist wichtig, dass nur die ZFS Funktionen aktiv sind, die auch das zu übertragende System beherrscht. Am einfachsten geht dies, wenn man testweise einen Zpool auf der neuen Platte erstellt und die Ausgaben von "zpool get all" vergleicht.

In meinem Fall waren diverse Funktionen auf Proxmox 5.0 nicht vorhanden, sodass ein "zpool import rpool" beim booten von der neuen Festplatte fehlschlug.

Von besonderer Bedeutung sind die feature@... Funktionen:

Gnome-terminal.png
...
rpool     feature@async_destroy          enabled                        local
rpool     feature@empty_bpobj            active                         local
rpool     feature@lz4_compress           active                         local
rpool     feature@multi_vdev_crash_dump  disabled                       local
rpool     feature@spacemap_histogram     active                         local
rpool     feature@enabled_txg            active                         local
rpool     feature@hole_birth             active                         local
rpool     feature@extensible_dataset     enabled                        local
rpool     feature@embedded_data          active                         local
rpool     feature@bookmarks              enabled                        local
rpool     feature@filesystem_limits      enabled                        local
rpool     feature@large_blocks           enabled                        local
rpool     feature@large_dnode            disabled                       local
rpool     feature@sha512                 disabled                       local
rpool     feature@skein                  disabled                       local
rpool     feature@edonr                  disabled                       local
rpool     feature@userobj_accounting     disabled                       local

Um Funktionen beim erstellen des Zpools zu deaktivieren, kann folgendes Kommando verwendet werden:

Gnome-terminal.png
zpool create -d -o ashift=12 -o feature@sha512=disabled -o feature@skein=disabled -o feature@userobj_accounting=disabled -o feature@edonr=disabled rpool 

Zpool übertragen

Zum Übetragen wird "zfs send / zfs receive" verwendet, was einen Snapshot benötigt. Dies kann entweder nur für ein bestimmtes ZFS Volume sein, oder auch vollständig. Dazu löschen wir der Bequemlichkeit wegen vom laufendem System das Swap Volume:

  • Auf dem Server:
Gnome-terminal.png
# swapoff -a
# zfs destroy -f rpool/swap
  • Dann den Snapshot erstellen:
Gnome-terminal.png
# zfs snapshot -r rpool@migration
# zfs list -t snapshot

Als nächstes muss dafür gesorgt werden, dass vom Laptop oder Rechner eine Netwerkverbindung besteht. Entweder per Crosslink, oder per Switch. Wird zur Übertragung SSH verwendet, muss der SSH Schlüssel erstellt/übertragen werden, sodass der Login vom Server zum Laptop/PC ohne Passwort erfolgt. Dann können die Daten übertragen werden:

Gnome-terminal.png
# zfs send -Rv rpool@migration | ssh <laptop/pc> zfs receive -vF rpool

Wird Netcat verwendet, reicht es, wenn die Ports erreichbar sind:

  • Server:
Gnome-terminal.png
# zfs send -Rv rpool@migration | nc -w 20 <laptop/pc> 8023
  • Laptop:
Gnome-terminal.png
# nc -w 120 -l -p 8023 | zfs receive -vF rpool

Als Beispiel wird hier Port 8023 verwendet.

Grub

Ist die Übertragung abgeschlossen, muss der Grub reinstalliert werden. Dazu wird der Zpool auf dem Laptop exportiert und erneut mit Parametern importiert. Da ich hier ein Proxmox 5.0 migriere, heißt das RootFS "pve-1"

  • Laptop:
Gnome-terminal.png
# zpool export rpool
# mkdir /migration
# zpool import -a -N -R /migration
# zfs mount rpool/ROOT/pve-1
# mount --bind /dev /migration/dev
# mount --bind /proc /migration/proc
# mount --bind /sys /migration/sys
# chroot /migration /bin/bash
# mv /boot/grub/grub.cfg /boot/grub/grub.cfg.migration
# update-grub
# grub-install /dev/sdb
# exit

Als letztes erfolgt das Erstellen des Swap Dateisystems:

  • Laptop:
Gnome-terminal.png
# zfs create -o sync=always -o primarycache=none -b 4k -V 8G -o logbias=throughput rpool/swap
# mkswap -f /dev/zvol/rpool/swap
# zpool export rpool

Damit wäre alles erledigt.

Quellen


--Denny (Diskussion) 23:56, 7. Nov. 2017 (CET)