Booting from BTRFS with @ and @home subvolumes -- it works, but bootup is slow. Thoughts?

I really strongly prefer to use BTRFS with all my Linux installs whenever I can. (why? Because I like filesystem snapshots and transparent file compression.) I installed Clear Linux on EXT4 and then used btrfs-convert to change it to BTRFS; I used “btrfs balance start -mconvert=dup /” to set up duplicate file metadata for reliability purposes; I rsync’d the files into @ and @home subvolumes; I added an /etc/fstab file to mount the subvolumes in the correct folders; and I mounted the boot partition and edited the .conf files in /boot/loader/entries to include the arguments “ro rootflags=subvol=@”. All of this works fine, except for two issues:

  1. Partway through the hardware detection part of the bootup sequence, the bootup will hang for about a minute before proceeding to the login screen. There are no messages displayed that give me any idea what the computer is working on, or waiting for, during this time.

  2. When I updated the system a couple days ago, my edits to the /boot/loader/entries/*.conf files were overwritten and I had to manually edit them on another system again before Clear Linux would boot.

Does anyone have any idea what might be causing issue #1, and does anyone know how I can modify the code used to configure the /boot/loader/entries/*.conf files so it doesn’t overwrite existing entries?

1 Like

on clr-boot-manager manpage stated that you need to place it on /etc/kernel/cmdline.d

       /etc/kernel/cmdline.d/*.conf
           A set of files that will be used to modify the kernel  commandline.
           The  files can also be used to mask the vendor cmdline if the file‐
           name  matches  a  vendor  configuration  file  and  is  linked   to
           /dev/null.  The vendor configuration files are /usr/lib/kernel/cmd‐
           line‐* and /usr/share/kernel/cmdline.d/*.conf.

           The files should be in plain text format and each line will be  ap‐
           pended directly to the kernel commandline.

       /etc/kernel/cmdline‐removal.d/*.conf
           A  set  of files that will be used to modify the kernel commandline
           by removing string matches from the final consolidated  commandline
           (removal   happens   after   the  content  from  cmdline  and  cmd‐
           line.d/*.conf files are added). The matches are made on a per  line
           basis  so multiple different removals should be placed on their own
           line or file.

@djunaaja

Okay, I’m reading the manpage, but do they have any templates or samples for what the text inside these files should look like?

Also, do you have any idea why booting from a BTRFS subvolume would hang for a minute or so while booting from the BTRFS main volume wouldn’t?

Bump. Does anyone have samples for what the files in /etc/kernel/cmdline.d should look like?

Type in a .conf file, add the value you need
Eg:

// run as sudo
echo psi=1 >> /etc/kernel/cmdline.d/psi.conf
clr-boot-manager update
reboot
1 Like

@Kingfisher

Okay. I also need to modify some existing values, not just add new ones. I need to replace “rw” with “ro”, because it’s standard practice to access the true root of a BTRFS filesystem in read-only mode and then mount the subvolumes as read-write. How do I do this?

based on manpage, find options used for your kernel at /usr/lib/kernel/cmdline-[version_number].native
rw is a single line in the current latest, you can then try something similar

echo ro >> /etc/kernel/cmdline.d/ro.conf
echo rw >> /etc/kernel/cmdline‐removal.d/rw.conf
clr-boot-manager update
reboot
cat /proc/cmdline
1 Like

Oh. Somehow I was imagining something more complicated, involving RegEx or something like that. Is it really that simple?

@Kingfisher

It worked, thanks.

1 Like