我必须安装 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 命令行中看到的内容,我应该相应地编辑列表。
GRUB 并不真正关心您的 Linux 根分区。只有 Linux 内核关心这一点。GRUB 想要找到的是包含
/boot
文件系统的分区。由于各种原因,GRUB 将其称为“GRUB 根文件系统”。错误消息中的内核路径名
error: file '/vmlinuz-4.13.9-300.fc27.x86_64' not found
没有/boot
前缀。这告诉我你/boot
可能是一个单独的文件系统,并且set root='hd0,gpt2'
引导 Fedora 的 GRUB 配置中的行告诉我它曾经是某个 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
分区相对容易替换:你需要从 Fedora 安装媒体启动到救援模式,使用启动菜单选项Troubleshooting
->Rescue a Fedora system
或inst.rescue
启动选项。救援模式启动后,它应该为您提供命令提示符。如果一切顺利,您的 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 系统上的自动生成的实际配置文件。如果您在重新安装内核包后更新前者,您可以使用以下命令手动触发后者文件的更新: