我的 grub 安装最近坏了。我尝试通过从我的 Ubuntu 发行版和 Arch Linux 发行版运行以下命令来修复它:
sudo os-prober
sudo grub-mkconfig /boot/grub/grub.cfg
sudo grub-install --efi-directory=/boot/EFI /dev/nvme0n1
现在 grub 再次显示我安装的所有操作系统,我可以使用它启动到我安装的两个操作系统。然而,一个菜单项仍然不允许我启动相应的 Linux 发行版。当我选择它时,笔记本电脑的开始屏幕(一个大的联想图标)出现,之后没有任何反应。您是否有任何提示我如何解决此问题或收集有关其无法启动原因的更多信息?
不从以下位置加载的 grub 菜单条目/boot/grub/grub.cfg
:
menuentry 'Arch Linux (rolling) (on /dev/nvme0n1p2)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-c53daa31-996c-468d-bd57-df5b73cb87cc' {
savedefault
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
else
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
fi
linux /vmlinuz-linux root=UUID=c53daa31-996c-468d-bd57-df5b73cb87cc rw loglevel=3 quiet
initrd /intel-ucode.img
}
我用 blkid 仔细检查了 UUID 是否53daa31-996c-468d-bd57-df5b73cb87cc
对应于正确的驱动器 ( /dev/nvme0n1p5
),并且命令中的 UUIDsearch
对应于/dev/nvme0n1p1
EFI Boot。
编辑:我按照@Recct的建议删除了“安静”,并将日志级别增加到7。然后我收到下图中的错误,我认为最相关的部分如下:
No filesystem could mount root, tried:
Kernell panic - not syncing VFS: Unable to mount root fs on unknown-block(0, 0)
编辑2:
现在我已经成功第二次将其他发行版添加到 grub.cfg 文件中,这次它启动了(我不太明白我做了什么),将 /initramfs-linux.img 添加到 initrd 命令中是本质的改变。
据我了解,该文件应该由 grub-mkconfig 基于 /etc/grub.d 和 /etc/default/grub 自动生成。如何更改 /etc/grub.d 中的设置以永久修复此问题?
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c53daa31-996c-468d-bd57-df5b73cb87cc' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=UUID=c53daa31-996c-468d-bd57-df5b73cb87cc rw loglevel=7
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux.img
}
submenu 'Advanced options for Arch Linux' $menuentry_id_option 'gnulinux-advanced-c53daa31-996c-468d-bd57-df5b73cb87cc' {
menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-c53daa31-996c-468d-bd57-df5b73cb87cc' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=UUID=c53daa31-996c-468d-bd57-df5b73cb87cc rw loglevel=3 quiet
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-c53daa31-996c-468d-bd57-df5b73cb87cc' {
savedefault
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=UUID=c53daa31-996c-468d-bd57-df5b73cb87cc rw loglevel=3 quiet
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux-fallback.img
}
menuentry 'Arch Linux, with Linux linux (recovery mode)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-recovery-c53daa31-996c-468d-bd57-df5b73cb87cc' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod fat
search --no-floppy --fs-uuid --set=root 0DD8-ECF1
echo 'Loading Linux linux ...'
linux /vmlinuz-linux root=UUID=c53daa31-996c-468d-bd57-df5b73cb87cc rw single
echo 'Loading initial ramdisk ...'
initrd /intel-ucode.img /initramfs-linux-fallback.img
}
}