kurze Antwort: zfs send | recv
etwas längere Antwort: du brauchst einen Snapshot des Pools, den du senden möchtest und einen Pool, in den du diesen übertragen kannst. Ich selbst habe das bisher mehrmals "Offline" gemacht, also die neuen Platten in meinen PC eingebaut dort vorbereitet und danach im neuen Rechner gebootet, aber Testweise auch schon mal ein komplettes System über Netzwerk zu einem anderen PC geschickt. Dann muss der natürlich über Netzwerk erreichbar sein (ssh) und muss ZFS verstehen. In meinem Fall war ein FreeBSD dort installiert, doch man könnte natürlich ein Live-System wie nomad-bsd benutzen. Das Beispiel, wie ich das über Netz gesendet habe, hatte ich nicht dokumentiert. In der man-Page zu ZFS ist ein Beispiel zu zfs send | recv über ssh und es findet sich einige Information im Web dazu, auch, wie ein kompletter System-Umzug gemacht wird.
Wie immer sollte man sich an solchen Texten nur orientieren und zuvor alles verstehen, was dort gemacht wird. Trotzdem gebe ich mal meine Mitschrift hier wieder, die ich noch finden kann. Ich weiß nicht mehr, wozu das gut war. Vielleicht war das nur ein Test, vielleicht war das echt. Ich wundere mich darüber, dass nur eine Platte benutzt wurde und die offenbar 1 TB groß ist. Ich habe aber keine 1 TB großen SSDs im Einsatz und FreeBSD nur auf SSDs laufen und in der Regel wenigstens als Mirror mit einfacher Redundanz. Es könnte also irgendein Test gewesen sein:
Code:
root@Celsius:/home/pit # zpool import Extern
root@Celsius:/home/pit # zpool destroy Extern
root@Celsius:/home/pit # gpart destroy -F da3
da3 destroyed
root@Celsius:/home/pit # gpart create -s gpt da3
da3 created
root@Celsius:/home/pit # gpart add -t freebsd-boot -l boot0 -a4k -s 512k da3
da3p1 added
root@Celsius:/home/pit # gpart add -t freebsd-swap -l swap0 -b 1m -s 2g da3
da3p2 added
root@Celsius:/home/pit # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da3
partcode written to da3p1
bootcode written to da3
root@Celsius:/home/pit # gpart add -t freebsd-zfs -l system0 -a 1m -s 928g da3
da3p3 added
root@Celsius:/home/pit # zpool create -R /tmp/Extern Extern /dev/da3p3
root@Celsius:/home/pit # zfs get compression Extern
NAME PROPERTY VALUE SOURCE
Extern compression off default
root@Celsius:/home/pit # zfs set compression=lz4 Extern
root@Celsius:/home/pit # zfs set checksum=fletcher4 Extern
root@Celsius:/home/pit # zfs set atime=off Extern
root@Celsius:/home/pit # zfs send -R PitPool@07032018 | zfs recv -Fduv Extern
receiving full stream of PitPool@07032018 into Extern@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/var@07032018 into Extern/var@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/ROOT@07032018 into Extern/ROOT@07032018
received 46,6KB stream in 1 seconds (46,6KB/sec)
receiving full stream of PitPool/ROOT/default@07032018 into Extern/ROOT/default@07032018
.....
root@Celsius:/home/pit # zfs get mountpoint Extern
NAME PROPERTY VALUE SOURCE
Extern mountpoint /tmp/Extern/PitPool received
/tmp/Extern existierte:
root@Celsius:/home/pit # zfs mount Extern/ROOT/default
edit rc.conf
edit loader.conf
root@Celsius:/home/pit # zfs umount Extern/ROOT/default
root@Celsius:/home/pit # zpool export Extern
Das ist eine Mischung von Befehlen und Ausgaben der Konsole mit meinen Kommentaren dazu, die ich nicht kenntlich gemacht habe!
Auch ist das edit rc.conf... natürlich nur ein Hint. Wer eine xorg.conf benutzt, muss sich auch darum kümmern usw.
Weil ich es als wichtig erlebte nochmal der Hinweis: wer bei dieser Methode gleiche Namen für alten und neuen Pool verwendet, wird Probleme bekommen. Man sieht, dass der Name des alten Pools in meinem Beispiel PitPool ist und dass ich einen Snap vom März 2018 übertragen hatte (zu einem Pool Extern). Mein derzeitiger Pool heißt PitsPool und wurde etwas später ganz ähnlich etabliert. Also, immer eindeutige Namen und niemals die gleichen Namen für unterschiedliche Pools, das macht das Leben einfacher!
Dass ich in dem Beispiel oben nicht nur den einfachen Befehl zum Übertragen kopierte, sondern die komplette Einrichtung des neuen Pools (Extern) zeige, erscheint mir einfach sinnvoll. In den meisten Fällen dürfte dies ja die Aufgabe sein und dann hat man das alles an einem Platz.
Aber nochmal: das ist ein Beispiel, es ist über zwei Jahre alt und ich habe mir die einzelnen Parameter angelesen und für mich so gewählt. Das sollte man nicht einfach per Copy and Paste übernehmen.