ZFS send receive von komplettem System

Mardor

Well-Known Member
Hallo,

ich habe ein System welches komplett fertig konfiguriert ist, dieses möchte ich via zfs send und receive auf ein neu installiertes Freebsd übertragen. Leider sind alle Dinge die ich versuche bisher fehlgeschlagen.

Mein komplett konfiguriertes System:

Code:
--- OK ---
zroot@20160502_2053_transfer_testsnap                   0      -    96K  -
zroot/ROOT@20160502_2053_transfer_testsnap              0      -    96K  -
zroot/ROOT/default@20160502_2053_transfer_testsnap      0      -   683M  -
zroot/tmp@20160502_2053_transfer_testsnap               0      -   128K  -
zroot/usr@20160502_2053_transfer_testsnap               0      -    96K  -
zroot/usr/home@20160502_2053_transfer_testsnap          0      -   152K  -
zroot/usr/ports@20160502_2053_transfer_testsnap         0      -   716M  -
zroot/usr/src@20160502_2053_transfer_testsnap           0      -  1,10G  -
zroot/var@20160502_2053_transfer_testsnap               0      -    96K  -
zroot/var/audit@20160502_2053_transfer_testsnap         0      -    96K  -
zroot/var/crash@20160502_2053_transfer_testsnap         0      -    96K  -
zroot/var/log@20160502_2053_transfer_testsnap           0      -   300K  -
zroot/var/mail@20160502_2053_transfer_testsnap          0      -   112K  -
zroot/var/tmp@20160502_2053_transfer_testsnap           0      -    96K  -

Das Zielsystem:

Code:
zroot                408M  20.7G    96K  /zroot
zroot/ROOT           406M  20.7G    96K  none
zroot/ROOT/default   406M  20.7G   406M  /
zroot/tmp             96K  20.7G    96K  /tmp
zroot/usr            384K  20.7G    96K  /usr
zroot/usr/home        96K  20.7G    96K  /usr/home
zroot/usr/ports       96K  20.7G    96K  /usr/ports
zroot/usr/src         96K  20.7G    96K  /usr/src
zroot/var            620K  20.7G    96K  /var
zroot/var/audit       96K  20.7G    96K  /var/audit
zroot/var/crash       96K  20.7G    96K  /var/crash
zroot/var/log        140K  20.7G   140K  /var/log
zroot/var/mail        96K  20.7G    96K  /var/mail
zroot/var/tmp         96K  20.7G    96K  /var/tmp

Leider funktioniert die Übertragung überhaupt nicht:

Code:
root@xxx /data/root-scripts: zfs send -Rv zroot@20160502_2054_transfer_testsnap | ssh root@aaa.bbb.ccc.ddd zfs receive -Fv root/

WARNING: could not send zroot@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/ROOT@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/ROOT/default@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/tmp@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var/crash@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var/audit@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var/mail@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var/tmp@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/var/log@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/usr@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/usr/home@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/usr/src@20160502_2054_transfer_testsnap: does not exist
WARNING: could not send zroot/usr/ports@20160502_2054_transfer_testsnap: does not exist
total estimated size is 0
Password for root@testsystem:
cannot receive: failed to read from stream

Habe ich irgendetwas ganz dummes Übersehen oder etwas komplett falsch verstanden ?


Gruß Mardor
 
Oh, oh wie peinlich. Mehrmals draufgeschaut und mehrfach übersehen.

Leider funktioniert es aber auch mit dem korrekten Namen nicht:

Code:
zfs send -Rv zroot@20160502_2053_transfer_testsnap | ssh root@aaa.bbb.ccc.ddd zfs receive -Fv root/
full send of zroot@20160502_2053_transfer_testsnap estimated size is 9,50K
full send of zroot/ROOT@20160502_2053_transfer_testsnap estimated size is 9,50K
full send of zroot/ROOT/default@20160502_2053_transfer_testsnap estimated size is 1,11G
full send of zroot/tmp@20160502_2053_transfer_testsnap estimated size is 51K
full send of zroot/var@20160502_2053_transfer_testsnap estimated size is 9,50K
full send of zroot/var/crash@20160502_2053_transfer_testsnap estimated size is 35,5K
full send of zroot/var/audit@20160502_2053_transfer_testsnap estimated size is 35K
full send of zroot/var/mail@20160502_2053_transfer_testsnap estimated size is 102K
full send of zroot/var/tmp@20160502_2053_transfer_testsnap estimated size is 35K
full send of zroot/var/log@20160502_2053_transfer_testsnap estimated size is 449K
full send of zroot/usr@20160502_2053_transfer_testsnap estimated size is 9,50K
full send of zroot/usr/home@20160502_2053_transfer_testsnap estimated size is 48K
full send of zroot/usr/src@20160502_2053_transfer_testsnap estimated size is 1,86G
full send of zroot/usr/ports@20160502_2053_transfer_testsnap estimated size is 465M
total estimated size is 3,43G
TIME  SENT  SNAPSHOT
TIME  SENT  SNAPSHOT
Password for root@testsystem:21:19:41  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap
21:19:42  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap
21:19:43  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap
21:19:44  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap

