Tuesday, August 18, 2026

Fedora Rawhide Server OverlayFS BTRFS setup

 Configuring Fedora Rawhide Server using a combination of Btrfs and OverlayFS creates a secure testing environment. This configuration isolates critical for tracking rapidly evolving Rawhide packages from developers allowing the server to load read-only Btrfs base snapshots while using the OverlayFS layer as a storage layer for writing and temporary data. If an update disrupts the OS, the base snapshot remains intact, allowing for rollback after a single reboot. Same configuration may also work and vice versa way. Btrfs-assistant running inside Overlay instance booted via corresponding option of Grub Submenu allows to recover from crash main instance via selection required "ro" snaphot using it's own GUI.


Original disk layout created via Anaconda Blivet GUI

boris@fedoraSRV45:~$ lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sr0                                                                            
zram0  swap   1     zram0 36997738-0002-4ac8-a610-5fa763846448                [SWAP]
vda                                                                            
├─vda1 vfat   FAT32       59C6-BE04                            1014.1M     1% /boot/efi
├─vda2 ext4   1.0         3c0092f6-68b7-46c4-9443-c18b91a93298    1.5G    17% /boot
└─vda3 btrfs              a8856089-210e-42ff-8ba4-5f53f91a8dee   59.4G     9% /var/log
                                                                             /var/cache
                                                                             /home
                                                                             /.snapshots
                                                                             /

$ sudo dnf install btrfs-assistant snapper gawk inotify-tools libdnf5-plugin-actions git make -y
$ sudo dnf install python3-btrfsutil dracut-live -y 

========================
Trick Snapper Method
========================
$ sudo umount /.snapshots
$ sudo rmdir    /.snapshots
$ sudo snapper -c root create-config  /
$ sudo mount  /.snapshots

Create the missing directory: 

$ sudo mkdir -p /boot/grub
$ sudo dnf install grub2-tools 

# Fix binary compatibility wrapper
$ sudo ln -sf /usr/bin/grub2-script-check /usr/bin/grub-script-check
$ cd grub-btrfs
================
UNDER grub-config
================
$ nano config
GRUB_BTRFS_MKCONFIG="/usr/bin/grub2-mkconfig"
GRUB_BTRFS_GRUB_DIRNAME="/boot/grub2"
GRUB_BTRFS_SCRIPT_CHECK="grub2-script-check"
========================================

# Compile package targets
$ sudo make install 
 
boris@fedoraSRV45:~$ cat /etc/fstab
#
UUID=a8856089-210e-42ff-8ba4-5f53f91a8dee / btrfs subvol=@,compress=zstd:1 0 0
UUID=a8856089-210e-42ff-8ba4-5f53f91a8dee /.snapshots btrfs subvol=snapshots,compress=zstd:1 0 0
UUID=3c0092f6-68b7-46c4-9443-c18b91a93298 /boot ext4 defaults 1 2
UUID=59C6-BE04 /boot/efi vfat umask=0077,shortname=winnt 0 2
UUID=a8856089-210e-42ff-8ba4-5f53f91a8dee /home btrfs subvol=@home,compress=zstd:1 0 0
UUID=a8856089-210e-42ff-8ba4-5f53f91a8dee /var/cache btrfs subvol=@cache,compress=zstd:1 0 0
UUID=a8856089-210e-42ff-8ba4-5f53f91a8dee /var/log btrfs subvol=@log,compress=zstd:1 0 0

 ===============================
sudo nano /etc/btrfs-assistant.conf
===============================
[Subvol-Mapping]
root = "snapshots,@,a8856089-210e-42ff-8ba4-5f53f91a8dee"
 
[Backup-Mapping]
/ = "@"
================================
sudo nano /etc/snapper/configs/root
================================
SUBVOLUME="/" 
===============================
sudo nano /etc/default/grub-btrfs/config
===============================
GRUB_BTRFS_SNAPSHOT_KERNEL_PARAMETERS="'rd.live.overlay.overlayfs=1 "
==============================
 Overlay Setup
==============================
$ echo 'add_dracutmodules+=" overlayfs "' | sudo tee /etc/dracut.conf.d/overlayfs.conf
$ sudo dracut -f --regenerate-all
$ sudo rm -f /boot/grub2/grub-btrfs.new /tmp/grub-btrfs.*
$ sudo /etc/grub.d/41_snapshots-btrfs
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now grub-btrfsd
 
boris@fedoraSRV45:~$ uname -a
Linux fedoraSRV45 7.2.0-61.fc46.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Aug 17 12:34:38 UTC 2026 x86_64 GNU/Linux

boris@fedoraSRV45:~$ mount | grep 'on / '
LiveOS_rootfs on / type overlay (rw,relatime,seclabel,lowerdir=/run/rootfsbase,upperdir=/run/overlayfs,workdir=/run/ovlwork,uuid=on)
 
boris@fedoraSRV45:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
LiveOS_rootfs  overlay   3.1G   25M  3.1G   1% /
devtmpfs       devtmpfs  7.6G     0  7.6G   0% /dev
tmpfs          tmpfs     7.6G   96K  7.6G   1% /dev/shm
efivarfs       efivarfs  256K  114K  137K  46% /sys/firmware/efi/efivars
tmpfs          tmpfs     3.1G   25M  3.1G   1% /run
/dev/vda3      btrfs      67G  6.2G   60G  10% /run/rootfsbase
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-resolved.service
/dev/vda3      btrfs      67G  6.2G   60G  10% /.snapshots
/dev/vda3      btrfs      67G  6.2G   60G  10% /home
tmpfs          tmpfs     7.6G  4.0K  7.6G   1% /tmp
/dev/vda2      ext4      2.0G  326M  1.5G  18% /boot
/dev/vda3      btrfs      67G  6.2G   60G  10% /var/cache
/dev/vda3      btrfs      67G  6.2G   60G  10% /var/log
/dev/vda1      vfat     1022M  8.0M 1015M   1% /boot/efi
tmpfs          tmpfs     1.6G   88K  1.6G   1% /run/user/1000
 
boris@fedoraSRV45:~$ lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sr0                                                                            
zram0  swap   1     zram0 1a27ea82-33c1-4e83-818c-9da7d6e0b738                [SWAP]
vda                                                                            
├─vda1 vfat   FAT32       59C6-BE04                            1014.1M     1% /boot/efi
├─vda2 ext4   1.0         3c0092f6-68b7-46c4-9443-c18b91a93298    1.5G    17% /boot
└─vda3 btrfs              a8856089-210e-42ff-8ba4-5f53f91a8dee   59.4G     9% /var/log
                                                                             /var/cache
                                                                             /home
                                                                             /.snapshots
                                                                             /run/rootfsbase

Main fedora Server Rawhide instance (as of 08/18/26)
 


No comments:

Post a Comment