Anyone have experience with healing option of zfs send/receive

The “corrective receive” isn’t very clear in the documentation (which can be said about many things related to ZFS).

I’m not even sure if invoking -c on the receiver’s side will prevent it from “rolling back” to the specified snapshot.

For example, if you force the destination to receive a replication stream (even incremental), it will destroy all newer snapshots. Will this be irrelevant if you invoke -c? Will it, in a sense, “insert” the stream of blocks, without affecting newer snapshots on the destination?

Who knows. They developers are vague, which is no surprise.

Super helpful, huh?


EDIT: You also have to love this part:

As if we keep a ledger of what files/blocks specifically exist between which snapshots. :joy: [1]

When the feature was first teased (before Open ZFS 2.2.0 was released), I thought it would be truly fleshed-out. I was under the assumption that it would know which blocks are corrupted, and only send the correct versions of those blocks from a known good source. (Sort of like how a device in a mirror vdev does that within the pool itself.)

But nope, they just started with a good idea and forgot to actually follow through with a practical usage.


  1. Remember, it’s not good enough to know that a block exists in a snapshot. You need to know between which snapshots it was first created. Otherwise, you’ll have to send a full replication stream, instead of a small, incremental one. ↩︎