Diagnosing and Fixing openSUSE Btrfs Snapshot Rollback Failures
A diagnostic guide for resolving openSUSE Btrfs snapshot rollback failures, covering GRUB menu errors, subvolume mismatches, and Snapper configuration fixes.
13 Apr 2026, 14:41 UTC

The Problem: Rollbacks That Don't Stick
In openSUSE Leap (15.5+) and Tumbleweed, the combination of Btrfs, Snapper, and the grub2-snapper-plugin is designed to make system recovery seamless. However, administrators often encounter a specific failure: the snapper rollback command reports success, but the system reboots into the same broken state, or the GRUB boot menu fails to load snapshots with a "file not found" error.
The primary takeaway is that a successful Snapper rollback requires three things to align: the Btrfs default subvolume must be updated, the GRUB configuration must recognize the snapshot path, and the kernel/initrd must exist within that specific snapshot's view of /boot.
Quick Diagnostic Matrix
| Symptom | Likely Cause | Diagnostic Command |
|---|---|---|
| GRUB snapshot entries missing | Plugin failed to regenerate config | ls /boot/grub2/snapshot/ |
| 'File not found' on kernel/initrd | Subvolume path mismatch | btrfs subvolume list / | grep snap |
| Rollback succeeds but no effect | Booted from wrong subvolume | findmnt / |
| Snapper timeline is empty | Config disabled or cleanup ran | snapper -c root get-config |
Step-by-Step Verification Process
Run these checks in order to isolate whether the failure is at the filesystem level, the bootloader level, or the configuration level.
- Verify Current Root: Check which subvolume is currently mounted as root.
If the output does not point to a# Run as root findmnt -n -o SOURCE /.snapshotspath after a rollback, the bootloader is ignoring the Btrfs default subvolume. - Audit Available Snapshots: Ensure the snapshot you are attempting to roll back to actually exists and contains data.
# Run as root snapper -c root list - Test GRUB Menu Generation: Verify if the
grub2-snapper-pluginis actually writing entries to the config.
If the count is 0, the plugin is not detecting your snapshots.# Run as root grub2-mkconfig -o /tmp/grub.cfg && grep -c 'snapshot' /tmp/grub.cfg - Check Snapper Configuration: Ensure the timeline is active so snapshots are created automatically.
# Run as root snapper -c root get-config | grep -E 'TIMELINE|NUMBER'
Fixes Based on Findings
Scenario A: GRUB Entries are Missing
If the grub2-snapper-plugin is inactive, the boot menu won't show your snapshots. Restart the service and force a config update.
# Run as root
systemctl restart grub2-snapper-plugin.service
grub2-mkconfig -o /boot/grub2/grub.cfg
Scenario B: Rollback Reports Success but System Doesn't Change
This usually happens when the system is booting via a hardcoded subvolume ID rather than the Btrfs "default". You can manually force the default subvolume to the desired snapshot.
# Run as root
# Identify the snapshot ID from 'snapper list', then:
btrfs subvolume set-default $(btrfs subvolume list / | grep '@/.snapshots/[0-9]*/snapshot' | head -1 | awk '{print $2}') /
Risk: Manual set-default bypasses Snapper's internal tracking. Future snapper rollback commands may behave unexpectedly until a new snapshot is created and set as default.
Scenario C: Timeline is Empty
If no snapshots are being created, enable the timeline feature.
# Run as root
snapper -c root set-config TIMELINE_CREATE=yes
Verification of Fix
To confirm the system is now recoverable:
- Reboot and select a snapshot from the Advanced options for openSUSE menu in GRUB.
- Once booted, run
findmnt /. The source should explicitly include the.snapshots/X/snapshotpath. - Run
snapper -c root listto confirm a new pre/post snapshot pair was created for the rollback operation.
When to Escalate
If the above steps fail, the issue may be deeper than a configuration error. Escalate to openSUSE Bugzilla or senior engineering if:
- The
grub2-snapper-pluginservice fails with permission errors on/boot/grub2. btrfs check --readonly /dev/rootreports filesystem corruption. (Warning: Never runbtrfs checkon a mounted filesystem).- The kernel or initrd is missing from
/bootafter azypper dup, requiring a manualdracut -fandgrub2-mkconfig.
Limitations
This guide applies to traditional openSUSE Leap and Tumbleweed installations. It does not apply to MicroOS or Aeon, which use a read-only root filesystem and a different transactional update mechanism. Additionally, if you have a separate /boot partition (not on Btrfs), the grub2-snapper-plugin cannot snapshot the kernel, and snapshot boot entries will fail.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.