Você não pode fazer exatamente o que deseja.
Sempre que você criar um fluxo zfs send
, esse fluxo será criado como o delta entre dois instantâneos. (Essa é a única maneira de fazer isso, pois o ZFS está atualmente implementado.) Para aplicar esse fluxo a um conjunto de dados diferente, o conjunto de dados de destino deve conter o instantâneo inicial do fluxo; se isso não acontecer, não há ponto de referência comum para os dois. Quando você destrói a captura instantânea @ snap0 no conjunto de dados de origem, cria uma situação que é impossível para o ZFS reconciliar.
A maneira de fazer o que você está pedindo é manter um instantâneo em comum entre os dois conjuntos de dados o tempo todo e usar esse instantâneo comum como ponto de partida para o próximo fluxo de envio.
Assim, você pode na etapa 1 criar um snapshot @ backup0 e, em algum momento, criar um snapshot @ backup1 para a atualização do backup off-site. Você então transfere o fluxo que é o delta entre @ backup0 e @ backup1 (que incluirá todos os instantâneos intermediários), então delete @ backup0 mas mantém @ backup1 (que se torna o novo denominador comum). Na próxima vez que atualizar o backup, você poderá criar @ backup2 (em vez de @ backup1) e transferir o delta entre @ backup1 e @ backup2 (em vez de @ backup0 e @ backup1) seguido pela exclusão @ backup1 (em vez de @ backup0) e assim por diante.