All notable changes to add_subvolumes are documented in this file.
The project follows Semantic Versioning.
- Busy paths now try systemd blocker discovery from open process IDs first, then applicable known activator rules, before falling back to active-data consent or
SKIP / Reboot and retry. Dry-run reports a discovered mitigation; execution rechecks, temporarily stops and restores services, and verifies that the path is quiet. - Post-commit cleanup now reports a busy old backup as retained for manual review without contradictory recovery or no-reboot instructions. Pre-commit activity still requires recovery.
- Repeated the initial migration and later
/var/lib/bootprepadoption on Debian, Kubuntu, TUXEDO OS, Manjaro, CachyOS, and EndeavourOS; all six systems passed.
- Added explicit
--dryrunand--executemodes, with--acceptfor exact paths configured to permit an active-data risk decision. - Added restricted parsing for root, home, and JSON activity-policy configuration without sourcing configuration as shell code.
- Added exact-path policies for accepted active-data risk, managed services and activators, and ignored runtime sockets.
- Added recoverable transaction state, original-
fstabpreservation, and interrupted-run protection. - Added support for stable root discovery from a nested snapshot, nonstandard root-subvolume names, and a separate Btrfs home filesystem.
- Added package discovery guidance for missing tools on Debian- and Arch-based systems.
- Added automated coverage for migration, policies, activity handling, mount options, tool discovery, recovery, and runtime files.
- Rebuilt the migration engine in embedded Python while retaining a self-contained Bash launcher.
- Preserved exact target-path Btrfs mounts and existing administrator mount-option choices.
- Added atomic
fstabstaging and commit with concurrent-edit detection. - Strengthened data preservation with checksum comparison, ACL and extended-attribute handling, internal hard-link preservation, and refusal of external hard links.
- Refused unsafe symlink ancestors, nested storage, ambiguous mounts, and incomplete activity inspection.
- Made post-commit backup cleanup best effort per path. A busy or failed cleanup retains only the affected backup and does not turn a committed migration into a recovery-required transaction.
- Moved
/optfrom the default core set to the optional vendor-software examples and added/var/lib/bootprepas an optional target.
- Completed both add_subvolumes regression stages on Debian, Kubuntu, TUXEDO OS, Manjaro, CachyOS, and EndeavourOS: initial configured migration and later
/var/lib/bootprepadoption.
- Preserved exact configured target paths already mounted as independent Btrfs subvolumes.
- Regression-tested the independent-mount compatibility fix on Debian and CachyOS.
- Initial configuration-driven Btrfs subvolume migration release.