cannot receive: invalid name
TIME  SENT  SNAPSHOT
warning: cannot send 'zroot/ROOT/default@20160502_2053_transfer_testsnap': signal received

Das Passwort habe ich sofort eingegeben sobald die Aufforderung kam, trotzdem waren die 4 Transferinfos zu sehen.

Gruß Mardor
 
Hallo,

so nachdem ich nun auch "root" gegen "zroot" ausgetauscht habe (ich hätte wohl nicht so spät anfangen sollen) bekomme ich eine andere Fehlermeldung.
Hätte jemand eine Idee hierzu ?


Code:
full send of zroot/usr/ports@20160502_2053_transfer_testsnap estimated size is 465M
total estimated size is 3,43G
TIME  SENT  SNAPSHOT
TIME  SENT  SNAPSHOT
Password for root@testsystem:08:11:50  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap
08:11:51  50,6K  zroot/ROOT@20160502_2053_transfer_testsnap

TIME  SENT  SNAPSHOT
cannot unmount '/var/log': Device busy
warning: cannot send 'zroot/ROOT/default@20160502_2053_transfer_testsnap': signal received

Muss ich das vorhandene /var/log irgendwie aushängen bevor es überschrieben werden kann.

Gruß Mardor
 
auf dem Zielsystem kann /var/log nicht ausgehangen werden, das muss aber sein um das Dataset zu ersetzen. Am einfachsten wird es sein, du macht die ganze Aktion von einem Live System aus.
 
Hallo derOliver,

wenn ich das Livesystem boote und dann zroot mounte muss dann die "zfs struktur" vorhanden sein oder wird die Struktur dann beim übertragen erstellt.

Gruß Mardor
 
wenn du rekursiv sendest, dann wir die Struktur 1:1 auf dem Ziel so wieder erstellt. Kann sein, dass du beim Empfangen auch ein rekursiv Flag brauchst, da bin ich mir gerade nicht sicher - steht aber in der man-page.
 
/var/log
/var/run
/var/tmp
lege ich eh am liebsten als tmpfs an und dann würde es die beschriebenen Probleme mit /var/log auch nicht geben. Allerdings spreche ich dabei ausdrücklich nicht von Servern, wo das Logging ja sehr wichtig ist und vielleicht auch nach einem Ausschalten des Systems nochmal nachgesehen werden soll. Für mich und auf Desktops ist tmpfs auch für /var/log eine gute Wahl.
Vielleicht deshalb auch temporär für das Klonen des Systems in der oben angestrebten Weise. Naja, Live-System ist vielleicht einfacher. Aber, wenn ich recht entsinne, konnte ich im laufenden System /var/log unmounten und als mountpoint neu anlegen und als tmpfs neu mounten. Anschließend das Dataset vernichten.
 
Auch auf nem Desktop ist /var/log ziemlich wichtig.

natürlich. Aber auf einem System, das fertig konfiguriert ist und fehlerfrei läuft, wo dann auch für gewöhnlich immer nur ein einziger Nutzer angemeldet ist, da bin ich durchaus großzügig und logge kaum etwas. Was dann aufläuft, sind ja nur wenige Standard-Dateien und die brauchen nicht zu viel Platz, weshalb ich die dann bei einem Desktop-PC sehr gerne in den RAM lege.
Das hat auch damit zu tun, dass meine HW alt ist und meine Festplatten nicht so schnell. Wenn die sich während des Betriebs möglichst ruhig verhalten, macht mich das glücklich. So etwas dürfte kaum ein Grund für andere Anwender sein.

Nur, weil ich das gerne so mache, erinnere ich mich so düster, dass ich das bei meiner letzten Installation im laufenden Betrieb gemacht habe. Und deshalb dachte ich, diese Information könnte hier vielleicht ein Provisorium inspirieren, nur gerade eben dafür, den ZFS umzuziehen.
 
