complete clone/restore from a ZFS-based system replication stream

Victor Sudakov vas at mpeks.tomsk.su
Tue Sep 27 08:53:29 UTC 2016


Mike Tancsa wrote:
> > 
> > I have a complete dump of a working system created by 
> > 'zfs send -Rv zroot at test1 > test1.zfs '. I think it's called a
> > replication stream package. I also have a new hard drive.  Then I
> > create the freebsd-boot, freebsd-swap and freebsd-zfs partitions on
> > the new drive, install the bootloader on it.
> > 
> > Now what command exactly do I use to restore the system from
> > test1.zfs? I have tried "zfs receive" with different combinations of
> > options but each time I and with some error message like "destination
> > exists..."
> > 
> > Please refer me to a good howto on restoring a system from a
> > replication stream package.
> 
> Here are the steps I used to restore a "level zero" zfs file onto a
> new/fresh mirror.

[dd]

> 
> #make sure /mnt2 exists
> zpool create -f -o altroot=/mnt2 -O canmount=off -m none zroot mirror
> /dev/ada0p3 /dev/ada1p3
> 
> gzcat /mnt/zroot-.0.gz  | zfs recv -vF zroot

Mike, that's very useful information, thank you very much. However, there are
a couple of questions left. 

1. When you boot from this pool later on a restored system, don't the
"-o altroot=/mnt2 -O canmount=off" options prevent it from
working normally? I gather that "altroot" is not persistent across
reboots, but "canmount" probably is.

2. If you wanted to check "zfs recv" without actually restoring it,
what what you do? I keep getting the "cannot receive incremental stream" error:

# zpool create -f -o altroot=/mnt2 -O canmount=off -m none foobar1 /dev/vtbd2
# zfs receive -vFn foobar1  < /mnt/test1.zfs
would receive full stream of zroot at test1 into foobar1 at test1
would receive full stream of zroot/var at test1 into foobar1/var at test1
would receive full stream of zroot/var/mail at test1 into foobar1/var/mail at test1
would receive full stream of zroot/var/crash at test1 into foobar1/var/crash at test1
would receive full stream of zroot/var/tmp at test1 into foobar1/var/tmp at test1
would receive full stream of zroot/var/audit at test1 into foobar1/var/audit at test1
would receive full stream of zroot/var/log at test1 into foobar1/var/log at test1
would receive full stream of zroot/tmp at test1 into foobar1/tmp at test1
would receive full stream of zroot/ROOT at test1 into foobar1/ROOT at test1
would receive full stream of zroot/ROOT/test1 at 2016-08-22-21:58:22 into foobar1/ROOT/test1 at 2016-08-22-21:58:22
cannot receive incremental stream: destination 'foobar1/ROOT/test1' does not exist
#

> 
> #import it, but its probably already there so dont worry about the error
> zpool import -f -o altroot=/mnt2  zroot
> zpool set bootfs=zroot/ROOT/default zroot
> 
> ... You should now be able to boot off the restored mirror.

-- 
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
sip:sudakov at sibptus.tomsk.ru


More information about the freebsd-questions mailing list