UEFI维护

理论

概念理解

  • UEFI
    UEFI菜单是固件(firmware)的一部分,它是现代计算机系统中的一个更先进的替代传统BIOS的接口。它提供了一个图形化或文本界面的启动管理器,允许用户选择从哪些设备或操作系统启动。
  • BCD
     BCD菜单是Windows操作系统的一部分,由bcdedit命令管理。它存储在BCD存储(Boot Configuration Data store)中,定义了Windows如何启动,包括启动多个操作系统的选项、启动参数等。

引导启动过程

  • UEFI启动
    • NVRAM持久的EFI 文件启动项
      • \EFI\Microsoft\Boot\bootmgfw.efi
        • \EFI\Microsoft\Boot\BCD
          • C:\Windows
      • \EFI\Ventoy\bootx64.efi
        • \ISO\WePE.iso
        • \ventoy\ventoy_grub.cfg
          • \EFI\Microsoft 1\Boot\bootmgfw.efi
          • \EFI\Microsoft 2\Boot\bootmgfw.efi
      • \EFI|Linux\grub.efi
        • /etc/default/grub
          • linux
    • 外设的EFI启动项
      • EFI分区 \EFI\BOOT\bootx64.efi
    • 默认启动项
      • EFI分区 \EFI\BOOT\bootx64.efi
  • Legacy启动
    • MBR
      • PBR
        • bootmgr
          • C:\Boot\BCD
            • C:\Windows

维护手册

NVRAM

  • DG修改UEFI
  • bootice修改UEFI
  • bcdedit命令

MBR

  • 修复MBR:bootrec /fixmbr,即主引导记录,磁盘的第一个扇区512字节
  • 修复PBR:bootrec /fixboot,即引导扇区,分区的起始处引导代码,bootmgr也在这个分区

EFI

  • 创建分区:diskgenius可以创建efi分区,分配盘符或隐藏盘符
  • 查看分区GUID:mountvol
  • 格式化分区:format H: /FS:FAT32
  • 查看UEFI菜单:bcdedit /enum firmware
  • 复制启动项:bcdedit /copy {current} /d "gpd win11 on 2230"
  • 默认启动项:bcdedit /default {identifier}
  • 删除启动项:bcdedit /delete {identifier}
  • 修改启动项名称:bcdedit /set {a75ab60d-001a-11f0-9dea-806e6f6e6963} description "BC711 512GB - Window 11 HOME GPD"

bootmgr

  • 查看BCD菜单:bcdedit 或 bcdedit /store X:\EFI\Microsoft\Boot\BCD
  • 启动时显示菜单:bcdedit /set {bootmgr} displaybootmenu yes
  • 扫描所有系统:bootrec /scanos
  • 重建启动项:bcdboot E:\windows /s F: /f UEFI 复制系统文件,重建EFI和BCD文件
    • efi/windows/boot/bootmgfw.efi覆盖到efi/boot/bootx64.efi,启动会默认查找efi/microsoft/boot/BCD
  • 自动添加启动项:bootrec /rebuildbcd
  • 启动超时:bcdedit /timeout 30
  • 备份:bcdedit /export C:\BCD_Backup
  • 恢复:bcdedit /import C:\BCD_Backup

grub

  • 挂载EFI分区:sudo mount /dev/nvme1n1p1 /mnt/boot/efi
  • 安装grub启动管理:sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot
  • 自动扫描启动项
    • 切换到chroot环境:sudo chroot /mnt
    • 扫描生成grub启动项:os-prober
    • 更新grub配置:update-grub
    • 退出chroot环境:exit

系统安装

  • 双盘双系统
    • 独享EFI:两个盘有各自的EFI分区,有各自的BCD,指向各自系统所在分区
    • 共享EFI:主盘EFI的BCD,增加启动项,指向副盘系统所在分区
  • 单盘双系统
    • 双windows:安装系统到两个分区,在EFI分区的BCD有两个启动项,指向两个系统分区
    • win+linux:安装两种系统后,因为windows的启动管理bootmgr封闭,所以需要修复为grub来管理win和linux两个启动项
  • 单盘三系统
    • 添加启动项:对EFI分区下的BCD或Grub进行维护,添加新启动项

常见问题

EFI修复

  • EFI的BCD修复
    • 格式化:format H: /FS:FAT32
    • 重建:bcdboot E:\windows /s H: /f UEFI
  • Diskgenius或bootice修改UEFI启动顺序或内容时,很多时候没有生效
    • 软件修改的内容没有固化到BIOS NVRAM区域,每次启动会重载
    •  

MBR修复

  • 用bootice修复分区引导PBR选bootmgr,再修复硬盘MBR即可

改造硬盘为rEFind多系统盘

  • 外置后分区GUID变了
    • 修复EFI:不需要修复,旧GUID没扫到自动失效,新GUID自动扫入启动菜单,所见即正确
    • 修复BCD:bcdboot E:\Windows /s F: /f UEFI
bcdedit /store I:\EFI\Microsoft\Boot\BCD /copy {5b230f5b-ec32-11ef-9700-d162f58c607e} /d "Windows 11 USB 2230"