Thursday, August 6, 2026

Fedora Server 44 OverlayFS BTRFS setup (Assisted by Google AI)

 Review 

OverlayFS is primarily used automatically by the system to mount read-only Btrfs system snapshots as writable environments. This allows you to safely boot into a broken system snapshot from GRUB, run tests, or perform a system restoration while keeping the actual snapshot pristine.

Original disk layout

boris@Server44D:~$ lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sr0                                                                            
zram0  swap   1     zram0 bf5880ed-22bf-4df2-b8e8-64b8fdc465ae                [SWAP]
vda                                                                            
├─vda1 vfat   FAT32       7E26-5D1C                            1014.1M     1% /boot/efi
└─vda2 btrfs              a93f8d3f-daa0-49b0-a00e-82fcdcc76154   65.5G                                                                                                                                              10% /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 
 
Feel free to compare it with setup of grub-btrfsd service as of  06/09/26 https://lxer.com/module/newswire/view/365461/index.html .  I mean that compilation of required sequences of commands might be different depending on date when you attempt just a basic setup for service mentioned above specifically on Fedora 44. The same applies to the section "DNF5 TRANSACTION SNAPSHOT AUTOMATION ENGINE"
===============================
sudo nano /etc/btrfs-assistant.conf
===============================
[Subvol-Mapping]
root = "snapshots,@,a93f8d3f-daa0-49b0-a00e-82fcdcc76154"
 
[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 rw'"
==============================
$ sudo dracut --add "dmsquash-live overlayfs" --force --no-hostonly --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

DNF5 TRANSACTION SNAPSHOT AUTOMATION ENGINE
================================================
sudo mkdir -p /etc/dnf/libdnf5-plugins/actions.d/
sudo nano /etc/dnf/libdnf5-plugins/actions.d/snapper.actions
Append lines
pre_transaction::::/usr/bin/bash /usr/local/bin/dnf5-snapper-helper pre
post_transaction::::/usr/bin/bash /usr/local/bin/dnf5-snapper-helper post
================================================
sudo nano /usr/local/bin/dnf5-snapper-helper
================================================
#!/bin/bash
STATE_FILE="/etc/snapper/configs/root.dnf_pre_id"
 
case "$1" in
    pre)
        # Capture raw snapshot digit without whitespace or newlines
        /usr/bin/snapper -c root create -t pre -p -d "DNF Transaction" -c number | tr -d '\n' > "$STATE_FILE"
        ;;
    post)
        if [ -s "$STATE_FILE" ]; then
            PRE_ID=$(cat "$STATE_FILE")
            /usr/bin/snapper -c root create -t post --pre-num "$PRE_ID" -d "DNF Transaction Complete" -c number
            rm -f "$STATE_FILE"
        fi
        ;;
esac
===============================================
sudo chmod +x /usr/local/bin/dnf5-snapper-helper
 
































RW instance to recover via Btrfs-Assistant
 
ssh boris@192.168.0.106
boris@192.168.0.106's password:  
Web console: https://Server44D:9090/ or https://192.168.0.106:9090/

Last login: Thu Aug  6 16:13:49 2026 from 192.168.0.81
boris@Server44D:~$ mount | grep -E 'on / type'
/dev/vda2 on / type btrfs (rw,relatime,seclabel,compress=zstd:1,discard=async,space_cache=v2,subvolid=267,subvol=/snapshots/6/snapshot)
 
boris@Server44D:~$ lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sr0                                                                            
zram0  swap   1     zram0 c17f6e59-5d8d-40b8-aba7-95e143ca5e91                [SWAP]
vda                                                                            
├─vda1 vfat   FAT32       7E26-5D1C                            1014.1M     1% /boot/efi
└─vda2 btrfs              a93f8d3f-daa0-49b0-a00e-82fcdcc76154   65.5G                             10% /home
                                                 /.snapshots
                                                 /run/rootfsbase
                                                 /

