如何在自定义安装 Ubuntu 后从 UEFI 引导菜单中删除 Windows?

我使用“其他选项...”在一台只有一个硬盘的笔记本电脑上安装了Ubuntu 18.04,该电脑预装了Windows 10。在安装过程中,我删除了除了EFI分区之外的所有分区。然后我创建了一个/根文件系统分区和一个/home分区。一切都进行得很顺利。

唯一的问题是现在UEFI引导菜单中多了一个多余的Windows条目,被Grub捕捉到了。我可以手动编辑/etc/default/grub来隐藏已经失效的Windows启动选项,但我也想同时清除EFI系统中的条目。我应该如何清除这些剩余的Windows遗迹?

2个回答

查找UEFI引导项

要删除UEFI中无用的Windows引导项,首先需要找到它。这可以直接从主Ubuntu操作系统中完成,无需从Live USB/DVD启动。已安装的Ubuntu已经具备所需的命令行工具。

按下Ctrl+Alt+T打开终端,然后输入以下命令:

sudo efibootmgr

输入密码时,按提示输入并按下Enter键。光标不会移动,你也看不到任何星号(*****)。这在Ubuntu终端中是正常的。你会看到一些输出,例如:
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0001,000
Boot0000* Dell
Boot0001* Windows Boot Manager
Boot0002* ubuntu

注意,除了Windows之外,我还有两个条目,一个是“Dell”,另一个是“Windows引导管理器”。由于我删除了除EFI之外的所有原始分区,所以无法再启动“Dell”或“Windows引导管理器”。我可以同时删除0和1两个条目。但是为了回答这个问题,我将展示如何仅删除Windows引导管理器条目。 注意:您要删除的条目可能与此示例不同。请使用您自己计算机的输出结果,而不是上述示例,来决定要删除哪些条目。

删除过时的引导条目

现在您知道您想要删除条目1(以本示例为例),请在终端中输入:

sudo efibootmgr -b 1 -B

请注意上述命令中的1。该命令将删除该条目。
Boot0001* Windows Boot Manager

从EFI分区中删除相应的文件夹

我们快要完成了。这最后一步是确保UEFI不会重新生成我们刚刚删除的条目。为此,您需要删除与之前步骤中删除的条目对应的文件夹。

如果EFI分区未挂载:

在某些计算机上,默认情况下可能没有挂载EFI分区。如果是这种情况,请使用以下命令找出哪个是EFI分区:

sudo os-prober

然后寻找Windows引导管理器。例如,它可能是/dev/sda1。你的可能不同。

然后使用以下命令挂载EFI分区:

sudo mount /dev/sda1 /boot/efi  

结束“如果”

现在你找到了要删除的文件夹的名称和位置。使用以下命令列出分区中EFI子文件夹中的所有文件夹:

sudo ls /boot/efi/EFI

你会看到一些输出,例如:
Dell Windows ubuntu

要删除Windows(也可能称为Microsoft)文件夹,请使用以下命令:
sudo rm -r /boot/efi/EFI/Windows

要验证文件夹是否已删除,请再次使用sudo ls /boot/efi/EFI命令。

最后更新GRUB以隐藏GRUB菜单

在这个阶段,当您启动笔记本电脑时,GRUB仍然会显示菜单以选择各种操作系统,即使您只安装了Ubuntu。使用以下命令编辑文件/etc/default/grub。如果您愿意,也可以使用其他编辑器。

sudo nano /etc/default/grub

使这两行看起来像这样:

GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0

如果不存在GRUB_TIMEOUT_STYLE=hidden这一行,请添加上述行。
完成后,通过Ctrl+X,然后按YEnter保存并退出编辑器。
最后一步是使用以下命令更新GRUB:
sudo update-grub

现在笔记本电脑应该直接启动Ubuntu,而不显示GRUB菜单。如果将来需要进入恢复模式,则在笔记本电脑启动时按下Esc键以显示GRUB菜单。
参考资料:此答案基于如何从BIOS引导菜单中删除“Ubuntu”?(UEFI)