Hallo,

ich habe jetzt über das Rescue System von Hetzner ein FreeBSD gebootet. Allerdings weis ich nicht wie ich nun die Daten auf den neuen VServer rüberbekomme.
Es hängt bereits daran das ich nicht weis wie ich denn vom rescue system die VM HDD mounte, da ich den Namen nicht kenne.

Hat jemand hier Erfahrungen und könnte mir hier einen Tipp geben ?

Gruß Mardor
 
Sollte /dev/vtbd0 sein :-)

Code:
[root@rescue /]# mount /dev/vtbd0 /mnt
mount: /dev/vtbd0: No such file or directory

Leider ist es kein vtbd0.

Ich habe einfach mal hier die verfügbaren Dev anzeigen lassen:

Code:
[root@rescue /]# mount /dev/
acpi        bpsm0       cuau0.lock  devstat     io          log         pass0       sndstat     ttyu0.lock  ttyv6       ttyvd       usb/
apm         cd0         da0         fd/         kbd0        md0         pass1       stderr      ttyv0       ttyv7       ttyve       usbctl
apmctl      console     da0p1       fido        kbd1        mdctl       pci         stdin       ttyv1       ttyv8       ttyvf       xpt0
atkbd0      consolectl  da0p2       geom.ctl    kbdmux0     mem         psm0        stdout      ttyv2       ttyv9       ufssuspend  zero
audit       ctty        da0p3       gpt/        klog        midistat    pts/        sysmouse    ttyv3       ttyva       ugen0.1
bpf         cuau0       devctl      gptid/      kmem        nfslock     random      ttyu0       ttyv4       ttyvb       ugen0.2
bpf0        cuau0.init  devctl2     hpet0       led/        null        reroot/     ttyu0.init  ttyv5       ttyvc       urandom

Ich wäre von da0 ausgegangen aber da bekomme ich folgende Meldung:
Code:
[root@rescue /]# mount /dev/da0 /mnt
mount: /dev/da0: Invalid argument

Gruß Mardor
 
Hm, die scheinen kein virtio mehr zu machen. Na auch recht, dann wird es da0 sein. Wie du das partitioniert hast, musst du selbst wissen.
 
Hallo derOliver,

wenn es da0 wäre sollte ich dann nicht da0 mounten dürfen und keine Fehlermeldung wie die beschriebe erhalten ?
Auch das mounten von da0p1 funktioniert nicht (gleiche Meldung).

Ich habe das System gleich in der Rettungskonsole gestartet und noch nicht zuvor partitioniert, somit sollte dies noch default sein.

Gruß Mardor
 
Es sind jedenfalls vier Partitionen da. Schau doch mal gpart nach was da der Fall ist. Mal davon abgesehen musst du eh partitionieren, sollte die Platte komplett leer sein. Nachdem du hier auch erstmal nix kaputt machen kannst, empfehle ich dir einfach mal drauf los zu probieren.
 
da0 ist die Platte, p1 wäre bei einer Standardinstallation "boot", p2 "/" und p3 "swap". Heißt wenn dann müsstest du da0p2 mounten
 
Eigentlich sollte es laut gpart /dev/da0p3 sein.
Aber da erhalte ich immer noch "invalid argument".

Code:
[root@rescue ~]# gpart show
=>      34  49999805  da0  GPT  (24G)
        34         6       - free -  (3.0K)
        40      1024    1  freebsd-boot  (512K)
      1064       984       - free -  (492K)
      2048   4194304    2  freebsd-swap  (2.0G)
   4196352  45801472    3  freebsd-zfs  (22G)
  49997824      2015       - free -  (1.0M)

[root@rescue ~]# mount /dev/da0p3 /mnt/
mount: /dev/da0p3: Invalid argument
 
Ok, vielen Dank erstmal für den Tipp.

Code:
[root@rescue ~]# mount /dev/da0p3 /mnt/
mount: /dev/da0p3: Invalid argument

[root@rescue ~]# zpool import
   pool: zroot
     id: 238320218342298338
  state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

    zroot       ONLINE
      da0p3     ONLINE
[root@rescue ~]# zpool import
   pool: zroot
     id: 1618320218349198138
  state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:

    zroot       ONLINE
      da0p3     ONLINE

zpool import -o altroot=/mnt/ zroot

