Is it safe to send ZFS snapshots incrementally, ignoring some intermediate snapshots?

I am using ZREP to replicate two servers together and each server contains a ZFS group that contains two data sets as a replication master and two sets as the replication destination. The master sets contain the system and VirtualBox-VMs of the local server, the replication points to them from the other.

Also, I'm backing up all the master sets per server on some NAS using rsync. The NAS is quite slow and the backup takes hours to be successful, so the implemented approach is to suspend the virtual machines, create a snapshot, restore the virtual machines and let rsync Run from the created snapshot. The important thing is that the manually created snapshot did not follow the naming convention of ZREP and was destroyed right afterwards. rsync finished again At the beginning, ZREP continued to operate simultaneously, initiated by cron.

But from time to time it happened that ZREP entered a state that could no longer be synchronized. To solve that problem, a co-worker told me that I needed to delete snapshots and follow the process to initialize ZREP again. That problem was solved by not allowing ZREP to run in parallel with rsync And our own snapshot more at the end.

Unfortunately, I'm missing the specific details of that error and the co-worker is no longer available, but according to his description, there seemed to be a problem with the search for common snapshot ancestors between the replication master and the destination to synchronize incremental I think the error messages were like the following:

can not receive incremental transmission: the latest zfs-pool / vbox / tori snapshot does not match the incremental source
I can not open & # 39; zfs-pool / vbox / tori @ zrep_0001b7 & # 39 ;: the data set does not exist

From my understanding of the documents and other questions, to successfully send snapshots incrementally, the sending master and the receiving destination must share that snapshot that is used as argument 1 for zfs send and those snapshots must also be the current ones in the receiving destination.

The second argument is a newer arbitrary snapshot, used by ZFS to calculate the differences between the target and the target of a snapshot and send those differences to the destination of the replication. Because both share the same snapshot specified as argument 1, the differences make sense for the goal and can simply be applied as they are.

The arguments -I against -I In my opinion, it can lead to a logical snapshot receiving a shipment that contains all the incremental data calculated from the master side OR that sends all the intermediate snapshots containing its incremental changes. For example -I leads to A new snapshot in the goal always vs. -I It could lead to additional Ns.

Creating and destroying intermediate snapshots between what is provided as arg 1 and 2 for zfs send -i There should not be any problem, because ZFS always calculates the differences only between the two arguments provided and does not care about any other intermediate snapshot. In the case of ZREP, that means in theory that as long as it does not interfere with the snapshots managed by ZREP, it should not make any difference if additional snapshots are created during its operation or not. Simply because special ZREP snapshots are always available, managed by ZREP and used to calculate differences for replication. So in theory, in addition to creating snapshots for rsync and the backup should not be a problem at all.

Are these assumptions correct?

Is it generally safe to send ZFS snapshots incrementally, ignoring some of the intermediate ones? Or is it necessary to send ALL intermediate snapshots ever created to the replication destination so that they do not synchronize or not? How do things depend on -I against -I?