diff options
| author | Craig Jennings <c@cjennings.net> | 2026-01-19 09:49:38 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-01-19 09:49:38 -0600 |
| commit | dba73f8f9749b0efd78c1d406ac20e58930a8021 (patch) | |
| tree | 593be41c69a6b918a796340eaaf4773bf86fb69c /custom/zfsrollback | |
| parent | 82e7005aa2c7b528c980427674421011e5f768d4 (diff) | |
| download | archangel-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-x | custom/zfsrollback | 5 |
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}" |
