Windows 安装后,Fedora 不再启动。出现错误:未找到文件“/vmlinuz”。如何修复启动?

Windows 安装后,Fedora 不再启动。出现错误:未找到文件“/vmlinuz”。如何修复启动?

我必须安装 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 systeminst.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.cfgUEFI 系统上)。如果您在重新安装内核包后更新前者,则可以使用以下命令手动触发后者文件的更新:

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

相关内容