Because your system should survive anything—even your own mistakes.
- Overview
- What Makes It "Indestructible"?
- Installation variants
- Prerequisites
- Installation Guides
- Key Features Explained
- Post-Installation automated script
- Rolling Back Your System
- Contributing
- Support the Project
- License
- Acknowledgments
- Resources that complemented every guide in this repository
Fedora Indestructible is a comprehensive guide for building a resilient, snapshot-capable Fedora system using BTRFS and Snapper. This setup combines Fedora's cutting-edge software with the advanced features of BTRFS snapshots, allowing you to roll back system changes effortlessly and recover from catastrophic failures.
Whether you're experimenting with new software, performing risky upgrades, or simply want peace of mind, this guide will help you create a system that's virtually indestructible.
- Atomic Snapshots: Take instant snapshots of your entire system before any major change
- Effortless Rollbacks: Boot directly into previous snapshots from GRUB if something breaks
- Fine-Grained Control: Exclude specific directories (like
/home,/srv,/var, etc) from snapshots - Automatic Snapshots: DNF5 transactions and timeline-based snapshots capture your system state throughout the day
- Desktop & Server Ready: Includes configurations for Workstation, KDE Plasma, and Fedora Server with Cockpit
- Safe Manual Rollback: Custom
system-rollbackutility that never touches the default subvolume, keeping GRUB consistent
This repository provides two installation variants:
- Workstation + KDE Plasma: Anaconda Web graphical install with manual partitioning
- Fedora Server + Headless Management: Anaconda GTK graphical install with static IP, Cockpit, and Blivet-GUI manual partitioning
All configurations use:
- BTRFS with Snapper for snapshot management
- Flat subvolume layout inspired by openSUSE, adapted for Fedora / RHEL
- GRUB2 with grub-btrfs integration (via
jmarcoshp/grub-btrfsCOPR) - Anaconda installer with custom partitioning
- Custom DNF5
libdnf5-plugin-actionsintegration for pre/post snapshots - Rollback utilities for different variants (CLI/GUI) btrfs-assistant and
system-rollbackscript
Download the official Fedora ISO for your edition:
- Fedora Workstation - GNOME desktop experience
- Fedora KDE Plasma - KDE Plasma desktop experience
- Fedora Server - Headless / Cockpit-managed server
Write the ISO to USB with Fedora Media Writer and boot in UEFI mode.
- 64-bit x86_64 processor (UEFI firmware)
- 4 GB RAM minimum (8 GB+ recommended)
- 30 GB disk space (more for
/home, application data and snapshots) - Internet connection during installation and post-reboot setup
All installation guides erase target disk as an example, but can be used for dual-boot setups
| Guide | Edition | Desktop / Management |
|---|---|---|
| Desktop (Workstation + KDE) | Workstation / KDE Plasma Spin | GNOME / KDE Plasma + Discover |
| Server + Headless Management | Fedora Server | Cockpit + SSH |
The installation creates a carefully designed flat subvolume structure that:
- Keeps the RPM database consistent across snapshots (
/usr/lib/sysimage/rpmsince Fedora 36, no need to split/varlike Debian) - Excludes user data, server data, and caches from automatic snapshots
- Prevents data loss when rolling back system changes
- Optimizes disk space usage with
zstd:3compression andspace_cache
Flat layout under subvolid 5:
| Subvolume | Mountpoint | Purpose |
|---|---|---|
root |
/ |
Main system (/boot, /etc, /usr, /root, …) |
home |
/home |
User home directory, manageable with its own Snapper config |
opt |
/opt |
Third-party software, excluded from rollbacks |
srv |
/srv |
Server roles data, excluded from rollbacks |
usr_local |
/usr/local |
Locally compiled software, scripts and source codes, excluded from rollbacks |
var |
/var |
Logs, VMs, containers, DBs. COW disabled (chattr +C), no compression |
For
/root: no dedicated subvolume is created. RHEL design (following FHS) enforces/rootas a mandatory directory inside/. See Bug 710388 and anaconda.conf.
Automatic snapshot management with:
- Pre/post snapshots around every DNF5 / Discover / Cockpit transaction
important=yesflag for kernel, bootloader, driver, and systemd updates- Hourly, daily, and weekly timeline snapshots
- Configurable retention policies
- Bootable snapshots accessible from GRUB
This plugin bridges the gap between Fedora and openSUSE's native snapshot integration, making rollbacks truly seamless. For a detailed explanation about this plugin please see.
A custom rollback script that:
- Swaps the
rootsubvolume by hand instead of usingsnapper rollback - Never touches the default subvolume (stays
subvolid=5), so GRUB entries remain consistent - Migrates child subvolumes (
.snapshots) into the restored system - Keeps a timestamped
root_backup_*so every rollback is reversible - Logs operations and supports dry-run, list, and clean modes
Unlike snapper rollback, which is deeply integrated with SUSE's nested subvolume layout and leaves Fedora bootloader entries inconsistent, this approach keeps the flat layout intact.
After completing your installation, a script is provided to finish the setup from the guide (Fstab, snapper config, grub-btrfs, DNF5 plugin, updatedb tuning):
cd ~/Fedora-Indestructible/scripts
chmod +x first-boot-setup.sh
sudo ./first-boot-setup.shYou can check the full command list in Desktop and Server guides.
Learn how to perform system rollbacks and manage snapshots in the Rollback Guide.
Contributions are welcome! If you find issues, have suggestions, or want to add support for new configurations, please open an issue or submit a pull request.
If this guide helped you to build a more resilient system, consider supporting further development:
Available Methods:
Testing and research takes a lot of time, every contribution helps maintain and improve these guides. Thank you! 💙
This project is licensed under the GNU GPL v3.0 License - see the LICENSE file for details.
Special thanks to:
- The openSUSE team for pioneering BTRFS snapshot integration
- GRUB-BTRFS developers for snapshots menu integration
- Btrfs Assistant developers for the GUI management tool
- The Fedora and Linux communities for extensive documentation
- BTRFS Documentation
- Snapper Documentation
- Arch Wiki - Snapper
- openSUSE BTRFS layout
- rootco.de - openSUSE BTRFS Subvolumes
- Fedora Wiki - Relocate RPM to /usr
- RHEL Bug 710388 - /root must be inside /
- Anaconda configuration reference
- openSUSE Rollback guide
Made with ❤️ for the Fedora community