After upgrading to kernel 6.17.12 my laptop won’t boot.
The main error shown in the textual plymouth screen is about dev-gpt/x2droot.device and there is no way to enter a working console. After pressing Enter, an error is shown in red Failed to connect to system scope bus via local transport: No such file or directory.
This is also happening to me after an automated boot. Going back to 6.17.11 makes things functional… but the nonfree nvidia drivers don’t work. For me the failure is “Job dev-gpt\x2dauto\x2droot.device/start” times out. I can’t make any sense of why it failed.
systemd seems to suddenly be able to figure out with is the root filesystem with 6.17.12. The root for me is /dev/sda3… a btrfs with multiple subvolumes (set up by an earlier fedora installer… prior to Fedora 41.) The partition named ‘root’ is not the btrfs “default”. (In fact, the default was set to something that doesn’t exist.)
By booting to the working 6.17.11 kernel, I did: btrfs subvolume set-default / and rebooted. However, this didn’t seem to change things.
I then rebooted to 6.17.12 but added root=/dev/sda3… and this gets the system to boot. But that’s just a workaround.
After having set the btrfs default… for an unrelated reason I ran sudo grub2-mkconfig -o /boot/grub2/grub.cfg and it added options root=UUID=**redacted-uuid** ro rootflags=subvol=root to each kernel conf file (/boot/loader/entries/*.conf).
So, inspecting logs… my older kernels would always boot with these flags enabled. However, for some unknown reason, the root= flag was missing for the new kernel.
I checked and the root=UUID part is missing for the 6.17.12 entry, but present for earlier versions. Manually adding it is enough for the system to boot without further actions.
When you next do an update that installs a new kernel check to see if the root= is dropped before you reboot. If it does get removed there is someiong odd your system that we can investigate.
Thank you, the command sudo grub2-mkconfig -o /boot/grub2/grub.cfg posted by @gabrbedd worked well. As you said, it’s worth keeping an eye for future kernel upgrades.
@steko glad it helped!! I suspect there’s a bug somewhere that causes grub2-mkconfig sometimes do the wrong thing. Either a race condition or post-install process that didn’t complete. I’ll do a little sniffing around to see if I can figure it out.
Just for the record, I had the same problem already with kernel 6.17.8-300.fc43.x86_64
when I tried to boot it on the 19th of November. I booted back to 6.17.7-300 and almost forgot about it. Then the same happened with 6.17.9-300.fc43 and 6.17.12-300.fc43.
So, two days ago, 6.17.7-300 being the newest kernel I was able to use, I finally decided to mount my hard drive in rescue mode when 6.17.12 fails to start and copy the suggested /run/initramfs/rdsosreport.txt there and took a picture of the failing startup screen for reporting, but found this thread and checked the
grub2-mkconfig -o /boot/grub2/grub.cfg
solution, and it worked for me too.
Thanks.
Here, the ASCII double quotes were replaced by opening and closing double quotes when I view your post on this iPad, but are correct in the quote. Auto-correction across different browsers/OS’s/editors has been inserting bugs in Linux configurations files and shell scripts for years
you need to provide more details to help us understand why this problem keeps reappearing.
The “solution” using grubby just changes the entries for the specified kernels, so the missing root= must be due to a more basic “something” that needs fixing so new kernels will get the fix without manual intervention. Here:
% sudo grep -R root= /etc/grub.d/
/etc/grub.d/10_linux:# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
/etc/grub.d/10_linux: local cmdline="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
/etc/grub.d/10_linux: set kernelopts="root=${LINUX_ROOT_DEVICE} ro ${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
/etc/grub.d/10_linux: linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
/etc/grub.d/20_linux_xen:# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter
/etc/grub.d/20_linux_xen: ${module_loader} ${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
/etc/grub.d/30_os-prober: multiboot /boot/gnumach.gz root=device:${mach_device}
Assuming your system has the same entries,
could the btrfs on multiple devices apply to your system?
does your /etc/fstab entry for the root filesystem provide a UUID?
Yes, I have the same exact output from sudo grep -R root= /etc/grub.d/
This is my /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Jun 11 08:33:24 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/sda3 / btrfs subvol=root,compress=zstd:1 0 0
UUID=9986d3b1-0a87-4030-b3f5-489fa10ef17f /boot ext4 defaults 1 2
UUID=744C-7883 /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/sda3 /home btrfs subvol=home,compress=zstd:1 0 0
Apparently the root filesystem doesn’t provide a UUID, only /boot has one
I can’t check what happens before reboot because the upgrade is installed through a full reboot - as is normal with Fedora system upgrades afaik
You should be able to edit your fstab to provide the UUID for / and /home. You can get the UUID for /dev/sdc using Gnome Disks or lsblk. As it happens, one of my systems has root on /dev/sdc3:
AFAICT, the grub stuff all gets updated BEFORE you reboot. There’s a trigger on a new kernel that calls /bin/kernel-install and through a chain of responsibilites lands on /usr/bin/grubby. Inside grubby it lands on the function update_bls_fragment(). And inside this function is some logic that, to me, smells bad.
Specifically, it appears to completely ignore /etc/fstab and there’s a strange relationship between /etc/defaults/grub and /etc/kernel/cmdline . In particular, it looks like things can get out of whack if /etc/default/grub has a non-empty GRUB_CMDLINE_LINUX.
@steko , can you please post the contents of /etc/kernel/cmdline and /etc/default/grub ?