============================== 
Main instance report
==============================
boris@Server44D:~$ uname -a
Linux Server44D 7.1.6-201.fc44.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Aug  4 00:23:39 UTC 2026 x86_64 GNU/Linux
boris@Server44D:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda2      btrfs      74G  7.2G   66G  10% /
devtmpfs       devtmpfs  7.5G     0  7.5G   0% /dev
tmpfs          tmpfs     7.6G   12K  7.6G   1% /dev/shm
efivarfs       efivarfs  256K   85K  166K  34% /sys/firmware/efi/efivars
tmpfs          tmpfs     3.1G  1.5M  3.1G   1% /run
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/vda2      btrfs      74G  7.2G   66G  10% /.snapshots
/dev/vda2      btrfs      74G  7.2G   66G  10% /home
tmpfs          tmpfs     7.6G  4.0K  7.6G   1% /tmp
/dev/vda1      vfat     1022M  7.9M 1015M   1% /boot/efi
tmpfs          tmpfs     1.6G   84K  1.6G   1% /run/user/1000
 
boris@Server44D:~$ sudo .local/bin/btrview  
                a93f8d3f-daa0-49b0-a00e-82fcdcc76154 | 10% full                   
Subvolume Tree:                        Snapshot Tree:                             
<FS_TREE>                              @_backup_2026-08-06T13:23:55.046Z          
├── snapshots on: /.snapshots          ├── snapshot                               
│   ├── snapshot                       │   └── @_backup_2026-08-06T13:32:22.385Z  
│   ├── snapshot                       │       └── snapshot                       
│   ├── snapshot                       │           └── @ on: /                    
│   ├── snapshot                       │               ├── snapshot               
│   ├── snapshot                       │               ├── snapshot               
│   ├── snapshot                       │               └── snapshot               
│   ├── snapshot                       ├── snapshot                               
│   ├── snapshot                       ├── snapshot                               
│   └── snapshot                       ├── snapshot                               
├── @ on: /                            └── snapshot                               
│   ├── portables                      <FS_TREE>                                  
│   └── .snapshots on: /.snapshots     snapshots on: /.snapshots                  
├── @home on: /home                    @home on: /home                            
├── @_backup_2026-08-06T13:23:55.046Z  portables                                  
└── @_backup_2026-08-06T13:32:22.385Z  .snapshots on: /.snapshots  
 
boris@Server44D:~$ sudo btrfs subvolume list /
ID 256 gen 390 top level 5 path snapshots
ID 257 gen 406 top level 5 path @home
ID 258 gen 285 top level 5 path @_backup_2026-08-06T13:23:55.046Z
ID 259 gen 71 top level 268 path var/lib/portables
ID 260 gen 246 top level 268 path .snapshots
ID 261 gen 222 top level 256 path snapshots/1/snapshot
ID 262 gen 242 top level 256 path snapshots/2/snapshot
ID 263 gen 255 top level 256 path snapshots/3/snapshot
ID 264 gen 257 top level 256 path snapshots/4/snapshot
ID 265 gen 282 top level 256 path snapshots/5/snapshot
ID 266 gen 309 top level 5 path @_backup_2026-08-06T13:32:22.385Z
ID 267 gen 364 top level 256 path snapshots/6/snapshot
ID 268 gen 403 top level 5 path @
ID 269 gen 336 top level 256 path snapshots/7/snapshot
ID 270 gen 387 top level 256 path snapshots/8/snapshot
ID 271 gen 389 top level 256 path snapshots/9/snapshot

 
boris@Server44D:~$ findmnt -t btrfs
TARGET    SOURCE                FSTYPE OPTIONS
/         /dev/vda2[/@]         btrfs  rw,relatime,seclabel,compress=zstd:1,discard=async,space_cache=v2,subvolid=268,subvol=/@
├─/.snapshots
│         /dev/vda2[/snapshots] btrfs  rw,relatime,seclabel,compress=zstd:1,discard=async,space_cache=v2,subvolid=256,subvol=/snapshots
└─/home   /dev/vda2[/@home]     btrfs  rw,relatime,seclabel,compress=zstd:1,discard=async,space_cache=v2,subvolid=257,subvol=/@home


Thursday, July 23, 2026

Calamares graphical installer of pure Arch Linux and nested BTRFS Setup on Arch Linux

 Calam-Arch-Installer-2026-07.iso is a live ISO image featuring Linux Kernel 7.0.14 and the Calamares graphical installer, designed to simplify the installation of pure Arch Linux. You can download it directly from the https://sourceforge.net/projects/blue-arch-installer/files/arch-installer/Calam-Arch-Installer-2026-07.iso/download

Original disk layout

                  -`                     boris@devs-TDS8664
                .o+`                    ------------------
               `ooo/                    OS: Arch Linux x86_64
              `+oooo:                   Host: KVM/QEMU Standard PC (Q35 + ICH9, 2009) (pc-q35-11.0)
             `+oooooo:                  Kernel: Linux 7.1.4-1-cachyos
             -+oooooo+:                 Uptime: 15 mins
           `/:-:++oooo+:                Packages: 1549 (pacman)
          `/++++/+++++++:               Shell: bash 5.3.15
         `/++++++++++++++:              Display (QEMU Monitor): 1920x1080 in 15", 60 Hz
        `/+++ooooooooooooo/`            DE: KDE Plasma 6.7.3
       ./ooosssso++osssssso+`           WM: KWin (Wayland)
      .oossssso-````/ossssss+`          WM Theme: Breeze
     -osssssso.      :ssssssso.         Theme: Breeze (Light) [Qt], Breeze [GTK2/3]
    :osssssss/        osssso+++.        Icons: Breeze [Qt], breeze [GTK2/3/4]
   /ossssssss/        +ssssooo/-        Font: Noto Sans (12pt) [Qt], Noto Sans (12pt) [GTK2/3/4]
 `/ossssso+/:-        -:/+osssso+-      Terminal: /dev/pts/1 10.4p1
`+sso+:-`                 `.-/+oso:     CPU: Intel(R) Xeon(R) E5-2690 v3 (10) @ 2.59 GHz
`++:.                           `-/+/    GPU: RedHat Virtio 1.0 GPU
.`                                 `/    Memory: 2.03 GiB / 15.24 GiB (13%)
                                        Swap: Disabled
                                        Disk (/): 11.10 GiB / 74.50 GiB (15%) - btrfs
                                        Local IP (enp1s0): 192.168.0.82/24
                                        Locale: en_US.UTF-8
                                         
                                                                 
                                                                 
 

[boris@devs-TDS8664 ~]$ lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sr0                                                                            
vda                                                                            
├─vda1 vfat   FAT32       8FD4-D237                               510M     0% /boot/efi
└─vda2 btrfs              78b04a2b-616e-45e4-93f4-fe263ae7b072   62.2G    15% /run/BtrfsAssistant/78b04a2b-616e-45e4-93f4-fe263ae7b072
                                                                             /home
                                                                             /var/cache
                                                                             /var/log
                                                                             /

Phase 1 follows exactly https://lxer.com/module/newswire/view/358937/index.html 

Phase 2 differs from Phase 2 https://lxer.com/module/newswire/view/366171/index.html  

$ sudo pacman -S btrfs-assistant grub-btrfs grub-btrfs-support

$ sudo pacman -S inotify-tools

Systemd, sd-vconsole switches the initramfs boot environment from a classic BusyBox script setup over to a systemd-managed process.

