在过去一篇博文《如何科学卸载 Ubuntu?》中曾提到 Ubuntu 启动引导的删除,其中先后通过 EasyUEFI 与 diskpart 工具删除了 Ubuntu 的启动引导条目以及 Ubuntu 的 EFI 分区,但是仍有可能出现启动引导的残留,最直接的表现就是在开机的时候依旧没有正常进入系统而是进入了 GRUB 界面。本文以清理 Ubuntu 启动引导残留为例,演示如何借助 Bcdedit 移除固件应用程序,进而彻底清理启动引导残留,同理亦可以移除多系统下不需要的启动引导。
转自猴开发博客:Bcdedit 删除 Boot Menu 中的多余启动引导
在 PowerShell 中输入命令:
Bcdedit /enum firmware
输出:
固件启动管理器
---------------------
标识符 {fwbootmgr}
displayorder {8729d185-7270-11e7-bd79-850bbbb583d1}
{bootmgr}
timeout 1
Windows 启动管理器
--------------------
标识符 {bootmgr}
device partition=\Device\HarddiskVolume1
path \EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
flightsigning Yes
default {current}
resumeobject {8729d17d-7270-11e7-bd79-850bbbb583d1}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30
固件应用程序(101fffff)
-------------------------------
标识符 {8729d185-7270-11e7-bd79-850bbbb583d1}
device partition=\Device\HarddiskVolume1
path \EFI\UBUNTU\SHIMX64.EFI
description ubuntu
其中固件应用程序(101ffff)为我们要删除的 Ubuntu 启动引导:
固件应用程序(101fffff)
-------------------------------
标识符 {8729d185-7270-11e7-bd79-850bbbb583d1}
device partition=\Device\HarddiskVolume1
path \EFI\UBUNTU\SHIMX64.EFI
description ubuntu
记下其标识符:{8729d185-7270-11e7-bd79-850bbbb583d1}
1.通过 Bcdedit 保存一份电脑上现行的 bcd 文件副本:
Bcdedit /export savebcd
2.拷贝一份 savebcd 文件的副本用于协助 bcdedit 删除操作:
Copy savebcd newbcd
3.枚举系统BCD存储中的固件命名空间对象并将输出结果保存到文本文件:
Bcdedit /enum firmware > enumfw.txt
4.使用记事本打开 enumfw.txt 文件,可以看到里面的内容与在 “一、找到固件GUID” 中是一致的,在输出的文本文件中找到要删除的 Ubuntu 启动引导对应的固件应用程序标识符:{8729d185-7270-11e7-bd79-850bbbb583d1},复制备用。
5.在任意位置创建一个文本文档 RemoveDups.txt
6.使用记事本打开 RemoveDups.txt 并写入以下内容(其中GUID替换为你在上一步中复制的标标识符):
Bcdedit /store newbcd /delete GUID
特别地,如果有多个要删除的固件应用程序的话,就将上面一行拷贝添加多行,例如:
Bcdedit /store newbcd /delete GUID1
Bcdedit /store newbcd /delete GUID2
Bcdedit /store newbcd /delete GUID3
Bcdedit /store newbcd /delete GUID4
注意:在EFI固件为本地设备初始化NVRAM条目的计算机上,如果需要,可以删除所有GUID条目。但不要删除的条目 {bootmgr}!
7.在 RemoveDups.txt 的最后一行写入以下命令,通过使用/clean选项删除导入操作中的所有NVRAM条目来导入新的BCD文件:
Bcdedit /import newbcd /clean
8.保存 RemoveDups.txt 文件,并将其重命名为 RemoveDups.cmd,使其成为命令行文件。
9.将 RemoveDups.cmd 文件复制到 C:\Windows\system32 目录下,并在 PowerShell 中执行它:
RemoveDups.cmd
10.重新启动系统。在重新启动期间,EFI固件将使用与连接到系统的设备对应的固件对象 GUID 重新初始化 NVRAM。进入系统后,可使用 bcdedit /enum firmware 命令进一步验证是否已删除所有需要删除的固件条目。
参考文献:Remove Duplicate Firmware Objects in BCD and NVRAM
扩展阅读:Deploy to UEFI-based Computers