我必须安装 Windows 10。由于安装遇到困难,我拔掉了前两个驱动器(其中包含 Fedora 数据)。因此,只需插入一个硬盘,我就能成功安装 Windows。
现在,我已插入所有驱动器。我能够使 Windows 正常启动,但 Fedora 不再启动。
这是我从 grub 中选择 Fedora 时出现的错误:
错误:没有这样的设备:3b9c12dc-6ed0-4e2f-a28b-3e0931ccfea2
错误:找不到文件“/vmlinuz-4.13.9-300.fc27.x86_64”。
错误:您需要先加载内核。
所以,我用谷歌搜索并找到了这个问题,但说实话,我并没有真正完全理解这个答案。不管怎样,我按下c
了 grub 命令行。当我ls
在命令行中 输入时,我看到:
(lvm/fedora_hdd-swap) (lvm/fedora_sdd-root) (lvm/fedora_sdd-home) (hd0) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1, gpt12) (hd1,gpt11) (hd2) (hd3) (hd3,gpt4) (hd3,gpt3) (hd3,gpt2) (hd3,gpt1)
现在,当我输入 时ls (lvm/fedora_hdd-root)/
,我确实看到了所有必需的 linux 文件,例如 /boot、/etc 等。所以我的文件是安全无害的,我假设我只需要正确配置 grub 吗?
当我返回 grub 并输入e
编辑 Fedora 列表时,我看到以下内容:
getparams 'Fedora (4.13.9-300.fc27.x86_64) 27 (Workstation Edition)
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=achi0,gpt2 3b9c12dc-6ed0-4e2f-a28b-3e0931ccfea2
else
search --no-floppy --fs-uuid --set=root 3b9c12dc-6ed0-4e2f-a28b-3e0931ccfea2
fi
我认为根据我在 grub 命令行中看到的内容,我应该相应地编辑列表。
答案1
GRUB 并不真正关心您的 Linux 根分区;它只关心您的 Linux 根分区。只有 Linux 内核关心这一点。 GRUB 要查找的是包含文件系统的分区/boot
。由于各种原因,GRUB 将其称为“GRUB 根文件系统”。
错误消息中的内核路径名error: file '/vmlinuz-4.13.9-300.fc27.x86_64' not found
没有/boot
前缀。这告诉我你/boot
可能是一个单独的文件系统,并且set root='hd0,gpt2'
GRUB 配置中用于引导 Fedora 的行告诉我它曾经是某个 GPT 分区磁盘上某个时间点的第二个分区。
如果您输入ls (lvm/fedora_hdd-root)/boot/
,您可能会发现它只是一个空目录。它充当实际/boot
文件系统的挂载点。
还有文件系统UUID,但错误消息error: no such device: 3b9c12dc-6ed0-4e2f-a28b-3e0931ccfea2
表明找不到它。
我的猜测是,在最好的情况下,驱动器检测顺序可能已经改变,以前的顺序hd0,gpt2
现在可能是hd3,gpt2
。
在最坏的情况下,您的/boot
分区实际上位于安装 Windows 10 的磁盘上,并且 Windows 安装覆盖了该分区。但/boot
更换分区相对容易:您需要使用启动菜单选项Troubleshooting
->Rescue a Fedora system
或inst.rescue
启动选项从 Fedora 安装介质启动到救援模式。
救援模式启动后,它应该为您提供命令提示符。如果一切顺利,您的 Fedora 系统应该已经在 下安装好了/mnt/sysimage
。因此,首先使用chroot /mnt/sysimage
命令,这样您就不必/mnt/sysimage
为所有路径名添加前缀,并且您将能够使用普通的包管理工具。
现在您可以创建一个新/boot
分区并挂载它,或者 - 因为您的 GRUB 显然可以读取 LVM 逻辑卷 - 只需将/boot
文件系统中应有的内容重新安装到/boot
根文件系统的目录中。
由于您显然正在使用基于 UEFI 的系统(因为您的所有分区都是 GPT 类型),这意味着/boot/efi
如果尚不存在,则只需创建一个空目录(作为 EFI 系统分区或 ESP 的挂载点) ,运行mount /boot/efi
,验证设置是否与/etc/default/grub
当前配置匹配,并使用 重新安装最新的内核包rpm --reinstall
。
内核包包含该/vmlinuz-*
文件,包安装过程将自动为其创建合适的 initramfs 文件。完成后,所有必须存在的重要文件/boot
现在都应该被恢复。内核包重新安装过程甚至应该为您更新实际的 GRUB 配置文件。
请注意,GRUB 有两个配置文件: 中的简化配置文件/etc/default/grub
和自动生成的实际配置文件(位于/boot/efi/EFI/fedora/grub.cfg
UEFI 系统上)。如果您在重新安装内核包后更新前者,则可以使用以下命令手动触发后者文件的更新:
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg