Migrace celého zfs poolu ze serveru na server (FreeBSD)

Pokud potřebujete přesunout nebo zreplikovat celý zfs pool, resp. všechny datasety v něm ze serveru na serveru, je to poměrně snadné. Následující ukázka ukazuje postup ze serveru u16 na u17, obojí jedou na FreeBSD.

Nejprve si na novém serveru u17 připravíme partitiony a nový zpool:

Vytvoříme GPT schéma na discích da0 a da1:

root@u17:~ # gpart create -s gpt da0
da0 created
root@u17:~ # gpart create -s gpt da1
da1 created

Vytvoříme boot paritiony:

root@u17:~ # gpart add -a 4k -s 512k -t freebsd-boot da0
da0p1 added
root@u17:~ # gpart add -a 4k -s 512k -t freebsd-boot da1
da1p1 added

Vytvoříme partitiony pro swap:

root@u17:~ # gpart add -a 1m -s 4G -t freebsd-swap -l swap0 da0
da0p2 added
root@u17:~ # gpart add -a 1m -s 4G -t freebsd-swap -l swap0 da1
da1p2 added

A nakonec pro samotné zfs (resp. pool):

root@u17:~ # gpart add -t freebsd-zfs -l zroot da0
da0p3 added
root@u17:~ # gpart add -t freebsd-zfs -l zroot da1
da1p3 added

Zapíšeme zavaděč, aby bylo možné z disků bootovat:

root@u17:~ # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
partcode written to da0p1
bootcode written to da0
root@u17:~ # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
partcode written to da1p1
bootcode written to da1

Vytvoříme zrcadlený zfs pool z partition z disků da0 a da1:
root@u17:~ # zpool create -m / -R /mnt zroot mirror /dev/da0p3 /dev/da1p3

Na starém serveru vytvoříme rekurzivní snapshoty:

[root@u16 ~] # zfs snapshot -r zroot@backup

Nakonec zahájíme přenos (spouštímě na novém u17):

ssh -p 46000 root@u16 zfs send -R zroot@backup | zfs recv -F zroot

Lze samozřejmě iniciovat přenos ze serveru, odkud se budou transferovat data, pak by to vypadalo následovně (spouštímě na starém u16):

zfs send -R zroot@backup | ssh root@u17 zfs recv -F zroot

Teď už jen čekat, dokud se přenos nedokončí.