The systemd hook completely replaces both base and udev. It builds an initramfs that starts a mini-systemd instance to handle device discovery and orchestration instead of relying on older BusyBox shell scripts. Without base, you drop the traditional BusyBox emergency recovery shell. If the system undergoes a catastrophic boot failure, you will instead drop into a systemd-managed emergency shell. Because microcode is listed after autodetect in your configuration,
mkinitcpio will only pack the microcode matching your specific local processor model. If you had placed it before autodetect, it would build a universal image containing every Intel and AMD microcode patch available. This permits you to completely strip out any initrd=...-ucode.img references out of your bootloader configuration (like systemd-boot or GRUB) because the microcode is safely nested directly inside the unified image. HOOKS below represents a modern, optimized, pure systemd-based initramfs layout that strips away legacy configuration defaults

=============================================
sudo sed -i 's/^HOOKS=(.*/HOOKS=(systemd autodetect microcode modconf kms keyboard sd-vconsole block filesystems fsck)/' /etc/mkinitcpio.conf
sudo vim /etc/mkinitcpio.conf
sudo mkinitcpio -P
=============================================
Now --efi-diretory points to /boot/efi rather then /boot which is default  config provided by archinstall, what results critical files for booting to be located on fat32 FS out of btrfs volume on which "/" is mounted. 
=============================================
$ sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi  --bootloader-id=grub --recheck
$ sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi  --removable --recheck
=============================================
sudo systemctl edit --full grub-btrfsd.service
sudo systemctl enable --now grub-btrfsd.service
sudo grub-mkconfig -o /boot/grub/grub.cfg
 

[boris@devs-TDS8664 ~]$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda2      btrfs      75G   12G   63G  16% /
devtmpfs       devtmpfs  7.6G     0  7.6G   0% /dev
tmpfs          tmpfs     7.7G     0  7.7G   0% /dev/shm
efivarfs       efivarfs  256K   73K  179K  29% /sys/firmware/efi/efivars
tmpfs          tmpfs     3.1G  1.3M  3.1G   1% /run
tmpfs          tmpfs     7.7G  320K  7.7G   1% /tmp
none           tmpfs     1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
/dev/vda2      btrfs      75G   12G   63G  16% /var/log
/dev/vda2      btrfs      75G   12G   63G  16% /var/cache
/dev/vda2      btrfs      75G   12G   63G  16% /home
/dev/vda1      vfat      511M  992K  511M   1% /boot/efi
tmpfs          tmpfs     1.6G  100K  1.6G   1% /run/user/1000
/dev/vda2      btrfs      75G   12G   63G  16% /run/BtrfsAssistant/78b04a2b-616e-45e4-93f4-fe263ae7b072
 
[boris@devs-TDS8664 ~]$ findmnt /
TARGET SOURCE        FSTYPE OPTIONS
/      /dev/vda2[/@] btrfs  rw,noatime,compress=lzo,discard=async,space_cache=v2,subvolid=270,subvol=/@
[boris@devs-TDS8664 ~]$ findmnt /home
TARGET SOURCE            FSTYPE OPTIONS
/home  /dev/vda2[/@home] btrfs  rw,noatime,compress=lzo,discard=async,space_cache=v2,subvolid=257,subvol=/@home
[boris@devs-TDS8664 ~]$ findmnt /var/log
TARGET   SOURCE           FSTYPE OPTIONS
/var/log /dev/vda2[/@log] btrfs  rw,noatime,compress=lzo,discard=async,space_cache=v2,subvolid=259,subvol=/@log
[boris@devs-TDS8664 ~]$ findmnt /var/cache
TARGET     SOURCE             FSTYPE OPTIONS
/var/cache /dev/vda2[/@cache] btrfs  rw,noatime,compress=lzo,discard=async,space_cache=v2,subvolid=258,subvol=/@cache
[boris@devs-TDS8664 ~]$ sudo btrfs subvolume list /
[sudo] password for boris:  
ID 256 gen 251 top level 5 path @_backup_2026-07-23T08:00:11.159Z
ID 257 gen 398 top level 5 path @home
ID 258 gen 330 top level 5 path @cache
ID 259 gen 398 top level 5 path @log
ID 260 gen 23 top level 270 path var/lib/portables
ID 261 gen 23 top level 270 path var/lib/machines
ID 262 gen 342 top level 270 path .snapshots
ID 263 gen 174 top level 262 path .snapshots/1/snapshot
ID 264 gen 189 top level 262 path .snapshots/2/snapshot
ID 265 gen 193 top level 262 path .snapshots/3/snapshot
ID 266 gen 206 top level 262 path .snapshots/4/snapshot
ID 267 gen 210 top level 262 path .snapshots/5/snapshot
ID 268 gen 215 top level 262 path .snapshots/6/snapshot
ID 269 gen 248 top level 262 path .snapshots/7/snapshot
ID 270 gen 398 top level 5 path @
ID 271 gen 259 top level 262 path .snapshots/8/snapshot
ID 272 gen 284 top level 262 path .snapshots/9/snapshot
ID 273 gen 296 top level 262 path .snapshots/10/snapshot
ID 274 gen 326 top level 262 path .snapshots/11/snapshot
ID 275 gen 330 top level 262 path .snapshots/12/snapshot
 
