Title Proposal
Proposal: Support for UKI (Unified Kernel Images) synchronization during Btrfs backup and restore
Description
With the increasing adoption of UKIs (Unified Kernel Images) and systemd-boot, there is a growing challenge for system restore utilities like Timeshift.
In a typical Btrfs setup, Timeshift creates snapshots of the root subvolume (@). However, the EFI System Partition (ESP), where the UKIs reside, is usually a separate FAT32 partition and is not included in the Btrfs snapshot.
The Problem
When a user restores a snapshot from a previous state:
- The root filesystem (
/) is reverted to an older version (including old kernel modules).
- The ESP remains in its current state (with a newer UKI/Kernel).
- Result: The system fails to boot or modules fail to load because the restored
/lib/modules/ do not match the newer kernel in the ESP.
Proposed Solution
I have developed and tested a hook-based approach that ensures atomic synchronization between the root snapshot and the UKI. The logic is as follows:
- Pre-Backup Hook: Just before the snapshot is created, the current functional UKI is copied from the ESP to a directory inside the root (e.g.,
/etc/timeshift/uki-backup/). This ensures the UKI is "captured" inside the Btrfs snapshot.
- Post-Restore Hook: Immediately after a restoration, the script takes the restored UKI from
/etc/timeshift/uki-backup/ and copies it back to the physical ESP partition, ensuring the boot binary matches the restored modules.
Reference Implementation
I have published a working implementation with robust scripts that handle:
- Dynamic detection of
/boot vs /efi mount points.
- Safe remounting of the ESP (handling RO/RW states).
- Integration with
timeshift-autosnap and native Timeshift restore hooks.
You can review the logic here: https://github.com/jairogaleano/timeshift-uki-hooks
Goal
I believe this logic (or a native version of it) would be a valuable addition to Timeshift to support modern Linux boot standards. At the very least, providing an official or documented way to handle these "out-of-snapshot" boot files would greatly benefit the community.
I'm open to discussing how this could be integrated into the core or if there's interest in a pull request regarding hook documentation.
Title Proposal
Proposal: Support for UKI (Unified Kernel Images) synchronization during Btrfs backup and restore
Description
With the increasing adoption of UKIs (Unified Kernel Images) and
systemd-boot, there is a growing challenge for system restore utilities like Timeshift.In a typical Btrfs setup, Timeshift creates snapshots of the root subvolume (
@). However, the EFI System Partition (ESP), where the UKIs reside, is usually a separate FAT32 partition and is not included in the Btrfs snapshot.The Problem
When a user restores a snapshot from a previous state:
/) is reverted to an older version (including old kernel modules)./lib/modules/do not match the newer kernel in the ESP.Proposed Solution
I have developed and tested a hook-based approach that ensures atomic synchronization between the root snapshot and the UKI. The logic is as follows:
/etc/timeshift/uki-backup/). This ensures the UKI is "captured" inside the Btrfs snapshot./etc/timeshift/uki-backup/and copies it back to the physical ESP partition, ensuring the boot binary matches the restored modules.Reference Implementation
I have published a working implementation with robust scripts that handle:
/bootvs/efimount points.timeshift-autosnapand native Timeshift restore hooks.You can review the logic here: https://github.com/jairogaleano/timeshift-uki-hooks
Goal
I believe this logic (or a native version of it) would be a valuable addition to Timeshift to support modern Linux boot standards. At the very least, providing an official or documented way to handle these "out-of-snapshot" boot files would greatly benefit the community.
I'm open to discussing how this could be integrated into the core or if there's interest in a pull request regarding hook documentation.