Here’s my setup:
Home:
- rpool - SSD mirror
- tank - HDD RAIDZ2
Remote:
- rpool - HDD RAIDZ2
On both servers, I run Sanoid in cron, which I think is irrelevant to this conversation, but I thought I should mention it anyway.
On my Home server, I run Syncoid to do the following:
- Backup rpool → tank (locally)
- Backup tank → Remote (partial)
- Backup rpool → Remote
- Backup Remote’s rpool → Home tank (excluding the backup datasets)
As stated above, I use my home server as the main orchestration for all of this, to keep it simple.
The problem I have is that if a backup fails or is interrupted, old syncoid snapshots live forever (I don’t use --no-sync-snap
):
At Home:
~> zfs list -t snap | grep syncoid | wc -l
4839
At Remote:
~> zfs list -t snap | grep syncoid | wc -l
4801
A sampling of these defunct snapshots:
...
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-23:04:53:40-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-24:05:36:16-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-25:04:25:37-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-26:05:02:49-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-27:06:34:29-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-28:18:50:42-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-29:08:00:38-GMT-05:00 0B - 6.81G -
tank/backup/zfs/local/rpool/images@syncoid_rpool-to-sc_cleteServer_2024-12-30:05:49:32-GMT-05:00 0B - 6.81G -
...
I am afraid if I just delete all the Syncoid snapshots, that I will break replication. Is there any easy command to clean up only the unused ones?