我一直在通过卸载所有驱动器来清理笔记本电脑,现在当我打开系统时,它说找不到启动介质。我已经用 Windows 10、Kali linux 和 ubuntu 进行了三次启动。标准硬盘中装有ubuntu和windows 10,SSD中装有kali。我是否弄乱了 uefi 启动分区?之前在标准硬盘中设置了UEFI启动分区。我已经在 BIOS 设置中打开了 UEFI 启动。我怎样才能再次恢复我的启动?我还尝试在 BIOS 中添加 UEFI 启动菜单。但它显示“未找到媒体”。无法添加启动菜单。
答案1
什么地方出了错
仅卸载文件系统根本不会产生任何持久影响,因为/etc/fstab
每次启动时所有内容都会根据内核启动选项、initramfs 设置和内容进行安装。
我认为更改 BIOS 启动设置是更可能的原因。此外,一些 UEFI 固件将“帮助”清除涉及不再可检测到的磁盘的 UEFI 启动设置,以防止过时的启动变量弄乱设置 NVRAM。因此,如果您从笔记本电脑上物理移除磁盘,然后在没有安装磁盘的情况下启动笔记本电脑,则可能就是这个原因。
UEFI 启动变量
本机 UEFI 引导样式要求正确设置某些 UEFI 引导变量。如果您刚刚将系统启动方式从传统 BIOS 切换到 UEFI,则不太可能出现这种情况。如果这些变量不存在,UEFI 固件仅在 EFI 系统分区(简称 ESP)或可移动介质上的任何可访问 FAT 分区上查找特定的后备/可移动介质引导加载程序文件。在 64 位 x86 硬件上,此引导加载程序文件名将相\EFI\BOOT\bootx64.efi
对于相关 FAT 分区的根目录。
\EFI\BOOT\bootx64.efi
因此,如果磁盘上没有 UEFI 启动变量,则该磁盘无法以 UEFI 本机样式启动。很简单。如果当前没有包含此类文件的可用磁盘,您将收到No media found
错误消息。
UEFI 引导变量可以指定其他引导加载程序,ESP 分区上预期的目录结构旨在允许多个引导加载程序共存。
例如,大多数 Linux 发行版会将其 UEFI 引导加载程序放置在\EFI\<name of distribution>\shimx64.efi
(如果使用 shim 引导加载程序支持安全引导,这是常见的解决方案)或者\EFI\<name of distribution>\grubx64.efi
不需要安全引导支持。 Ubuntu 和 Kali 都应该使用这种模式。
Windows 10 的 UEFI 引导加载程序将位于\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
.
修复和解决方法
如果您的 UEFI 固件设置(“BIOS 设置”,尽管将 UEFI 称为 BIOS 有点用词不当)包含“从文件引导”选项,则您应该能够选择上述引导加载程序文件之一来引导相应的操作系统……但这本身并不是一个持久的修复。
如果你这样做,我建议你先启动Windows 10,因为它似乎具有“自我修复”功能,如果它似乎丢失了,它会自动重写其UEFI启动变量......可能会覆盖其他启动变量操作系统,除非您让 Windows 为自己保留第一个 UEFI 启动变量(称为Boot0000
)。或者,您可以从 Windows 10 安装介质启动,然后选择“修复计算机”以自动修复 UEFI 启动变量,如果 Windows UEFI 启动加载程序似乎不起作用,也可能修复它。
Windows 10 修复后,是时候尝试启动您的 Linux 安装之一了,可以使用 UEFI 设置中的“从文件启动”选项(如果有),或者从 Linux 安装介质启动到救援,或者使用Linux 实时启动介质提供完全独立的环境。到达那里后,您应该能够使用该efibootmgr
命令为 Linux 安装重新创建任何丢失的引导变量。首先阅读手册页,它有很好的示例:man efibootmgr
。
Windows 10 还有一个用于编辑 UEFI 启动变量的本机命令:bcdedit
。您必须以管理员身份运行命令提示符才能使用它,而且我发现它...比 Linux 更不符合人体工程学efibootmgr
(尽管我可能对 Linux 人员有偏见)。但它能做这份工作。
需要的命令bcdedit
:
bcdedit /create /d "<description of your Linux boot option>" {fwbootmgr}
该命令将返回一个长 GUID 字符串,以下所有命令都将使用该字符串。它将被标记为<GUID>
bcdedit /set <GUID> device partition=S:
如果您使用相同的 ESP 分区来包含 Windows 和 Linux 引导加载程序,则 Windows 驱动器号 S: 可能已分配给 ESP,尽管默认情况下 ESP 并未安装在 Windows 中。如果您正在使用另一个适用于 Linux 的 ESP,则需要在开始此过程之前为该 ESP 分配一个 Windows 驱动器号,并partition=S:
相应地更改该部分。
bcdedit /set <GUID> path \EFI\<name of Linux distro>\shimx64.efi
这设置与引导变量关联的引导加载程序路径名。
bcdedit /set {fwbootmgr} default <GUID>
这会将新添加的引导变量设置为默认引导选项,因为它很可能会提供可用于选择要引导的操作系统的 GRUB 引导菜单。