====== Setup btrview============
$ sudo pacman -Syu python-pipx
$ pipx install --system-site-packages btrview
$ sudo ~/.local/bin/btrview
$ sudo ln -s ~/.local/bin/btrview /usr/local/bin/btrview

[boris@devs-TDS8664 ~]$ sudo btrview
78b04a2b-616e-45e4-93f4-fe263ae7b072 | 15% full   
Subvolume Tree:            Snapshot Tree:         
<FS_TREE>                  snapshot               
├── @ on: /                └── @ on: /            
│   ├── .snapshots             ├── snapshot       
│   │   ├── snapshot           └── snapshot       
│   │   ├── snapshot       <FS_TREE>              
│   │   ├── snapshot       @home on: /home        
│   │   ├── snapshot       @cache on: /var/cache  
│   │   ├── snapshot       @log on: /var/log      
│   │   ├── snapshot       portables              
│   │   ├── snapshot       machines               
│   │   ├── snapshot       .snapshots             
│   │   ├── snapshot       snapshot               
│   │   ├── snapshot       snapshot               
│   │   ├── snapshot       snapshot               
│   │   ├── snapshot       snapshot               
│   │   ├── snapshot       snapshot               
│   │   ├── snapshot       snapshot               
│   │   └── snapshot       snapshot               
│   ├── portables          snapshot               
│   └── machines           snapshot               
├── @home on: /home        snapshot               
├── @cache on: /var/cache  snapshot               
└── @log on: /var/log      snapshot               

Another way to verify btrview power
 
[boris@devs-QWE8664 ~]$ sudo btrview
                b26aa281-31e9-4d48-a79a-7521972614ae | 15% full                   
Subvolume Tree:                        Snapshot Tree:                             
<FS_TREE>                              @_backup_2026-07-24T09:30:05.510Z          
├── @ on: /                            ├── snapshot                               
│   ├── .snapshots                     │   └── @_backup_2026-07-24T09:35:12.899Z  
│   │   ├── snapshot                   │       ├── snapshot                       
│   │   ├── snapshot                   │       │   └── @ on: /                    
│   │   ├── snapshot                   │       │       ├── snapshot               
│   │   ├── snapshot                   │       │       ├── snapshot               
│   │   ├── snapshot                   │       │       └── snapshot               
│   │   ├── snapshot                   │       └── snapshot                       
│   │   ├── snapshot                   ├── snapshot                               
│   │   ├── snapshot                   ├── snapshot                               
│   │   └── snapshot                   └── snapshot                               
│   ├── portables                      <FS_TREE>                                  
│   └── machines                       @home on: /home                            
├── @_backup_2026-07-24T09:30:05.510Z  @cache on: /var/cache                      
├── @home on: /home                    @log on: /var/log                          
├── @cache on: /var/cache              portables                                  
├── @log on: /var/log                  machines                                   
└── @_backup_2026-07-24T09:35:12.899Z  .snapshots