我尝试使用 ChatGPT 在 Fedora 39 中启用分数缩放,他推荐了以下内容:
# NVIDIA's proprietary driver requires DRM KMS to be disabled for Wayland to work.
# Edit the file /etc/default/grub and ensure the parameter nvidia-drm.modeset=1 is not set.
# If it is, change it to nvidia-drm.modeset=0 or remove it. Then update the grub configuration with:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
我这样做并运行了命令,却发现我的 GRUB 菜单只显示 Windows 启动管理器。我可以毫无问题地启动到 Windows,但现在 GRUB 找不到 Fedora。
我正在尝试的解决方案
我用 Fedora 创建了一个 USB 可启动驱动器,在进行了快速的 Google 搜索(以及更多的 ChatGPT,除了罪魁祸首)之后,我偶然发现了以下看似合理的解决方案(我的/dev
分区已经输入):
# Mount the root filesystem
sudo mount /dev/nvme0n1p7 /mnt/root
# Mount the EFI partition
sudo mount /dev/nvme0n1p6 /mnt/root/boot/efi
# Bind-mount the virtual filesystems
for dir in /dev /proc /sys /run; do
sudo mount --bind $dir /mnt/root$dir
done
设置完毕后/mnt
,我运行了sudo chroot /mnt
,它按预期工作了。我将/etc/default/grub
文件编辑回原来的样子,然后尝试grub.cfg
使用以下命令再次重新生成文件:grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
。尽管如此,我仍然收到以下错误:/usr/sbin/grub2-probe: error: cannot find a device for / (is /dev mounted?).
。我尝试了几种安装过程的组合,但没有成功,例如:
sudo mount --bind /dev /mnt/root/dev
sudo mount --bind /dev/pts /mnt/root/dev/pts
sudo mount --bind /dev/shm /mnt/root/dev/shm
sudo mount --bind /dev/disk /mnt/root/dev/disk
sudo mount --bind /proc /mnt/root/proc
sudo mount --bind /sys /mnt/root/sys
sudo mount --bind /run /mnt/root/run
我也尝试跟随本指南,它尝试解决类似的问题,并且该命令可以正常工作。我不知道我可能做错了什么。任何帮助表示赞赏!
lsblk 的输出
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 845151 843104 411.7M EFI System
/dev/nvme0n1p2 845824 878591 32768 16M Microsoft reserved
/dev/nvme0n1p3 878592 783736831 782858240 373.3G Microsoft basic data
/dev/nvme0n1p4 994082816 997033681 2950866 1.4G Windows recovery environmen
/dev/nvme0n1p5 997033984 1000214527 3180544 1.5G Windows recovery environmen
/dev/nvme0n1p6 783736832 785833983 2097152 1G EFI System
/dev/nvme0n1p7 785833984 977303551 191469568 91.3G Linux filesystem
/dev/nvme0n1p8 977303552 994080767 16777216 8G Linux swap
答案1
经过多次尝试和错误,我设法找到了解决问题的方法。我将其留在这里,以防有人偶然发现这个问题。
我的系统使用了 BRTFS 子卷,并且对于这种类型的文件系统来说,安装必要分区的步骤是不同的。这就是为什么我无法按照中的步骤操作的原因本指南。我的特殊情况是/dev/nvme0n1p6
在中有一个 EFI 分区root
,boot
在/dev/nvme0n1p7
.在后者中,有一个根子文件夹,其中包含经典的 Linux 文件夹(bin
、home
、opt
等)。
转到该部分使用 GRUB2 引导提示符寻找对我有用的解决方案。为了完整起见,下一部分将解释如何grub2-mkconfig
在正确使用 BRTFS 子卷的 chroot 系统中执行该命令。
chroot 到具有 BRTFS 子卷的系统
依照指示这个救星帖子出于绝望,尝试了多种安装过程的组合,我成功地正确地 chroot 到我的系统中:
sudo mkdir /mnt/sysimage
sudo mount -o subvol=root /dev/nvme0n1p7 /mnt/sysimage
sudo mount -o bind /dev /mnt/sysimage/dev
sudo mount -o bind /proc /mnt/sysimage/proc
sudo mount -o bind /sys /mnt/sysimage/sys
sudo mount -o bind /sys/firmware/efi/efivars /mnt/sysimage/sys/firmware/efi/efivars
sudo mount /dev/nvme0n1p6 /mnt/sysimage/boot/efi
sudo chroot /mnt/sysimage
笔记:如果您最终在 chroot 系统内没有网络连接,您可以按照 中详细的步骤操作同一个指南。
之后,我可以在我的 chroot 系统中执行以下命令:
dnf reinstall shim-* grub2-efi-* grub2-common
grub2-mkconfig -o /boot/grub2/grub.cfg
sync && exit
对于umount
所有事情,只需执行以下操作:
sudo umount /mnt/sysimage/sys
sudo umount /mnt/sysimage/proc
sudo umount /mnt/sysimage/dev
sudo umount /mnt/sysimage/boot/efi
sudo umount /mnt/sysimage/sys/firmware/efi/efivars
sudo umount /mnt/sysimage
/usr/sbin/grub2-probe: error: cannot find a device for / (is /dev mounted?)
这样做,运行后我不再收到错误grub2-mkconfig -o /boot/grub2/grub.cfg
,这是我问题的最初目的。然而,执行该命令并没有让我的 Fedora 返回 grub,即使在尝试了我在上找到的这些命令之后也是如此。这个要点:
# Check BIOS boot details [ Note: this command won't work if you are inside chroot. ]
efibootmgr -v
# In case you need to create new entry in BIOS
efibootmgr -c -d /dev/nvme0n1p1 -p 1 -L Fedora -l '\EFI\fedora\grubx64.efi' # or, shimx64.efi
使用 GRUB2 引导提示符
真正的解决方案最终出现在 Fedora 主要文档的这篇文章中,使用 GRUB2 引导提示符。我启动电脑,按下Esc
,进入 BIOS 菜单并选择 Fedora。当然,那里不会有任何东西,所以它让我看到了经典的黑屏grub>
。在那里,我执行了以下命令:
# Show all partitions
grub> ls
(hd0) (hd1) (hd0,gpt1) ...
# Try out every one of them until you find your EFI partition and your root partition. Mine was (hd2,gpt6) and (hd2,gpt7), respectively.
grub> ls (hd2,gpt6)/ # Had an EFI folder
grub> ls (hd2,gpt7)/ # Inside was the root folder and inside that, my beloved Fedora
# You set root to your EFI partition, mine being (hd2,gpt6)
grub> set root=(hd2,gpt6)
# And the following commands starting with the root partition, mine being (hd2,gpt7)
grub> linux (hd2,gpt7)/root/boot/vmlinuz-6.6.9-200.fc39.x86_64 root=/dev/nvme0n1p7 ro rootflags=subvol=root
grub> initrd (hd2,gpt7)/root/boot/initramfs-6.6.9-200.fc39.x86_64.img
# This command will finish the session and will boot up the chosen kernel and RAM filesystem
grub> boot
笔记:您需要找到要启动的内核 ( vmlinuz-...
) 和 RAM 文件系统 ( initramfs-...-.img
) 所在的确切路径。为此,您只需ls <your root partition>/root/
开始逐个文件夹导航即可。对我来说,向ls (hd2,gpt7)/root/boot/
我展示了我拥有的所有内核和 RAM 文件系统。我选择的是最新的,后缀为6.6.9-200.fc39.x86_64
.另外,请注意命令root=/dev/nvme0n1p7 ro rootflags=subvol=root
中的部分linux
。这对于 BRTFS 系统至关重要;如果没有它,系统将无法正确启动。当然,root=
必须设置为您自己的root
分区,而其余的保持不变。
在你的系统内部
到现在为止,您应该已经启动了丢失的旧系统。在里面,我打开一个终端并执行以下命令来恢复我的grub
,这样我就不必每次想登录 Fedora 时都执行上述过程。
# Back up your current GRUB configuration as a precaution:
sudo cp /boot/efi/EFI/fedora/grub.cfg /boot/efi/EFI/fedora/grub.cfg.bak
# Regenerate the GRUB configuration file with:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# Reinstall GRUB to ensure it's properly installed on the EFI partition:
sudo grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Fedora
然后我重新启动了我的电脑,由于某种奇怪的原因,我没有在我的 BIOS 启动菜单中找到 Fedora(直到现在才出现这种情况,它总是显示它,只是它只引导到屏幕grub>
)。我登录 Windows,再次重新启动,进入 BIOS 启动菜单,现在 Fedora 就在那里。我选择了它,我的电脑直接启动到它,而不进入菜单grub
,这确实很奇怪,但到目前为止它绝对适合我。我现在可以毫无问题地登录我的 Fedora。
与往常一样,请小心执行这些命令,并仔细检查您的特定系统和配置。