[root@rescue /]# cd /mnt/
[root@rescue /mnt]# ls
.cshrc        boot        libexec        root        var
.profile    dev        media        sbin        zroot
.rnd        entropy        mnt        sys
COPYRIGHT    etc        proc        tmp
bin        lib        rescue        usr

Allerdings kann ich immer noch keine Snapshots übertragen:

Code:
zfs send -Rv zroot@20160516_1905_before_transfer | ssh root@aa.bb.cc.dd zfs receive -Fv mnt/
...
Password for root@rescue:
full send of zroot@20160502_2053_transfer_testsnap estimated size is 9,50K
send from @20160502_2053_transfer_testsnap to zroot@20160509_1004_before_system_update
send from @20160509_1004_before_system_update to zroot@20160509_1111_transfer_snap
send from @20160509_1111_transfer_snap to zroot@20160516_1905_before_transfer
full send of zroot/ROOT@20160502_2053_transfer_testsnap estimated size is 9,50K
...
total estimated size is 3,94G
TIME        SENT   SNAPSHOT
cannot receive: invalid name
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot@20160509_1004_before_system_update': Broken pipe
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot@20160509_1111_transfer_snap': Broken pipe
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot@20160516_1905_before_transfer': Broken pipe

Ich muss doch als Ziel das gemountete zfs (also /mnt) angeben oder ?
 
Nein, du musst das Dataset angeben, analog wie du eben das Quelldataset angibst. ZFS ist eben auch ein Volume Manager und das sollte man im Hinterkopf behalten.
 
Aber auch die Angabe von zroot oder zroot/ am Ende bringt mir keinen Erfolg:

Code:
zfs send -Rv zroot@20160516_1905_before_transfer | ssh root@aa.bb.cc.dd zfs receive -Fv zroot
Password for root@rescue:
full send of zroot@20160502_2053_transfer_testsnap estimated size is 9,50K
send from @20160502_2053_transfer_testsnap to zroot@20160509_1004_before_system_update
send from @20160509_1004_before_system_update to zroot@20160509_1111_transfer_snap
send from @20160509_1111_transfer_snap to zroot@20160516_1905_before_transfer
full send of zroot/ROOT@20160502_2053_transfer_testsnap estimated size is 9,50K
send from @20160502_2053_transfer_testsnap to zroot/ROOT@20160509_1004_before_system_update
send from @20160509_1004_before_system_update to zroot/ROOT@20160509_1111_transfer_snap
...
send from @20160509_1004_before_system_update to zroot/usr/ports@20160509_1111_transfer_snap estimated size is 2K
send from @20160509_1111_transfer_snap to zroot/usr/ports@20160516_1905_before_transfer estimated size is 66,7M
total estimated size is 3,94G
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
TIME        SENT   SNAPSHOT
receiving full stream of zroot@20160502_2053_transfer_testsnap into zroot@20160502_2053_transfer_testsnap
received 41.7KB stream in 1 seconds (41.7KB/sec)
receiving incremental stream of zroot@20160509_1004_before_system_update into zroot@20160509_1004_before_system_update
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of zroot@20160509_1111_transfer_snap into zroot@20160509_1111_transfer_snap
received 312B stream in 1 seconds (312B/sec)
receiving incremental stream of zroot@20160516_1905_before_transfer into zroot@20160516_1905_before_transfer
cannot unmount '/mnt': Device busy
received 312B stream in 1 seconds (312B/sec)
warning: cannot send 'zroot/ROOT/default@20160502_2053_transfer_testsnap': signal received
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot/ROOT/default@20160509_1004_before_system_update': Broken pipe
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot/ROOT/default@20160509_1111_transfer_snap': Broken pipe
TIME        SENT   SNAPSHOT
warning: cannot send 'zroot/ROOT/default@20160516_1905_before_transfer': Broken pipe
 
Hallo derOliver,

also eine positive Sache habe ich nach dem ausführen von zfs unmount.

Snapshots wurden übertragen. Allerdings wurde nicht nur der angegebene Snapshot übertragen sondern alle Snapshots von allen vorhandenen Datasets.
Eigentlich sollte aber nur ein Snapshot von jedem Dataset übertragen werden.

Kann ich dies einstellen oder jeden einzelnen Dataset einzugeben ?

Eine weitere Frage wäre ob ich jetzt einfach mit zfs import die übertragenen Snapshots mounten kann ?

Gruß Mardor
 
Zurück
Oben