Zfs Deleting
Deleting a filesystem in ZFS looks immediate,
but internally, the filesystem is hidden immediately, but its data is freed asynchronously
by a background thread which can take a while. You can see the amount of space waiting
to be freed by running the command zpool get freeing <pool>.
So this whole design of using ZFS to delete stuff faster might not actually be doing that much for you.
If you want to get this behavior without the txg (transaction group) overhead, you could just create a queue inside your
application with a background thread that will delete directories that are no longer in use.
However, if you didn’t back up and got the pool corrupted somehow, there are several ways you can try to access the data on your datasets.
First you can try and import the pool in read-only mode. If that doesn’t work, you can try and find an older but still recent txg and try to import using that checkpoint. You will not have the latest file modifications but you will be able to recover some of your data.
In order to see older txg issue, use:
zdb -e <pool_name> -ul
and choose a txg from the most recent uberblocks.
The pool can then be imported with the -T parameter followed by the txg number.