修复从 Linux 启动 EFI Windows

修复从 Linux 启动 EFI Windows

基本上我丢失了 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使用的技巧。就像,这应该有效:grubgrub4dos

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 分区

以下是详细步骤这里

  1. 将媒体 (DVD/USB) 插入您的电脑并重新开始

  2. 从媒体启动。

  3. 选择修理你的电脑

  4. 选择故障排除

  5. 选择命令提示符从菜单中:

    1. 输入并运行命令:

      diskpart
      
    2. 输入并运行命令:

      sel disk 0
      
    3. 输入并运行命令:

      list vol
      
  6. 验证 EFI 分区(EPS - EFI 系统分区)是否使用 FAT32 文件系统并为其分配驱动器号(分配一个尚未使用的盘符。):

  7. 输入并运行命令:

     sel vol <number of volume>
    
  8. 输入并运行命令:

     assign letter=<drive letter>:
    
  9. 输入并运行命令:

     exit
    
  10. 为了修复引导记录:

    1. 输入并运行命令:

      cd /d <drive letter>:\EFI\Microsoft\Boot\
      
    2. 输入并运行命令:

      bootrec /FixBoot
      

此时,所有操作系统的下一步都是相同的:

  1. 重建 BCD 存储

  2. 首先运行以下命令来备份旧的 BCD:

     ren BCD BCD.old
    
  3. 现在使用以下命令重新创建它:

     bcdboot c:\Windows /l en-us /s <boot letter>:All
    

相关内容