TimeTraveller v1.5.0
Post-restore hardening — integrity, recovery, and restore-from-anywhere. Motivated by a real bootloader recovery and forensics showing 2 isolated bit-flipped frames in 17,732 on a home full (a non-ECC single-event-upset signature).
Integrity: verify-after-write (D1)
With verify_after_write (default on), each shard re-reads itself from the backup store immediately after writing — cache-dropped, so it checks what actually landed, not the client buffer — inside its own writer thread so the read overlaps sibling-shard writes (near-free in wall-clock). A frame that fails its checksum marks the shard corrupt, records the affected files, keeps the archive browsable, skips retention (preserving the redundancy heal needs), and exits with a --heal hint. Catches post-write corruption (e.g. non-ECC bit flips) the same night instead of years later at restore.
Recovery: heal-from-redundancy (D2)
--heal <backup> finds files damaged by frame corruption and restores a clean copy of each from another cycle that still holds one; unrecoverable files are reported. The GUI gains a corrupt badge + Recover damaged files (heal)… action.
Portable restore-from-anywhere
- A small
timetraveller.restore.jsondescriptor (plan identity + original source roots) travels beside each manifest, backfilled on--refresh-from-mount. - A self-contained
timetraveller-restore.shrecovers on a machine with no TimeTraveller installed (needs only bash, python3, tar, zstd). - New Restore from location… in the GUI: browse to a backup on a USB drive, external disk, or network share and restore directly, with no matching plan config. Extract to the original location (behind an overwrite warning) or a staging directory.
Install / upgrade
sudo apt install ./timetraveller_1.5.0_all.deb