3

I am trying to copy an entire filesystem between 2 machines.
Based on documentation -R on zfs send should
"Generate a replication stream package, which will replicate the specified file system, and all descendent file systems, up to the named snapshot."
but instead I am getting error Error: Unsupported flag with filesystem or bookmark.

Here is my use case (I already have zfs/logs filesystem):

zfs create zfs/logs/project-1
zfs create zfs/logs/project-1/branch-1
zfs create zfs/logs/project-1/branch-2
dd if=/dev/urandom of=/zfs/logs/project-1/branch-1/test1.bin bs=16M count=16
dd if=/dev/zero of=/zfs/logs/project-1/branch-1/test2.bin bs=16M count=16
zfs snapshot zfs/logs/project-1/branch-1@test
zfs clone zfs/logs/project-1/branch-1@test zfs/logs/project-1/branch-3
zfs clone zfs/logs/project-1/branch-1@test zfs/logs/project-1/branch-4

This creates following filesystem:

# zfs list
NAME                            USED  AVAIL     REFER  MOUNTPOINT
zfs                            1.00G   673G      104K  /zfs
zfs/logs                       1.00G   673G      144K  /zfs/logs
zfs/logs/project-1              256M   673G      112K  /zfs/logs/project-1
zfs/logs/project-1/branch-1     256M   673G      256M  /zfs/logs/project-1/branch-1
zfs/logs/project-1/branch-2      96K   673G       96K  /zfs/logs/project-1/branch-2
zfs/logs/project-1/branch-3       0B   673G      256M  /zfs/logs/project-1/branch-3
zfs/logs/project-1/branch-4       0B   673G      256M  /zfs/logs/project-1/branch-4

Now I tried to copy it to another one (on local machine for tests, but I will be doing it over ssh later on)

# zfs unmount zfs/logs/project-1
# zfs send -R zfs/logs/project-1 | zfs recv zfs/logs/project-3
Error: Unsupported flag with filesystem or bookmark.
cannot receive: failed to read from stream

What I expected:
I expected a new filesystem to be created with its data to be deduplicated (branch-3 and branch-4 still use no disk space since they are clones of branch-1)

# zfs list
NAME                            USED  AVAIL     REFER  MOUNTPOINT
zfs                            1.00G   673G      104K  /zfs
zfs/logs                       1.00G   673G      144K  /zfs/logs
zfs/logs/project-1              256M   673G      112K  /zfs/logs/project-1
zfs/logs/project-1/branch-1     256M   673G      256M  /zfs/logs/project-1/branch-1
zfs/logs/project-1/branch-2      96K   673G       96K  /zfs/logs/project-1/branch-2
zfs/logs/project-1/branch-3       0B   673G      256M  /zfs/logs/project-1/branch-3
zfs/logs/project-1/branch-4       0B   673G      256M  /zfs/logs/project-1/branch-4
zfs/logs/project-3              256M   673G      112K  /zfs/logs/project-3
zfs/logs/project-3/branch-1     256M   673G      256M  /zfs/logs/project-3/branch-1
zfs/logs/project-3/branch-2      96K   673G       96K  /zfs/logs/project-3/branch-2
zfs/logs/project-3/branch-3       0B   673G      256M  /zfs/logs/project-3/branch-3
zfs/logs/project-3/branch-4       0B   673G      256M  /zfs/logs/project-3/branch-4

What am I doing wrong?

HubertNNN
  • 413

1 Answers1

0

Try zfs send -R zfs/logs/project-1@snapshot .

because you cannot recursively send a "filesystem"[0], you must send an object that supports the feature you want, like a snapshot[1].

[0]: zfs list -t filesystem zfs

[1]: zfs list -t snapshot zfs

also see:

zfs list -t all zfs