Configuring Automatic BTRFS Snapshots on Fedora With Timeshift and Snapper (September 2026)

Fedora uses the Btrfs filesystem by default on most installations, but unlike openSUSE, it does not enable automatic BTRFS snapshots out of the box. That means your system is one bad dnf upgrade away from a broken boot. In this guide, I will walk you through configuring automatic BTRFS snapshots on Fedora with Snapper, Btrfs Assistant, and optionally Timeshift, so you always have a working rollback point.

By the end, you will know how to set up timeline snapshots, integrate them with GRUB for boot entries, hook DNF into automatic pre and post snapshots, and troubleshoot the most common errors Fedora users hit along the way.

What Is Btrfs and Why Use Snapshots on Fedora?

Btrfs is a copy-on-write Linux filesystem that supports subvolumes, snapshots, compression, and built-in RAID. A Btrfs snapshot is a point-in-time copy of a subvolume that initially consumes almost no extra disk space because it shares data blocks with the source until those blocks change.

On Fedora, the default Btrfs layout uses two subvolumes: @ mounted at / and @home mounted at /home. Snapper treats these as separate units, and you typically create one Snapper configuration per subvolume.

Snapshots matter because Fedora pushes aggressive updates, especially for the kernel and Mesa. When an update breaks your boot, your display server, or a critical tool, a snapshot lets you reboot into the previous working state in under a minute. Without snapshots, you are relying on backups that may be hours or days old.

The catch: Fedora does not run snapper-timeline.timer by default, and there is no Snapper config created during installation. You have to set it up yourself the first time.

Installing Btrfs Assistant, Snapper, and Timeshift on Fedora

Before configuring anything, install the three core packages you will need. I use dnf here because it is the default on Fedora Workstation and Server editions.

Step 1. Install Snapper, the GRUB Btrfs integration, and Btrfs maintenance tools:

sudo dnf install snapper snapper-utils grub2-btrfs btrfs-progs inotify-tools

Step 2. Install Btrfs Assistant from the official Fedora COPR. The GUI makes Snapper management far easier than the command line:

sudo dnf copr enable btrfs-assistant/btrfs-assistant
sudo dnf install btrfs-assistant

Step 3. Optionally install Timeshift if you prefer its rsync or Btrfs modes. Timeshift on Fedora works, but it does not understand Fedora’s @ and @home subvolume layout out of the box, so I prefer Snapper for Btrfs setups:

sudo dnf install timeshift

Verify everything installed correctly by running snapper --version and launching Btrfs Assistant from your application menu. If the GUI opens and lists your root subvolume, you are ready to create a Snapper config.

Creating a Snapper Configuration on Fedora

A Snapper config is a named profile that tells Snapper which subvolume to snapshot, how often, and where to store metadata. Fedora creates no configs during install, so the first step is to make one for @.

Step 1. Confirm your subvolume layout. List the Btrfs subvolumes on your root device:

sudo btrfs subvolume list /

You should see entries like ID 256 top-level, ID 257 path @, and ID 258 path @home. Note the device name (commonly /dev/sda2 or /dev/nvme0n1p2) for the next step.

Step 2. Create a Snapper config named root for the @ subvolume:

sudo snapper -c root create-config /

This writes the config under /etc/snapper/configs/root and creates /.snapshots as the storage directory. If you want to snapshot @home too, repeat the command with a different config name and a different mount path.

Step 3. Disable quotas on the @ subvolume so snapshots do not interfere with the running system:

sudo btrfs qgroup limit none /

This is a well-known gotcha. Without this command, Snapper shows zero free space and refuses to create new snapshots.

Setting Up Automatic Timeline Snapshots

Timeline snapshots run on a systemd timer and create one snapshot per hour by default, with older ones pruned automatically. They are your safety net for things you forget to snapshot manually.

Enable and start the timer:

sudo systemctl enable --now snapper-timeline.timer

Check that the timer is active:

systemctl list-timers | grep snapper

You should see snapper-timeline.timer scheduled to fire every hour. The cleanup timer snapper-cleanup.timer runs alongside it and removes old snapshots based on your retention rules.

