This is a final draft been worked out through several sessions with Google AI Assistant . Same approach would work on Debian forky as well. All commands below are supposed to be issued with root privileges. In case of /boot/efi crash low level btrfs CLI won't help you to recover so creating boot as btrfs subvolume is not a critical part of btrfs flat system layout recovery would have to path via Phase 1 and Phase 2 see for instance Sparky-aptus-upgrade on Sparky Linux 2026 06 instance in UEFI mode
Final disk layout with btrfs flat topology
boris@debian13VM:~$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sr0 iso9660 Joliet Extension d-live 13.5.0 kd amd64 2026-05-16-09-42-04-00
vda
├─vda1 vfat FAT32 8FCE-9FB4 69M 11% /boot/efi
├─vda2 ext4 1.0 d61d53ab-cf84-46d9-81e3-03dc093713d0 1.4G 15% /boot
└─vda3 btrfs 86898dd4-44d9-4e7b-be5d-fa42a32561fa 54.8G 21% /.snapshots
/
boris@debian13VM:~$ sudo btrfs subvolume list /
[sudo] password for boris:
ID 258 gen 597 top level 5 path @snapshots
ID 259 gen 542 top level 258 path @snapshots/16/snapshot
ID 260 gen 548 top level 258 path @snapshots/17/snapshot
ID 261 gen 557 top level 258 path @snapshots/18/snapshot
ID 262 gen 558 top level 258 path @snapshots/19/snapshot
ID 263 gen 560 top level 258 path @snapshots/20/snapshot
ID 264 gen 565 top level 258 path @snapshots/21/snapshot
ID 265 gen 577 top level 258 path @snapshots/22/snapshot
ID 266 gen 600 top level 5 path @root_active
ID 267 gen 578 top level 258 path @snapshots/23/snapshot
ID 268 gen 596 top level 258 path @snapshots/24/snapshot
boris@debian13VM:~$ mount | grep @root_active
/dev/vda3 on / type btrfs (rw,noatime,compress=zstd:3,discard=async,space_cache=v2,subvolid=266,subvol=/@root_active)
boris@debian13VM:~$ mount | grep @snapshots
/dev/vda3 on /.snapshots type btrfs (rw,noatime,compress=zstd:3,discard=async,space_cache=v2,subvolid=258,subvol=/@snapshots)
=======================
Starting point
=======================
mkdir -p /mnt/btrfs_root
mount -o subvolid=5 /dev/vda3 /mnt/btrfs_root
mkdir -p /mnt/btrfs_root/btrfs_base
btrfs subvolume snapshot /mnt/btrfs_root/@rootfs /mnt/btrfs_root/btrfs_base/@root_active
mv /mnt/btrfs_root/btrfs_base/@root_active /mnt/btrfs_root/@root_active
rmdir /mnt/btrfs_root/btrfs_base
umount /mnt/btrfs_root
=================================
mkdir -p /mnt/system-root
mount -o subvol=@root_active /dev/vda3 /mnt/system-root
mount /dev/vda2 /mnt/system-root/boot
mount /dev/vda1 /mnt/system-root/boot/efi
for i in /dev /dev/pts /proc /sys /run; do mount -B $i /mnt/system-root$i; done
=================================
Setup @root_active
======= Add row subvol=@root_active ============
nano /mnt/system-root/etc/fstab
boris@debian13VM:~$ sudo cat /etc/fstab
# /etc/fstab: static file system information.
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vda3 during installation
# UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa / btrfs defaults,subvol=@rootfs 0 0
UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa / btrfs defaults,subvol=@root_active,compress=zstd,noatime 0 1
UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa /.snapshots btrfs subvol=@snapshots,compress=zstd,noatime 0 0
# /boot was on /dev/vda2 during installation
UUID=d61d53ab-cf84-46d9-81e3-03dc093713d0 /boot ext4 defaults 0 2
# /boot/efi was on /dev/vda1 during installation
UUID=8FCE-9FB4 /boot/efi vfat umask=0077 0 1
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
===============================================
chroot /mnt/system-root /bin/bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck
grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable
update-initramfs -u -k all
update-grub
exit
===============================
for i in /run /sys /proc /dev/pts /dev; do umount /mnt/system-root$i; done
umount /mnt/system-root/boot/efi
umount /mnt/system-root/boot
sed -i 's/rootflags=subvol=@rootfs/rootflags=subvol=@root_active/g' /boot/grub/grub.cfg
reboot
===============================
sudo update-grub
sudo mkdir -p /mnt/btrfs_base
sudo mount -o subvolid=5 /dev/vda3 /mnt/btrfs_base
sudo btrfs subvolume create /mnt/btrfs_base/@snapshots
sudo snapper -c root create-config /
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots
====== Add row subvol=@snapshots ===============
sudo nano /etc/fstab
boris@debian13VM:~$ sudo cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vda3 during installation
# UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa / btrfs defaults,subvol=@rootfs 0 0
UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa / btrfs defaults,subvol=@root_active,compress=zstd,noatime 0 1
UUID=86898dd4-44d9-4e7b-be5d-fa42a32561fa /.snapshots btrfs subvol=@snapshots, compress=zstd,noatime 0 0
# /boot was on /dev/vda2 during installation
UUID=d61d53ab-cf84-46d9-81e3-03dc093713d0 /boot ext4 defaults 0 2
# /boot/efi was on /dev/vda1 during installation
UUID=8FCE-9FB4 /boot/efi vfat umask=0077 0 1
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
==================================================
sudo systemctl daemon-reload
sudo mount -a
sudo chmod 750 /.snapshots
sudo umount /mnt/btrfs_base
sudo snapper -c root create --description "First baseline snapshot"
boris@debian13VM:~$ findmnt /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/vda3[/@root_active] btrfs rw,noatime,compress=zstd:3,discard=async,space_cache=v2,subvolid=266,subvol=/@root_active
boris@debian13VM:~$ findmnt /.snapshots
TARGET SOURCE FSTYPE OPTIONS
/.snapshots /dev/vda3[/@snapshots] btrfs rw,noatime,compress=zstd:3,discard=async,space_cache=v2,subvolid=258,subvol=/@snapshots
Kernel 7.0.13 has been back ported from Sid to Trixie
