PSA: Silent data corruption when receiving large blocks commit 9ef375156a024e8b3b1eafaa5108f9db4a777097 Author: Fabian Keil Date: Wed Sep 13 04:31:10 2017 +0200 ZFS (XXX): Add vfs.zfs.risk_data_corruption sysctl ... and don't split large blocks while sending unless the sysctl is set. Splitting large blocks can lead to silent data corruption when receiving incremental streams with a block size change on the receiving side. Example corruption: [fk@test-vm ~]$ hd /usr/test/src/sbin/camcontrol/camcontrol.c 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 0003ea10 [fk@test-vm ~]$ sudo zdb -ddddddd -bbbbbbb rpool/test/src $(stat -f '%i' /usr/test/src/sbin/camcontrol/camcontrol.c) Dataset rpool/test/src [ZPL], ID 550, cr_txg 67575, 704M, 78457 objects, rootbp DVA[0]=<0:254bfb000:1000> DVA[1]=<0:3803b7000:1000> [L0 DMU objset] sha256 uncompressed LE contiguous unique double size=800L/800P birth=67755L/67755P fill=78457 cksum=fb0fd08b71ffb3f8:e14c2e477498cdc4:4822440c7db2cccc:9fa4961bce0031b6 Object lvl iblk dblk dsize lsize %full type 100844 2 128K 251K 0 251K 0.00 ZFS plain file (K=inherit) (Z=inherit) 168 bonus System attributes dnode flags: USED_BYTES USERUSED_ACCOUNTED dnode maxblkid: 0 path /sbin/camcontrol/camcontrol.c uid 1001 gid 1001 atime Sat Jul 8 18:41:59 2017 [...]