2ESP应该已经安装在/boot/efi上,我没有看到在其他地方挂载ESP的理由。执行以下命令:sudo ls /boot/efi/EFIsudo rm -r /boot/efi/EFI/Windows - mook765
@mook765 谢谢。我已经编辑了答案。 - user68186
efibootmgr在某些实现中可能存在错误。在这些系统上,您可能需要在UEFI v2 shell中使用bcfg - Bob
@Bob 谢谢!随时可以使用 bcfg 添加另一个答案。我对UEFI shell不太熟悉。 - user68186
@user68186 我本来考虑回答的,但是Arch Wiki解释得比我能做到的更好,而且我现在没有可以轻松尝试的机器,所以最多只能是对Wiki的摘要。 - Bob
@Bob 考虑对维基百科进行总结,包括与Ubuntu相关的任何修改,而不是Arch,并附上维基百科的链接。仅回答一个链接被认为不是一个高质量的回答,因为链接可能会随着时间的推移发生变化。你自己的经验也可能对未来的用户有用。 - user68186
如果在运行sudo efibootmgr之后出现“此系统不支持EFI变量”,那该怎么办呢?我正在使用Ubuntu 20.04。 - MadPhysicist
我非常确定它是UEFI。这是一个相当现代的系统。大约5年前发布的。 - MadPhysicist
@MadPhysicist 如果是UEFI系统且不支持EFI变量,那么可能Ubuntu是以传统CSM模式安装的。如果是这种情况,以UEFI模式安装的Windows将无法启动。 - user68186
在Ubuntu 21.04上,ESP(EFI系统分区)没有为我挂载。我运行了sudo os-prober命令,显示Windows引导管理器位于/dev/sdb1上,所以我运行了sudo mount /dev/sdb1 /boot/efi命令进行挂载。此外,我的文件夹名字是"Microsoft"而不是"Windows"。 - alexia
@nyuszika7h 谢谢你的更新。我很高兴你能找出问题并解决它。 - user68186
1真希望我能给你点赞1000次。你真的让我的一天变得美好起来。谢谢 @user68186。 - Sambhav Khandelwal
1哥们儿,你真是救命稻草啊! - Muhammad Osama

打开终端。输入命令“cd /boot/efi/EFI”。删除Microsoft文件夹 - 输入命令“sudo rm -R Microsoft”。你也可以删除Boot文件夹 - 输入命令“sudo rm -R Boot”。
要从grub2中删除Windows引导项,输入命令“sudo gedit /boot/grub/grub.cfg”。查找菜单项,Windows Boot Manager(或类似的名称描述),并删除直到包括右花括号的行,然后保存。
工作完成。重新启动。

4这个答案有几个问题:首先,仅仅删除文件夹可能不足够。请参考@Silversonic在答案中的评论。其次,不应该直接使用sudo来运行像gedit这样的图形化程序,因为这可能会破坏用户的偏好设置。最好先使用sudo -i打开一个root shell,然后再使用sudo来运行gedit。第三,直接编辑grub.cfg是不推荐的。建议先编辑/etc/default/grub,然后再运行sudo update-grub - user68186
1请参考 https://askubuntu.com/questions/1009574/which-best-practice-for-using-gedit-as-root 了解不使用 sudo gedit 的最佳实践,并参考 https://askubuntu.com/questions/437323/is-it-possible-to-edit-grub-cfg 了解有关编辑 grub.cfg 的更多信息。 - user68186
1够了。没有问题。它百分之百有效。我已经做过很多次,每次都有效。无论你是使用sudo -i然后gedit,还是sudo gedit,都没有问题。后者不会破坏你的用户偏好设置。你从哪里得到这个信息的?如果你知道自己在做什么,你可以轻松地编辑grub.cfg,并且如果你不确定,你可以先备份grub.cfg。你太过于追求细节了。如果你已经知道所有答案,那么为什么一开始要问这个问题呢? - Paul Benson
@PaulBenson 我无法就其他事情发表评论,但是提出一个你已经知道答案的问题,然后自己回答不仅是被允许的,而且是积极推荐的(https://askubuntu.com/help/self-answer)。 - Reinstate Monica