Handbook / Current desktop documentation
Recovery & Snapshots
Btrfs, Snapper, boot backups, authentication recovery and TPM.
This is the English desktop Handbook, published online from the same generated catalog. References to buttons, panels and menus describe the installed desktop. Package updates can be newer than the downloadable ISO. Check installation & validation scope.
Snapshots are recovery points, not off-machine backups. A failed disk can destroy the system and its snapshots together. Keep independent backups.
Eitr currently supports Snapper on a Btrfs root with /usr, /etc and
/var/lib/pacman in the same root subvolume. /home may be separate: it is not
covered by a root snapshot. Unsupported layouts fail closed before upgrades.
install.sh does not format disks or rearrange existing subvolumes; only the
ISO's eitr-guided-install erases the disk you confirm, creating this layout
(see the README's Guided install section).
Before updates
The installer enables /etc/eitr/system-update-policy.conf. Before
System → Maintenance → Update → System Update upgrades official and AUR packages, it:
- Verifies the supported layout and Snapper root configuration.
- Archives
/bootand/efionly when they are separate mounts (a/bootdirectory inside the Btrfs root is already in the root snapshot). Archives are stored under/var/lib/eitr/boot-backups/<snapshot-number>/with root-only access. - Creates a pre-upgrade root snapshot.
- Aborts the upgrade if boot backup or snapshot creation fails.
When the upgrade finishes, fails or is declined, the workflow creates the corresponding post snapshot; its description records the outcome ("after package upgrade", "after failed package upgrade"). If the workflow was killed before that, the next System Update first closes the leftover pre snapshot with an "after interrupted package upgrade" post snapshot. A failed upgrade retains its pre snapshot and boot archives either way. Updates to Flatpaks, SDKMAN/NVM runtimes and files on separate home subvolumes are not protected by these snapshots. Advanced updates and direct pacman/yay commands intentionally do not create automatic snapshots. Older Eitr snapshot hooks, if manually installed, must be removed to adopt this policy.
New Snapper configurations keep up to 10 ordinary and 5 important numbered snapshots through the cleanup timer. Existing policies are preserved. Boot archives are pruned on each System Update to the newest 10, matching the default snapshot limit; an archive may outlive its snapshot if Snapper removes it first, so check the snapshot exists before restoring one. A full disk prevents updates rather than skipping protection.
Boot guard
After a successful System Update on Eitr's guided-install layout, the boot guard
keeps that update's "before" snapshot ready (/var/lib/eitr/boot-guard.json).
eitr-boot-guard.service counts each start early in boot, and
eitr-boot-guard-healthy.service counts a start as healthy once the login screen
has stayed up for 45 seconds, which disarms the guard.
When two starts in a row after the update never reach that point, the third start restores automatically, using the factory reset's tested steps:
- The snapshot's boot files (
/var/lib/eitr/boot-backups/<number>/boot.tar) are copied to the EFI partition, after keeping today's boot files to put back. - The failed root subvolume is renamed
@eitr-guard-failed, a writable copy of the snapshot becomes@, and Snapper's.snapshotsstore moves into it. - The computer restarts into the restored system. If any step fails, the subvolumes and boot files are put back as they were and nothing restarts.
The restored system deletes @eitr-guard-failed once it reaches the login
screen, and the next login shows a notification. Home folders are not touched.
The guard cannot help when the kernel itself does not start; boot the update's
snapshot from the boot menu instead (below). Other disk layouts are never armed.
Authentication changes
Security → Enable Fingerprint/FIDO2 backs up /etc/pam.d/hyprlock, sddm and
sudo under /var/lib/eitr/pam-backups/<timestamp>/ before editing them, and
restores all three if any write fails. Fingerprint is added to all three, so
"password only" applies to the lockscreen too; pam_fprintd may delay the
password prompt for up to 10 seconds. To return to an earlier policy from a working root
shell or TTY:
sudo ls /var/lib/eitr/pam-backups
sudo /usr/lib/eitr/eitr-system auth-restore <timestamp>
# Without the eitr-desktop package, the helper is /usr/local/lib/eitr/eitr-system.
TPM disk unlock
Security → TPM Disk Unlock can add a TPM2 key slot to a LUKS2 root so the disk
unlocks at boot without typing the passphrase. Nothing here runs from the
installer. The root helper (luks-tpm-check, luks-recovery-key,
luks-tpm-enroll, luks-tpm-remove) refuses unless the device is LUKS2, a TPM2
device is listed by systemd-cryptenroll --tpm2-device=list, and a passphrase
or recovery slot already exists. It only adds a slot; the passphrase stays.
- Recovery key first. The Walker flow offers
systemd-cryptenroll --recovery-key; the key is printed once to the terminal and never stored. Write it down offline. It works at the normal passphrase prompt. - PCR choice. Eitr binds to PCR 7 (Secure Boot state and keys). Firmware
updates rarely change it, while a Secure Boot key change does. PCR 7 only
protects much when Secure Boot is enabled with your own keys (see
SECURE-BOOT.md); otherwise anyone can boot this machine
with an edited kernel command line and get an unlocked disk. For stronger
protection, enroll manually with a PIN:
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 --tpm2-with-pin=yes <device>. - Initramfs. The busybox
encrypthook cannot use TPM2 tokens, so enrollment refuses while it is configured. Switching tosystemdandsd-encryptinHOOKS(withrd.luks.name=<LUKS-UUID>=rootreplacingcryptdevice=on the kernel command line, or/etc/crypttab.initramfs) is a boot-critical change Eitr leaves to you. Make it, runsudo mkinitcpio -P, update the boot entry, and confirm one passphrase boot works before enrolling the TPM.
If the TPM stops unlocking (firmware or Secure Boot change, TPM reset), the passphrase prompt appears as before. Enter it, then remove and re-enroll. To roll back completely, use Remove TPM Unlock, or from any working shell:
sudo systemd-cryptenroll /dev/<luks-partition> # list slots
sudo systemd-cryptenroll --wipe-slot=tpm2 /dev/<luks-partition>
Factory reset
Computers installed with the Eitr ISO also keep a read-only first-login restore point outside Snapper. Walker → System → Maintenance → Factory Reset returns to it, with or without the home folder files; see FACTORY-RESET.md.
Inspect recovery points
Use Walker → System → Maintenance → Snapshots, or run these read-only checks:
sudo snapper -c root list
findmnt -o TARGET,SOURCE,FSTYPE / /boot /efi
sudo du -sh /var/lib/eitr/boot-backups
If the desktop fails but the system still boots, switch to a text console or use an SSH connection you configured yourself. If it does not boot, use the official Arch installer ISO and mount the system's Btrfs filesystem. Identify the correct disk, encryption mapping, root subvolume, snapshot number and EFI mount before making any changes. Do not copy commands from another machine blindly.
Home folder snapshots
Off by default. System > Maintenance > Snapshots > Home Folder Snapshots
turns them on (it asks first, and turning them off deletes them). Snapper's
home configuration then keeps a snapshot of /home every hour for a day and
one a day for a week, deleting the oldest when free space falls below 20%.
Caches, ~/Downloads, VM disk folders (~/.local/share/libvirt/images,
GNOME Boxes, ~/VirtualBox VMs) and the Steam library are left out: at the
next start, before anyone logs in, eitr-home-exclusions.service turns them into
nested Btrfs subvolumes, which home snapshots do not include. Their files are
kept (reflinked, so the move takes no extra space). The factory reset's Keep My
Files carries these subvolumes into the restored home: hidden ones into the
"Settings before reset" folder, caches are dropped. If one cannot be moved, the
previous home is kept for review instead of deleted.
Snapshots > Restore a File or Folder (or eitr restore PATH) lists the
snapshots that have the path and copies the chosen version beside the current
one as NAME (restored DATE), or back in place when it was deleted. Nothing is
ever overwritten.
What each update changed
Before rolling back, check what you would undo. System > Maintenance >
Snapshots > What Each Update Changed (or eitr snapshots changes) lists every
update's before/after pair with counts of upgraded, downgraded, installed and
removed packages. eitr snapshots changes <before number> lists every package of
one update with its old and new version. It compares the package databases kept
inside the two snapshots; an update that has no after snapshot yet is compared
with the running system.
Boot an older snapshot
With GRUB or Limine, the boot menu can list read-only Snapper snapshots, so a
broken update can be inspected and rolled back without live media. The
installer offers this only after you type yes; on an existing installation run
bash distro/bootloader/setup.sh (--check only reports). Check the result with
Walker → System → Maintenance → Snapshots → Bootable Snapshot Status, or
sudo /usr/lib/eitr/eitr-system snapshots-boot-status.
| Boot loader | Integration | Packages (distro/bootloader/) |
|---|---|---|
| GRUB | grub-btrfsd.service rebuilds the "Arch Linux snapshots" submenu whenever Snapper adds or removes a snapshot |
grub-btrfs, inotify-tools (official) |
| Limine | limine-snapper-sync.service adds snapshot entries to limine.conf |
limine-snapper-sync, limine-mkinitcpio-hook (AUR) |
| systemd-boot | Not supported. It only loads kernels from the EFI/XBOOTLDR partition and cannot open Btrfs snapshots | Use the live-media procedure below |
Detection reads the GRUB, Limine and systemd-boot files under /boot, /efi
and /boot/efi. If more than one loader is configured (for example leftover
systemd-boot files next to GRUB), setup refuses rather than guessing; remove the
stale files or configure entries manually. Setup copies the current
grub.cfg/limine.conf to /var/lib/eitr/boot-config-backups/<timestamp>/
first, and enables the service for the next boot:
- GRUB: setup runs
grub-mkconfig -o /boot/grub/grub.cfgonce. If/bootis a separate partition, snapshot entries boot the current kernel; after a kernel update, restore the matching boot archive (see below) as well. - Limine:
limine-snapper-syncmanages entries created bylimine-entry-tool(fromlimine-mkinitcpio-hook) and keeps copies of each snapshot's kernel on the EFI partition, so that partition needs room (upstream recommends 4 GiB). Review/etc/default/limine(SNAPPER_CONFIG_NAME="root",ESP_PATHif not detected), runsudo limine-update, check the menu, thensudo systemctl start limine-snapper-sync.service. Eitr does not runlimine-updatefor you because it rewrites the boot menu.
To undo, disable the service and copy the backup back, for example
sudo systemctl disable grub-btrfsd.service and
sudo cp /var/lib/eitr/boot-config-backups/<timestamp>/grub.cfg /boot/grub/grub.cfg.
Read-only snapshots
Snapper snapshots are read-only. A snapshot booted as-is cannot write /var, so
SDDM and other services may fail; log in on a text console (Ctrl+Alt+F3) if the
graphical login does not start. An initramfs overlay makes the booted snapshot
writable in RAM (changes vanish at reboot). Eitr does not edit HOOKS; add it
yourself, then regenerate, and note that only snapshots created afterwards
contain the hook:
- GRUB: append
grub-btrfs-overlayfstoHOOKS=(...)in/etc/mkinitcpio.conf, thensudo mkinitcpio -P. - Limine: add
btrfs-overlayfsafterfilesystems(orsd-btrfs-overlayfswith the systemd hooks), thensudo limine-update.
Roll back for good
- Pick the newest "before package upgrade" snapshot in the boot menu's snapshot list and confirm the system works there.
- Limine: run
sudo limine-snapper-restoreand choose the snapshot. It restores with the configuredRESTORE_METHODand adds a backup entry for the replaced system, so the restore itself can be reverted from the boot menu. - GRUB:
snapper rollbackonly works when the root is mounted through the Btrfs default subvolume. Arch layouts usually bootrootflags=subvol=@(checkfindmnt -no OPTIONS /and/etc/fstab), so rollback would have no effect. Replace the root subvolume from live media after inspecting the top-level filesystem's subvolume list. The following example is only for Eitr's guided-install layout, where Snapper created the nested@/.snapshotssubvolume; other layouts need their actual paths:
sudo mount -o subvolid=5 /dev/<root-or-mapper> /mnt
sudo mv /mnt/@ /mnt/@.broken
sudo btrfs subvolume snapshot /mnt/@.broken/.snapshots/<number>/snapshot /mnt/@
# A Btrfs snapshot does not include nested subvolumes. Keep the original
# Snapper store in the restored root instead of deleting it with @.broken.
sudo rmdir /mnt/@/.snapshots
sudo mv /mnt/@.broken/.snapshots /mnt/@/.snapshots
If any command fails, stop and inspect; do not delete the preserved root.
Verify the snapshot store is present under the restored root, and review
its fstab before proceeding. Restore the matching
/var/lib/eitr/boot-backups/<number>/ archive if /boot
is separate, reboot into the normal entry, run
sudo grub-mkconfig -o /boot/grub/grub.cfg, and delete @.broken with
sudo btrfs subvolume delete only after the restored system is verified.
Restore safely from live media
- Back up any newer files you need. Mount the Btrfs top-level filesystem and
inspect its subvolume list; locate the selected snapshot's
snapshotsubvolume. Paths depend on where.snapshotsis mounted. - Preserve the failed root subvolume by renaming it. Create a writable Btrfs snapshot of the selected recovery snapshot at the original root-subvolume path, matching the installed bootloader's rootflags and fstab.
- Mount that restored root and its actual boot/EFI partitions. Restore the matching boot archives if kernel/initramfs/bootloader files changed. Archives must match the chosen root snapshot; never mix a newer kernel with older modules.
- Review fstab and bootloader configuration, then regenerate initramfs or repair
boot entries from
arch-chrootas needed for that machine. Reboot only after the root and boot files agree.
This is a layout-aware manual recovery procedure, not a verified one-click
rollback implementation. Snapper's rollback command alone is not sufficient
for arbitrary Arch subvolume/bootloader layouts. The GRUB and Limine snapshot
entries above still need validation on real hardware before claiming automatic
recovery.
References: grub-btrfs, limine-snapper-sync, Snapper recovery concepts, Arch installation guide.