Bcdedit 删除 Boot Menu 中的多余启动引导

概述

在过去一篇博文《如何科学卸载 Ubuntu?》中曾提到 Ubuntu 启动引导的删除,其中先后通过 EasyUEFI 与 diskpart 工具删除了 Ubuntu 的启动引导条目以及 Ubuntu 的 EFI 分区,但是仍有可能出现启动引导的残留,最直接的表现就是在开机的时候依旧没有正常进入系统而是进入了 GRUB 界面。本文以清理 Ubuntu 启动引导残留为例,演示如何借助 Bcdedit 移除固件应用程序,进而彻底清理启动引导残留,同理亦可以移除多系统下不需要的启动引导。

Bcdedit 删除 Boot Menu 中的多余启动引导_第1张图片


转自猴开发博客:Bcdedit 删除 Boot Menu 中的多余启动引导

一、找到固件GUID

在 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

你可能感兴趣的:(沿途简记)