[Bug 254530] ZFS (base) receive fails to receive dataset if dataset already exist

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Mar 24 21:38:56 UTC 2021


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254530

            Bug ID: 254530
           Summary: ZFS (base) receive fails to receive dataset if dataset
                    already exist
           Product: Base System
           Version: 12.2-RELEASE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: bugs at FreeBSD.org
          Reporter: patrik at hildingsson.se

This error was found while using zxfer(8) to send a zvol dataset from one
dataset to another dataset on the same pool. The dataset did not exist on the
destination prior to running zxfer.

Running the below chunk replicates the issue, at least on 12.2-RELEASE-p4
zfs create zroot/test
zfs create -o volmode=dev -V 50M zroot/test/disk0
dd if=/dev/random of=/dev/zvol/zroot/test/disk0
zfs snapshot zroot/test/disk0 at test-now_ok
dd if=/dev/random of=/dev/zvol/zroot/test/disk0
zfs snapshot zroot/test/disk0 at test-now_ok-2
dd if=/dev/random of=/dev/zvol/zroot/test/disk0
zfs create -V 52428800 -o 'reservation=none' -o 'volblocksize=8192' -o
'checksum=on' -o 'compression=lz4' -o 'readonly=off' -o 'copies=1' -o
'logbias=throughput' -o 'dedup=off' -o 'sync=standard' -o 'volmode=dev' -o
'snapshot_limit=none' -o 'redundant_metadata=most' zroot/test/disk1
zfs send zroot/test/disk0 at test-now_ok | zfs receive -F zroot/test/disk1


At your convenience I have copy/pasted the above commands and the resulting
error:
# zfs create zroot/test
# zfs create -o volmode=dev -V 50M zroot/test/disk0
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 0.552508 secs (94892325 bytes/sec)
# zfs snapshot zroot/test/disk0 at test-now_ok
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 0.507651 secs (103277323 bytes/sec)
# zfs snapshot zroot/test/disk0 at test-now_ok-2
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 0.515789 secs (101647735 bytes/sec)
# zfs create -V 52428800 -o 'reservation=none' -o 'volblocksize=8192' -o
'checksum=on' -o 'compression=lz4' -o 'readonly=off' -o 'copies=1' -o
'logbias=throughput' -o 'dedup=off' -o 'sync=standard' -o 'volmode=dev' -o
'snapshot_limit=none' -o 'redundant_metadata=most' zroot/test/disk1
root at lrrr:~ # zfs send zroot/test/disk0 at test-now_ok | zfs receive -F
zroot/test/disk1
cannot open 'zroot/test/disk1/': trailing slash in name
warning: cannot send 'zroot/test/disk0 at test-now_ok': signal received


# zfs send zroot/test/disk0 at test-now_ok | zstreamdump
BEGIN record
        hdrtype = 1
        features = 0
        magic = 2f5bacbac
        creation_time = 605ba746
        type = 3
        flags = 0x4
        toguid = f1d16456c4cc9f82
        fromguid = 0
        toname = zroot/test/disk0 at test-now_ok
END checksum =
64c114cf9127fc/5e00770266493cb3/7fb09ad1733d83d9/9fc28d91b9886732
SUMMARY:
        Total DRR_BEGIN records = 1
        Total DRR_END records = 1
        Total DRR_OBJECT records = 2
        Total DRR_FREEOBJECTS records = 4
        Total DRR_WRITE records = 6401
        Total DRR_WRITE_BYREF records = 0
        Total DRR_WRITE_EMBEDDED records = 0
        Total DRR_FREE records = 4
        Total DRR_SPILL records = 0
        Total records = 6413
        Total write size = 52429312 (0x3200200)
        Total stream length = 54430168 (0x33e89d8)

However the error never appears if zfs receive is run without in advance
creating the dataset on the destination, as can be seen below:

# zfs create zroot/test
# zfs create -o volmode=dev -V 50M zroot/test/disk0
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 1.084470 secs (48345071 bytes/sec)
# zfs snapshot zroot/test/disk0 at test-now_ok
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 0.627445 secs (83559234 bytes/sec)
# zfs snapshot zroot/test/disk0 at test-now_ok-2
# dd if=/dev/random of=/dev/zvol/zroot/test/disk0
dd: /dev/zvol/zroot/test/disk0: end of device
102401+0 records in
102400+0 records out
52428800 bytes transferred in 0.512001 secs (102399789 bytes/sec)
# zfs send zroot/test/disk0 at test-now_ok | zfs receive -F zroot/test/disk1
# echo $?
0

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list