Changing recordsize on existing ZFS dataset

You need to copy the data off and back onto the filesystem if you want to take advantage of the new record size.

I'm not sure what your question is, though.


Late reply, I know, but here are a couple of pointers:

  1. zfs receive has a -o recordsize option which lets you override the value on the receiving end.

  2. IMHO syncing ZFS datasets are most easily achieved with syncoid's help (which is part of the Sanoid suite). For example, the following reasonably simple command line would replicate the given dataset from existing Zpools apool to bpool whilst forcing the desired recordsize to 64k on the receiving end:

    syncoid --recursive --recvoptions="o recordsize=64k" apool/DATASET bpool/DATASET
    

syncoid is a wrapper around zfs send/receive, which operates off snapshots that it manages itself; so you can use it while your system is running and also send incrementals. --recvoptions are passed through to zfs receive. This option is only documented in syncoid's manpage, not on the Github page, but it works exactly as expected.