Adjust retention by editing the config file. The defaults are reasonable for most users, but on a 256 GB laptop you may want fewer hourly snapshots:

sudo snapper -c root set-config "TIMELINE_LIMIT_HOURLY=10"
sudo snapper -c root set-config "TIMELINE_LIMIT_DAILY=7"
sudo snapper -c root set-config "TIMELINE_LIMIT_WEEKLY=4"
sudo snapper -c root set-config "TIMELINE_LIMIT_MONTHLY=6"

I run with these values on my Fedora workstation and never run out of disk space from snapshots.

Creating and Restoring Manual Snapshots

Manual snapshots are snapshots you trigger yourself, typically right before a risky action like a kernel upgrade or a major config change.

Create a pre-upgrade snapshot with a descriptive description:

sudo snapper -c root create --description "Before kernel upgrade"

Snapper prints the snapshot number, which is what you use later to restore. List snapshots any time with:

snapper -c root list

To restore, open Btrfs Assistant, navigate to the Snapper tab, pick the snapshot, and click Restore. The GUI handles the unmount, snapshot apply, and reboot flow automatically. If you prefer the CLI, use:

sudo snapper -c root undochange 1..0

Replace 1..0 with your actual snapshot range, where the higher number is the snapshot you want to roll back to. After the command finishes, reboot and verify your system.

Tip: always restore into a new snapshot first by using the diff view in Btrfs Assistant, so you can see exactly which files will change before you commit.

Integrating With GRUB for Boot Snapshots

Snapshots are only useful if you can boot into them when your system fails to start. The grub2-btrfs package plus the grub-btrfsd daemon adds every snapshot to your GRUB menu automatically.

Step 1. Confirm grub2-btrfs and inotify-tools are installed (from earlier):

rpm -q grub2-btrfs inotify-tools

Step 2. Enable and start the daemon so it watches your /.snapshots directory and regenerates the GRUB config when snapshots change:

sudo systemctl enable --now grub-btrfsd.service

Step 3. Regenerate your GRUB config to pick up the existing snapshots right now:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

On UEFI systems the path is /boot/efi/EFI/fedora/grub.cfg. Reboot and you should see a “Btrfs Snapshots” submenu in GRUB listing every snapshot by date and number.

DNF Plugin for Automatic Pre and Post Snapshots

The dnf-plugin-snapper package makes DNF automatically create a snapshot before and after every transaction. That means every dnf upgrade, dnf install, or dnf remove leaves you a clean rollback point without any extra work.

Install the plugin:

sudo dnf install dnf-plugin-snapper

Verify it is loaded:

dnf plugin-snapper --help

Run a test upgrade and confirm two new snapshots appear:

sudo dnf upgrade --refresh
snapper -c root list | tail

You should see two new entries labeled with the package names that changed. From now on, every DNF transaction on your system is protected.

Btrfs Maintenance and Space Monitoring

Snapshots are cheap, but not free. Each snapshot holds references to old data blocks until those blocks are rewritten or the snapshot is deleted. Run a scrub monthly to verify data integrity, and a balance when allocation gets uneven.

Start a scrub in the background:

sudo btrfs scrub start /
sudo btrfs scrub status /

Check space usage on the Btrfs filesystem:

sudo btrfs filesystem usage /

If allocated space is growing without you adding files, old snapshots are likely holding data. Delete snapshots you no longer need through Btrfs Assistant or with:

sudo snapper -c root delete 42

I keep 10 hourly, 7 daily, 4 weekly, and 6 monthly timeline snapshots on my main Fedora install, plus a few manual ones before big upgrades. That balances rollback coverage with disk space.

Troubleshooting Common Issues

Even with a clean setup, three problems come up again and again in Fedora forums. Here is how I handle each.

Restore button greyed out in Btrfs Assistant. This usually means there is no Snapper config for the subvolume you are looking at, or the snapshot was made from a different config. Open a terminal and run snapper list-configs. If only the root config exists but you are looking at @home, create the missing config with sudo snapper -c home create-config /home.

