Problem with btrfs and 2nd kernel

Last week I reinstalled Manjaro (still from 21-1-6.iso) (had something else on it before). Thought a no install would be a good opportunity to finally move to btrfs. But again I have the same problem as with my last try with btrfs a long time ago: As long as I only want to boot from the one kernel that is active after the installation (in this case 5.13) everything worked. However, since I installed the last LTS kernel I intended to use, the problem with GRUB_DEFAULT=saved (which was preset and what I wanted) came up again immediately. Only that after that the boot no longer worked. The system wanted to boot into the automatically created snapshot by Timeshift.
Now I know that with btrfs GRUB_DEFAULT=saved is not usable (grubenv problem). In the past I had created an ext4 boot partition, but that caused other problems. So this time I specified the kernel to boot with GRUB_DEFAULT=2 (in my list then the 5-10 LTS kernel), in the hope that at least that works. Negative! After hours then back to ext4.
What can I do now to persuade Grub to boot the kernel that I want? Please no suggestions how not to use Grub!. I would expect a freshly installed system to work so far.

Here are the settings in the Grub directly after the Installtion, without changes from me:

GRUB_DEFAULT=saved
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=hidden
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet udev.log_priority=3"
GRUB_CMDLINE_LINUX=""

# If you want to enable the save default function, uncomment the following
# line, and set GRUB_DEFAULT to saved.
GRUB_SAVEDEFAULT=true

# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y

# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console

# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command 'videoinfo'
GRUB_GFXMODE=auto

# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true

# Uncomment this option to enable os-prober execution in the grub-mkconfig command
GRUB_DISABLE_OS_PROBER=false

# Uncomment and set to the desired menu colors.  Used by normal and wallpaper
# modes only.  Entries specified as foreground/background.
GRUB_COLOR_NORMAL="light-gray/black"
GRUB_COLOR_HIGHLIGHT="green/black"

# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/usr/share/grub/background.png"
GRUB_THEME="/usr/share/grub/themes/manjaro/theme.txt"

# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"

# Uncomment to ensure that the root filesystem is mounted read-only so that
# systemd-fsck can run the check automatically. We use 'fsck' by default, which
# needs 'rw' as boot parameter, to avoid delay in boot-time. 'fsck' needs to be
# removed from 'mkinitcpio.conf' to make 'systemd-fsck' work.
# See also Arch-Wiki: https://wiki.archlinux.org/index.php/Fsck#Boot_time_checking
#GRUB_ROOT_FS_RO=true

I use BTRFS, Grub and different kernels bootable by Grub without problems. Is your /boot folder contained into your / → root subvolume ? When you use UEFI boot where is the FAT mountpoint of your UEFI?

I use

GRUB_SAVEDEFAULT=false

and in GRUB_DEFAULT the number of the bootmenu entry or his name like

GRUB_DEFAULT="Manjaro Linux (Kernel: 5.10.79-1-MANJARO x64 - recovery mode)"

And please show your FSTAB

Mine:

# Swap
UUID=06686a06-c069-49f7-86e4-7a962740b364	none			swap		defaults									0 0

# UEFI
UUID=447C-E2BC					/boot/efi		vfat		defaults,noatime,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8		0 2

# System
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a       /btrfs                  btrfs           defaults,noatime,compress-force=zstd:5,subvolid=5				0 0
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a	/			btrfs		defaults,noatime,compress-force=zstd:5,subvol=@					0 0
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a	/home	  		btrfs		defaults,noatime,compress-force=zstd:5,subvol=@home				0 0
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a	/var	   		btrfs		defaults,noatime,nodatacow,subvol=@var						0 0
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a	/.snapshots		btrfs		defaults,noatime,compress-force=zstd:5,subvol=@snapshots/root			0 0
UUID=26c8751d-2747-4a4d-b857-32c82d67b20a	/home/.snapshots	btrfs		defaults,noatime,compress-force=zstd:5,subvol=@snapshots/home			0 0

# var/lib mount into subvol=@
/usr/var/lib                                    /var/lib                none            defaults,bind                                                                   0 0

1.) my UEFI is mounted on /boot/efi thus the /boot folder remains to my root subvolume @ mounted at ‘/’. That’s impotant then only in this way you snapshot all your installed kernels in /boot within a snapshot of your root subvolume.
2.) look at my mount options of “’/”. You see i only use “subvol=@” here and only that one. Don’t use “subvolid=XXX” here.

As far as I can tell from memory (I currently have it installed in ext4 again), Grub is on the system partition under /boot/grub/. At least not on an ext4 partition, which would make using GRUB_DEFAULT=saved from necessary. So I can not make any changes.

I can’t do that now because, as I said, I’m not currently on btrfs.

ok, dann beim nächsten Mal :wink: Habe hier im Forum auch mein Setup genauer erklärt, nutze allerdings Snapper und nicht Timeshift.

ok, then next time :slight_smile: I also explained my setup in more detail here in the forum, but I use Snapper and not Timeshift.

That, in turn, explains a lot.
However, I can’t implement the suggestions at the moment, only make a note of them. I have a clean ext4 installation at the moment, which I don’t want to kill right now just to try it out. I don’t have the time at the moment.

Some time on the WEB you can find suggestions that we can mount on /boot the UEFI bios partition within BTFS. And that’s wrong. Anything into /boot and /boot/grub and so on must remain on the root subvolume, mostly called @.

I just wonder why using btrfs in a perfectly normal way causes such pull-ups. it can’t be. Will probably be stuck on ext4 until it is no longer supported at some point. Sorry, am a bit frustrated at the moment (has to do with RL as well)…

I can’t say for sure now, it may have been @. Should have made a note of it :frowning: At least that was what Manjaro set up by default. You’d think that’s how it’s supposed to work, right?

I’am using the combination of BTRFS, Grub, Snapper, Snap-Pac and Snap-Sync on actually 5 different machines, now about 2 years without any problems. Except: grub’s GRUB_SAVEDEFAULT feature.

I am very happy for you :slight_smile:

Sorry, i don’t know how Manjaro’s default setup is made. I clone my systems or setup it manualy by hand. In this way i get what i want.

But for sure: the parts into /boot folder must be snapshotted within a snapshot of @ = root system. Otherwise a rollback into an older snapshot wont work, because there exists then the posibility that the older installed kernel’s are deinstalled. When we include our currently installed kernel files into each snapshot of @ = root then we ensure later on a rollback we can find and boot the right kernel files correspondening to our system into as example /etc, /usr and so on. If not any older snapshot is broken if Manjaro descide to remove an older kernel.

I have found the solution: I continue to use the old ext4, because I don’t want to have to go through all this hassle after a fresh install with a different filesystem to be able to use basic functions.

Thanks for your effort :+1:t2:

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.