Hello all,
I tried to clone my btrfs installation to a logical volume of LVM (Logical Volume Manager). All my Linux installation are organized in an LVM volume group.
Calamares installs to the root subvolume of btrfs (subvolume id=5). That is very inconvenient, as I do not know any way to delete it when needed. If you change to another subvolume as default, the root subvolume can never be deleted.
So I configured subvolumes in openSUSE style, so that the default subvolume and later root mount will be a read-write snapshot.
Creating first custom subvolumes (mounted from another Linux install)
# sh ./cr_subvol_k.sh /dev/mapper/vg1-mlvm08
Create subvolume '/mnt/@@@'
Create subvolume '/mnt/@@@/.snapshots'
Create subvolume '/mnt/@@@/home'
Create subvolume '/mnt/@@@/opt'
Create subvolume '/mnt/@@@/srv'
Create subvolume '/mnt/@@@/tmp'
Create subvolume '/mnt/@@@/boot/grub/x86_64-efi'
Create subvolume '/mnt/@@@/boot/grub/i386-pc'
Create subvolume '/mnt/@@@/usr/local'
Create subvolume '/mnt/@@@/var/log'
Create subvolume '/mnt/@@@/var/opt'
Create subvolume '/mnt/@@@/var/spool'
Create subvolume '/mnt/@@@/var/tmp'
Create subvolume '/mnt/var/lib/machines'
Create a snapshot of '/mnt/@@@' in '/mnt/@@@/.snapshots/1/snapshot'
The home directory, temporary directories and log files are in special subvolumes and excluded from later snapshots and recoveries.
# btrfs subvolume list /mnt
ID 257 gen 2175 top level 5 path @@@
ID 258 gen 2177 top level 257 path @@@/.snapshots
ID 259 gen 2179 top level 257 path @@@/home
ID 260 gen 2181 top level 257 path @@@/opt
ID 261 gen 2183 top level 257 path @@@/srv
ID 262 gen 2185 top level 257 path @@@/tmp
ID 263 gen 2187 top level 257 path @@@/boot/grub/x86_64-efi
ID 264 gen 2189 top level 257 path @@@/boot/grub/i386-pc
ID 265 gen 2191 top level 257 path @@@/usr/local
ID 266 gen 2193 top level 257 path @@@/var/log
ID 267 gen 2195 top level 257 path @@@/var/opt
ID 268 gen 2197 top level 257 path @@@/var/spool
ID 269 gen 2199 top level 257 path @@@/var/tmp
ID 270 gen 2201 top level 5 path var/lib/machines
ID 271 gen 2203 top level 258 path @@@/.snapshots/1/snapshot
Set the snapshot as default subvolume:
# btrfs subv set-default 271 /mnt
Note that I use grub in my KaOS installation. The grub subvolumes are not necessary in a standard KaOS installation. I presume that grub will exclude binaries that must stay contiguous and aligned to the sector boundaries from the btrfs COW mechanism (Copy-on-Write).
Mount the subvolumes
# sh ./mnt_subvol_k.sh /dev/mapper/vg1-mlvm08
List the mounts
# mount -l | grep mlvm08
/dev/mapper/vg1-mlvm08 on /mnt type btrfs (rw,relatime,space_cache,subvolid=271,subvol=/@@@/.snapshots/1/snapshot) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/home type btrfs (rw,relatime,space_cache,subvolid=259,subvol=/@@@/home) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/srv type btrfs (rw,relatime,space_cache,subvolid=261,subvol=/@@@/srv) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/opt type btrfs (rw,relatime,space_cache,subvolid=260,subvol=/@@@/opt) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/tmp type btrfs (rw,relatime,space_cache,subvolid=262,subvol=/@@@/tmp) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/.snapshots type btrfs (rw,relatime,space_cache,subvolid=258,subvol=/@@@/.snapshots) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/boot/grub/x86_64-efi type btrfs (rw,relatime,space_cache,subvolid=263,subvol=/@@@/boot/grub/x86_64-efi) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/boot/grub/i386-pc type btrfs (rw,relatime,space_cache,subvolid=264,subvol=/@@@/boot/grub/i386-pc) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/usr/local type btrfs (rw,relatime,space_cache,subvolid=265,subvol=/@@@/usr/local) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/var/log type btrfs (rw,relatime,space_cache,subvolid=266,subvol=/@@@/var/log) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/var/opt type btrfs (rw,relatime,space_cache,subvolid=267,subvol=/@@@/var/opt) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/var/spool type btrfs (rw,relatime,space_cache,subvolid=268,subvol=/@@@/var/spool) [rt-kaosx-3]
/dev/mapper/vg1-mlvm08 on /mnt/var/tmp type btrfs (rw,relatime,space_cache,subvolid=269,subvol=/@@@/var/tmp) [rt-kaosx-3]
Copy the installation to the new device. Former snapshots are not needed and excluded.
# ls /media/sda12/. /mnt
/media/sda12/.:
bin boot btrfs dev etc home klauncherXM1859.1.slave-socket lib lib64 media mnt opt proc root root-image-pkgs.txt run sbin srv sys tmp usr var
/mnt:
boot home opt srv tmp usr var
#
# rsync -aHAX --exclude=/.snapshots /media/sda12/. /mnt &
[1] 2814
#
[1]+ Fertig rsync -aHAX --exclude=/.snapshots /media/sda12/. /mnt
List of scripts
# cat cr_subvol_k.sh
#!/usr/bin/sh
mount $1 /mnt
btrfs subv create /mnt/@@@
btrfs subv create /mnt/@@@/.snapshots
btrfs subv create /mnt/@@@/home
btrfs subv create /mnt/@@@/opt
btrfs subv create /mnt/@@@/srv
btrfs subv create /mnt/@@@/tmp
mkdir /mnt/@@@/boot
mkdir /mnt/@@@/boot/grub
btrfs subv create /mnt/@@@/boot/grub/x86_64-efi
btrfs subv create /mnt/@@@/boot/grub/i386-pc
mkdir /mnt/@@@/usr
btrfs subv create /mnt/@@@/usr/local
mkdir /mnt/@@@/var
btrfs subv create /mnt/@@@/var/log
btrfs subv create /mnt/@@@/var/opt
btrfs subv create /mnt/@@@/var/spool
btrfs subv create /mnt/@@@/var/tmp
mkdir /mnt/var
mkdir /mnt/var/lib
btrfs subv create /mnt/var/lib/machines
mkdir /mnt/@@@/.snapshots/1
btrfs subv snapshot /mnt/@@@ /mnt/@@@/.snapshots/1/snapshot
# cat mnt_subvol_k.sh
#!/usr/bin/sh
# set -x
mount $1 /mnt
mount $1 -o subvol=@@@/home /mnt/home
mount $1 -o subvol=@@@/srv /mnt/srv
mount $1 -o subvol=@@@/opt /mnt/opt
mount $1 -o subvol=@@@/tmp /mnt/tmp
mount $1 -o subvol=@@@/.snapshots /mnt/.snapshots
mount $1 -o subvol=@@@/boot/grub/x86_64-efi /mnt/boot/grub/x86_64-efi
mount $1 -o subvol=@@@/boot/grub/i386-pc /mnt/boot/grub/i386-pc
mount $1 -o subvol=@@@/usr/local /mnt/usr/local
mount $1 -o subvol=@@@/var/log /mnt/var/log
mount $1 -o subvol=@@@/var/opt /mnt/var/opt
mount $1 -o subvol=@@@/var/spool /mnt/var/spool
mount $1 -o subvol=@@@/var/tmp /mnt/var/tmp
To be continued