TPM error when booting into a snapshot. Some Fedora installs with Secure Boot enabled fail to boot into snapshots because the TPM module loads before the snapshot subvolume mounts. Create a GRUB drop-in to unload it:

echo 'rmmod tpm' | sudo tee /etc/grub.d/99_btrfs_tpm_fix
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

This is the workaround documented in the Fedora Discussion thread and confirmed by multiple users.

Snapshots not appearing in GRUB menu. Verify that grub-btrfsd is running with systemctl status grub-btrfsd. If it is running and snapshots still do not show, regenerate GRUB manually with the command from the previous section. On Btrfs setups where /boot is a separate ext4 partition, the path for the GRUB config is /boot/grub2/grub.cfg; on combined layouts it can be /boot/efi/EFI/fedora/grub.cfg.

Snapper vs Timeshift on Fedora: Which Should You Use

Both tools work on Fedora, but they serve slightly different users.

Snapper was built by SUSE specifically for Btrfs. It understands subvolumes, integrates with package managers via plugins, and exposes every snapshot to GRUB when paired with grub2-btrfs. It is the right choice if you want a tight, native Btrfs workflow on Fedora and you do not mind the slightly steeper learning curve.

Timeshift is more approachable, with a clean GUI that hides most of the Btrfs details. It supports rsync, Btrfs, and a hybrid mode, which makes it a good fit if you sometimes run Fedora on ext4 or want one tool that works across filesystems. The downside is that Timeshift does not understand Fedora’s @ and @home subvolume layout by default and does not hook DNF automatically.

My recommendation: pick Snapper if you are on Btrfs and want the full feature set including automatic DNF snapshots and GRUB boot entries. Pick Timeshift if you want the simplest possible GUI and you do not need DNF integration. You can also run both, since they coexist as long as they are configured to snapshot the same subvolume carefully.

FAQ

Does Btrfs take snapshots automatically?

Not by default on Fedora. openSUSE enables Snapper timeline snapshots during installation, but Fedora does not. You need to create a Snapper config, enable snapper-timeline.timer, and optionally install dnf-plugin-snapper to get automatic snapshots on Fedora.

Which is better, Snapper or Timeshift?

Snapper is better for native Btrfs workflows on Fedora because it understands subvolumes, integrates with DNF through dnf-plugin-snapper, and pairs with grub2-btrfs to add snapshots to GRUB. Timeshift is better for users who want a simple GUI, work across multiple filesystems, or prefer rsync-based snapshots.

Where does Timeshift store Btrfs snapshots?

Timeshift stores Btrfs snapshots on the same subvolume you select in its settings, typically the @ subvolume mounted at /. They appear under /.timeshift on the Btrfs filesystem and can be browsed from the Timeshift GUI.

How do I configure btrfs for Timeshift on Fedora?

Install Timeshift with sudo dnf install timeshift, open the GUI, choose Btrfs as the snapshot type, select your root subvolume, and schedule hourly, daily, weekly, and monthly snapshots. Make sure /.snapshots does not conflict with a Snapper config on the same subvolume.

Why are my snapshots not appearing in GRUB?

The most common cause is that grub-btrfsd is not running. Enable it with sudo systemctl enable u002du002dnow grub-btrfsd.service and regenerate GRUB with sudo grub2-mkconfig -o /boot/grub2/grub.cfg. On UEFI systems the correct path is /boot/efi/EFI/fedora/grub.cfg.

Conclusion

Configuring automatic BTRFS snapshots on Fedora with Snapper and Btrfs Assistant takes about 15 minutes the first time, and it turns every system upgrade into a reversible operation. Install Snapper and Btrfs Assistant, create a Snapper config for your root subvolume, enable timeline snapshots, hook DNF into the workflow with dnf-plugin-snapper, and finish with grub-btrfsd so you can boot into any snapshot from GRUB.

If you prefer a simpler GUI and you do not need DNF integration, Timeshift on Fedora is a perfectly fine alternative. Either way, you should test your rollback flow once before you actually need it. Pick a snapshot, boot into it, and confirm everything works. That small investment is what makes automatic BTRFS snapshots on Fedora genuinely useful when something breaks.

Leave a Comment