BTRFS on RaspberryPi OS 12 (bookworm)
It is best to follow these steps on a PC.
If you fresh install your RaspiOS, then boot RPI once to complete OS configuration.
Convert MBR to GPT (optional)
mbr2gpt can be found here .
# ./mbr2gpt /dev/sdX
# btrfs-convert /dev/sdX2
# mount /dev/sdX1 /mnt/bootfs
# mount /dev/sdX2 /mnt/rootfs
# cd /mnt/rootfs
# btrfs subvolume create @
# btrfs subvolume create @home
# btrfs subvolume create @log
# btrfs subvolume create @archives
# btrfs subvolume create @.snapshots
Remove old ext4 subvolume
# btrfs subvolume delete ext2_saved
Move everything to subvolumes
# cp -P lib @/lib
# cp -P sbin @/sbin
# rm -r lib/ sbin/
# mv home/* @home/
# rm -r home/
# for i in var boot etc opt media mnt srv tmp usr root bin dev proc run sys initrd.img vmlinuz; do mv $i @/$i; done
Update bootfs/cmdline.txt
# blkid /dev/sdX2
... root=PARTUUID=S0me-P4RTUU1D rootfstype=btrfs rootflags=subvol=@ fsck.repair=no ...
Update rootfs/@/etc/fstab
# rootfs
PARTUUID=S0me-P4RTUU1D / btrfs noatime,nodiratime,rw,relatime,ssd,discard=async,space_cache=v2,subvolid=257,subvol=/@ 0 0
PARTUUID=S0me-P4RTUU1D /home btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvolid=258,subvol=/@home 0 0
PARTUUID=S0me-P4RTUU1D /var/log btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvolid=259,subvol=/@log 0 0
PARTUUID=S0me-P4RTUU1D /var/cache/apt/archives btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvolid=260,subvol=/@archives 0 0
PARTUUID=S0me-P4RTUU1D /.snapshots btrfs rw,relatime,ssd,discard=async,space_cache=v2,subvolid=261,subvol=/@.snapshots 0 0