How to "zfs receive" full pool stream without overwriting existing filesystems?

From: Lev Serebryakov <lev_at_FreeBSD.org>
Date: Fri, 20 Jan 2023 09:38:24 UTC
   I have full ZFS pool backup created with "zfs send -RL zpool@full-backup".

   Now I need to extract several files from this backup ON SAME SYSTEM IT WAS CREATED. I'm trying to "unpack" it with:

1. # ... | zfs recv -v -n -d zroot/backuprestore
    cannot receive: specified fs (zroot/backuprestore) does not exist
2. # zfs create zroot/backuprestore
3. # ... | zfs recv -v -n -d zroot/backuprestore
    cannot receive new filesystem stream: destination 'zroot/backuprestore' exists
    must specify -F to overwrite it
4. # ... | zfs recv -v -n -d -F zroot/backuprestore
    would receive full stream of zroot@full-backup into zroot/backuprestore@full-backup
    would receive full stream of zroot/usr@full-backup into zroot/backuprestore/usr@full-backup
    cannot receive new filesystem stream: destination has snapshots (eg. zroot/usr/ports@backup-20230116)
    must destroy them to overwrite it


  So, (1) asked for existing target filesystem. (3) asked for "force" to overwrite existing filesystem required by (1).

  But anyway, it trys to overwrite existing filesystems (zroot/usr/ports) instead of creating new one (zroot/backuprestore/usr/ports), what happens?! Why does it properly "unpack" `/usr` but not `/usr/ports`?!

  What should I do to receive this backup at "new root" on this host?

-- 
// Lev Serebryakov