aboutsummaryrefslogtreecommitdiff
path: root/custom/zfsrollback
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-01-19 09:49:38 -0600
committerCraig Jennings <c@cjennings.net>2026-01-19 09:49:38 -0600
commitdba73f8f9749b0efd78c1d406ac20e58930a8021 (patch)
tree593be41c69a6b918a796340eaaf4773bf86fb69c /custom/zfsrollback
parent82e7005aa2c7b528c980427674421011e5f768d4 (diff)
downloadarchangel-dba73f8f9749b0efd78c1d406ac20e58930a8021.tar.gz
archangel-dba73f8f9749b0efd78c1d406ac20e58930a8021.zip
Fix zfsrollback to process children before parents
Sort datasets by path depth (deepest first) before rolling back. ZFS requires children to be rolled back before their parents, otherwise rollback can fail or skip datasets.
Diffstat (limited to 'custom/zfsrollback')
-rwxr-xr-xcustom/zfsrollback5
1 files changed, 3 insertions, 2 deletions
diff --git a/custom/zfsrollback b/custom/zfsrollback
index b68e11a..ee858f6 100755
--- a/custom/zfsrollback
+++ b/custom/zfsrollback
@@ -95,8 +95,9 @@ else
exit 0
fi
- # Find all datasets with this snapshot
- mapfile -t targets < <(echo "$snapshots" | grep "@${snap_name}$")
+ # Find all datasets with this snapshot, sorted by depth (deepest first)
+ # This ensures children are rolled back before parents
+ mapfile -t targets < <(echo "$snapshots" | grep "@${snap_name}$" | awk -F'@' '{print length($1), $0}' | sort -rn | cut -d' ' -f2-)
if [ ${#targets[@]} -eq 0 ]; then
echo "Error: No datasets found with snapshot @${snap_name}"