![修复从 Linux 启动 EFI Windows](https://linux22.com/image/195311/%E4%BF%AE%E5%A4%8D%E4%BB%8E%20Linux%20%E5%90%AF%E5%8A%A8%20EFI%20Windows.png)
基本上我丢失了 Windows 8 启动选项,并且 Windows 安装介质的启动修复无法解决问题。
我知道这或多或少是 Windows 的问题,但我正在寻找一种efibootmgr
解决方案,而不是使用更尴尬的基于 Windows 的bcdedit
命令的解决方案。因此我在这里问而不是超级用户。
详细背景是这里,基本上我的系统是在 BIOS/MBR/CSM 模式下初始设置的,Windows 10 拒绝安装在那里,所以我必须将我的 MBR 磁盘转换为 GPT。之后我让 Linux 端的一切都正常工作,但通过 Windows 安装介质修复 Windows 启动失败。
- 我的所有 Linux 操作系统/分区均由 找到
update-grub
,但 GRUB 菜单中缺少我的 Windows 8。 - 也无法
os-prober
列出/找到我的 Windows 8。
我希望解决方法只是使用以下命令将我的 Windows 8 添加回作为启动项efibootmgr
,但这正是我迷失并需要帮助的地方。可以再次找到更详细的信息,如当前分区模式这里。谢谢。
也许我的 Windows 8 是以 BIOS/MBR/CSM 模式安装的,并且没有 EFI 启动功能,因为我/EFI
在其中没有看到目录?以下是我的 Windows 8 分区中的所有根级目录:
$Recycle.Bin/ ProgramData/
$WINDOWS.~BT/ Programs/
$Windows.~WS/ Recovery/
BOOTNXT Recovery.txt
BOOTSECT.BAK System Volume Information/
Boot/ Tmp/
Documents and Settings/ Users/
ESD/ Windows/
Intel/ bootmgr
Program Files/ pagefile.sys
Program Files (x86)/ swapfile.sys
efibootmgr
或者也许我根本不需要,只需要一个自定义条目/etc/grub.d/40_custom
,如下所示?
menuentry "Windows 8 BIOS MBR" {
insmod part_msdos
insmod ntldr
insmod ntfs
ntldr (hd0,msdos1)/bootmgr
}
答案1
好的,根据 @FelixJN 的请求,这里是答案而不是链接。
我的目的是寻求一个基于 Linux 的解决方案,因为至少使用ntldr
“加载 Windows”是我过去bootmgr
使用的技巧。就像,这应该有效:grub
grub4dos
menuentry "Windows 8 UEFI/GPT" {
insmod part_gpt
insmod search_fs_uuid
insmod chain
search --fs-uuid --no-floppy --set=root 28cf-35de
chainloader ($root)/EFI/Microsoft/Boot/bootmgfw.efi
}
但我没有尝试它,因为我对 grub2 及其文档没有太多信心,而是转向 Windows 的解决方案,就像 @telcoM 总结的那样,
在 UEFI 模式下运行引导修复过程,将 Windows UEFI 引导加载程序写入 ESP 分区
以下是详细步骤这里。
将媒体 (DVD/USB) 插入您的电脑并重新开始。
从媒体启动。
选择修理你的电脑。
选择故障排除。
选择命令提示符从菜单中:
输入并运行命令:
diskpart
输入并运行命令:
sel disk 0
输入并运行命令:
list vol
验证 EFI 分区(EPS - EFI 系统分区)是否使用 FAT32 文件系统并为其分配驱动器号(分配一个尚未使用的盘符。):
输入并运行命令:
sel vol <number of volume>
输入并运行命令:
assign letter=<drive letter>:
输入并运行命令:
exit
为了修复引导记录:
输入并运行命令:
cd /d <drive letter>:\EFI\Microsoft\Boot\
输入并运行命令:
bootrec /FixBoot
此时,所有操作系统的下一步都是相同的:
重建 BCD 存储
首先运行以下命令来备份旧的 BCD:
ren BCD BCD.old
现在使用以下命令重新创建它:
bcdboot c:\Windows /l en-us /s <boot letter>:All