Сейчас у меня как-то так:
0. В цикле выбираю датасеты
1. Вычисляю имя последнего снапшота для датасета
2. Делаю новый снапшот
zfs snapshot -r work/datasetname@nowdate
3. Если я ещё не реплицировал, то реплицирую
zfs send -vR work/datasetname@nowdate | zfs receive -vFu -e storage
4. Если реплицировал ранее, то вычисляю какой там снапшот был последним replica_last_date и
zfs send -Rv -i "@replica_last_date" "work/datasetname@nowdate" | zfs receive -vFu -e storage
5. Вычисляю все старые снапшоты в исходном пуле и чищу их
zfs destroy -vpr work/datasetname@expiredate
Но может всё-таки букмарки как-то сюда?...