我在 MacBook(2010 年中,又名 Macbook7,1)上安装了 Ubuntu 19.10 作为唯一的操作系统。目前我的系统可以运行,但存在一些问题。其中一个问题是,无论我做什么,似乎都无法让 GRUB 显示菜单。目前,这是我的/etc/default/grub
文件包含的内容:
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
GRUB_GFXMODE=auto
当我的电脑启动时,我会看到一个不闪烁的_
符号,持续约 5 秒钟,然后我会看到 Ubuntu 开始启动时看到的正常内核输出。如果我在显示ESC
时按下该键_
,启动将不会继续,屏幕会一直卡住,直到我按住电源按钮强制关闭系统。
我注意到的一个线索是,从 USB 安装程序启动时,grub 菜单工作正常。我查看了grub.cfg
USB 安装程序,它有一行代码,而/boot/grub/grub.cfg
我的 Ubuntu 安装中似乎没有这行代码:insmod efi_gop
那么根据这些信息,我该如何配置 GRUB 来显示菜单?
答案1
简短回答
这解决方法在我的 2009 年中 13 英寸 Apple Macbook Pro 上运行 64 位 XUbuntu 20.04:
- 创建 *Ubuntu(即 Ubuntu、XUbuntu、KUbuntu...)发行版的 LiveCD万一。
- 删除
shim*.efi
位于的文件/boot/efi/EFI/ubuntu/
- 使用 APT 清除(即彻底卸载)垫片从系统中卸载 DEB 包(
shim
和)。shim-signed
- 删除
grub
位于的文件夹/boot
- 再次安装 GRUB(即使用诸如 之类的命令执行“全新”或“干净”的 GRUB 安装
grub-install /dev/sda ; grub-install --recheck
)。 - 修复 GRUB 的默认设置,
/etc/default/grub
以便[1]激活 GRUB控制台模式和[2] 力量GRUB 显示菜单 3 秒,在这种情况下控制台模式。您可以通过在 中设置GRUB_TIMEOUT_STYLE=menu
和GRUB_TIMEOUT=3
来完成此操作。GRUB_TERMINAL=console
/etc/default/grub
- 运行
sudo update-grub
这些固定的默认设置适用于“全新” GRUB 安装。 - 运行
efibootmgr
以确保ubuntu
(即grubia32.efi
或grubx64.efi
,创建并存储在/boot/efi/EFI/ubuntu
)仍然是默认的 EFI 引导加载程序选项。 - 重新启动系统。
- 如果出现问题,请从 LiveCD 启动。
(非常)长的答案:如何执行上述程序
创建 LIVECD。
创建 LiveCD 的方法有很多种。我认为最基本的方法是下载 *Ubuntu LiveCD
.iso
文件(例如ubuntu-20.04-amd64.iso
),然后使用联合国网启动将其刻录到 USB 记忆棒(闪存驱动器)或(如果您可以访问 Linux shell 终端,例如bash
)使用dd
将此类.iso
文件刻录到任何外部媒体(USB 记忆棒、可写入 CD-ROM 等)。这个问题的答案提供一套相当详细的程序。删除 SHIM EFI 文件。
创建 LiveCD 并对其进行测试以确保它可以正常工作(如果您碰巧需要它),请打开 shell 终端仿真窗口(CtrlAltT是它的快捷方式,但您也可以从应用面板/菜单或右键单击桌面然后选择终端选项),然后
sudo su
在终端中运行,这样你就变成了根用户。成为根sudo
从现在起,您就不必在每个 shell 命令上使用。成为根,删除可能位于的shim*.efi
文件(例如,shimia32.efi
对于 32 位系统,shimx64.efi
对于 64 位系统)/boot/efi/EFI/ubuntu
。假设垫片.efi
文件确实位于/boot/efi/EFI/ubuntu
,可以通过在终端中运行以下命令来删除它:rm /boot/efi/EFI/ubuntu/shim*.efi
如果 EFI 分区未挂载,该命令
mount /boot/efi
可能会挂载它。如果该命令没有挂载它,请运行lsblk -o NAME,FSTYPE,MOUNTPOINT,PARTLABEL |grep -i efi
以查找您的 EFI 分区(例如/dev/sda1
),然后挂载它(例如mount /dev/sda1 /boot/efi
)。如果/boot/efi
挂载点不存在,请使用该命令创建它mkdir -p /boot/efi
,然后在其上挂载 EFI 分区(例如mount /dev/sda1 /boot/efi
)。此外,一旦这样的 EFI 分区安装在
/boot/efi
,并假设垫片.efi
文件位于,类似或 的/boot/efi/EFI/ubuntu
命令(取决于你的系统使用的文件管理器)将为你提供thunar /boot/efi/EFI/ubuntu
nautilus /boot/efi/EFI/ubuntu
根直接从文件管理器(窗口界面)访问此类文件夹(例如/boot/efi/EFI/ubuntu
):这使得浏览、查找然后删除垫片.efi
文件(例如shimx64.efi
)。*警告*如果你以根并意外删除了错误的文件,这样的文件是永远失去了(确实如此)不是去垃圾桶)。因此,建议您支付很多关注您正在做的事情,这样您就不会最终导致您的操作系统无法使用/无法访问。
如果你想知道为什么要删除垫片
.efi
文件(即 32 位shimia32.efi
文件或 64 位shimx64.efi
文件):GRUB 的.efi
文件(即 32 位grubia32.efi
文件或 64 位grubx64.efi
文件)适合在以下计算机上使用:安全启动被禁用。shim 版本实际上只是提供了 GRUB.efi
文件版本的签名版本(因为安全启动需要这样的签名版本)。但如果您在已禁用安全启动(这是常见的情况),*Ubuntu 将 shim EFI 文件添加为默认选项,即使 Mac 的固件告诉 bootlader 加载不安全GRUB EFI 文件。因此,解决方案是删除 shim(安全启动) EFI 文件,然后制作 GRUB (非安全启动) EFI 文件是新的默认文件,必须在启动时与 Mac 的硬件“交互”。
清除 SHIM DEB 包。
删除后垫片
.efi
文件位于例如/boot/efi/EFI/ubuntu
,运行APT来清除垫片DEB 软件包,从而防止将来垫片.efi
再次创建有问题的文件的更新:apt-get purge shim shim-signed --allow-remove-essential -y
删除 GRUB 文件夹。
现在你已经摆脱了垫片,是时候摆脱 GRUB 了:返回文件管理器窗口(例如 Nautilus、Thunar……)并删除
grub
可能位于 的文件夹。如果您在 中/boot
找不到该文件夹,请运行命令以查找文件的位置:该文件存储在文件夹中,因此如果您找到文件的位置,您就会找到文件夹的位置。grub
/boot
updatedb ; locate -i grubenv
grubenv
grub
grubenv
grub
如果您希望从终端删除该
grub
文件夹(假设它位于/boot
),只需运行:rm -r /boot/grub
...该
grub
文件夹将被删除。
安装 GRUB 的“全新”副本。
假设 GRUB 已安装在您的第一个 SATA 存储驱动器(即
sda
),请通过运行以下命令将其重新安装:grub-install /dev/sda ; grub-install --recheck
如果您的 EFI 分区位于例如
sda
(例如/dev/sda1
),则通常将 GRUB 安装在 中/dev/sda
。 如果您的 EFI 分区位于例如sdb
(例如/dev/sdb1
),则通常将 GRUB 安装在 中/dev/sdb
。 依此类推。正如解释的那样这里,也可以使用 LiveCD 安装“全新”的 GRUB 到你的启动盘(例如
/dev/sda
)。当您系统的 GRUB 安装程序损坏并且您暂时无法通过 APT 重新安装它时,此方法特别有用。例如,对于 64 位 Intel Mac,根当前的安装命令是apt install grub-common grub-efi grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed grub-pc-bin grub2-common
,但如果它在您的系统上不起作用,您可以随时启动 LiveCD,以便从您的 LiveCD 运行的软件包中安装 GRUB,然后由此 LiveCD 的 GRUB 创建grub
在 eg 中创建的新文件夹。/boot
修复 GRUB 的默认设置。
如果您没有 Gedit 文本编辑器,请通过运行命令进行安装
apt-get install gedit -y
,然后运行此命令以便使用 Gedit 编辑 GRUB 的默认设置文件:gedit /etc/default/grub
当 Gedit 窗口显示文件内容后
grub
,删除每个参数、和#
左侧的字符,然后修改其选项,使其变为如下形式:GRUB_TIMEOUT_STYLE
GRUB_TIMEOUT
GRUB_TERMINAL
GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=3 GRUB_TERMINAL=console
- 该
menu
选项告诉 GRUB 它必须在计算机启动或重新启动时创建并显示一个菜单。 - 该
3
选项告诉 GRUB 它必须等待 3 秒钟才能自动启动默认操作系统内核,以便用户有足够的时间从菜单中选择不同的内核(如果您愿意,您可以将其降低到 1 或 2,或者将其增加到 4、5 等)。 - 该
console
选项告诉 GRUB 它必须忽略显卡最合适的驱动程序,而使用更基础但也更兼容的简化 VGA 显示驱动程序:它不会提供花哨的菜单,但会提供更有可能工作且可见的功能菜单。
完成上述修改后,保存文件然后退出 Gedit 文本编辑器。
如果您更喜欢使用 shell 的标准文本编辑器(恰好是 Nano),请运行
nano /etc/default/grub
而不是gedit /etc/default/grub
。- 该
应用在 GRUB 默认设置中所做的更改。
这个很简单。只需返回终端并运行以下命令:
update-grub
上述命令将读取
/etc/default/grub
“全新” GRUB 安装的内容并将其应用到其设置中,从而从此时起改变 GRUB 的行为。确保选择了正确的 BOOT EFI。
假设你的 EFI 分区安装
/boot/efi
在垫片.efi
您删除的文件存储在/boot/efi/EFI/ubuntu
(这是 *Ubuntu 文件的默认位置.efi
),检查 GRUB 的.efi
文件是否在那里:ls -l /boot/efi/EFI/ubuntu/ |grep -i '.efi'
由于 Intel Mac 是 64 位计算机,因此预计会安装 64 位 *Ubuntu,因此
grubx64.efi
上述命令会找到名为 的文件。但是,32 位系统应使用名为 的文件grubia32.efi
,因此如果您的系统是 32 位的,请查找 GRUB 文件的 32 位版本.efi
。如果未
.efi
找到 GRUB 文件,则表明出现了问题,建议您再次安装 GRUB(参见步骤 5)。如果找到了 GRUB
.efi
文件,那么现在就该检查ubuntu
EFI 文件夹是否被选为默认(即第一个).efi
文件源(此优先级在启动时很重要)。为此,请运行以下命令:efibootmgr
输出必须显示如下内容:
BootCurrent: 0001 BootOrder: 0001,0080 Boot0001* ubuntu Boot0080* Mac OS X Boot0081* Mac OS X Boot0082* BootFFFF*
在我的例子中,
ubuntu
被标识为Boot0001*
(其编号为0001
),因此它需要成为默认选项:从左到右,BootOrder
必须先显示0001
(即ubuntu
)。如果您的情况并非如此,请通过运行以下命令进行修复:efibootmgr --bootorder 0001,0080,0081
这将使
0001
(即ubuntu
)成为第一个启动选项,0080
(即Mac OS X
)成为第二个启动选项,以及0081
(即Mac OS X
)成为第三个启动选项(我还没有发现0080
和之间有什么区别0081
。无论如何......)。如果你的引导程序位于例如
/dev/sdb
,则必须通过运行命令来更新引导管理器efibootmgr --disk /dev/sdb
。如果
ubuntu
不是活动启动项,请使用 使其处于活动状态efibootmgr -b 0001 -a
。查看更多内容,例如这里或者运行efibootmgr --help
。
重新启动系统。
重新启动系统,以检查经过这么长时间的尝试后问题是否得到解决。您可以从菜单重新启动系统,也可以通过运行以下终端命令之一重新启动系统:
init 6
或者
reboot
或者
shutdown -r now
或者
telinit 6
如果出现问题,请从 LIVECD 启动。
从 Mac(iMac、Macbook 等)上的 LiveCD 启动的标准方式:
- 关闭 Mac。
- 再次打开它并立即按住option按键。
- 输入密码(如果其中记录了密码)并点击enter。
- 插入您的 LiveCD USB 记忆棒、包含 LiveCD DVD 的外部 DVD 驱动器、包含 LiveCD 的 Mac 内部 DVD 驱动器等,然后等待。
- 一旦 Mac 读取了 LiveCD 的内容,屏幕上就会出现一个新图标。使用箭头键(◀和▶)选择它,然后点击enter(即return)。
- 从这里开始,根据出现的问题,有很多种可能性。例如,您可能想要使用 LiveCD 重新安装和/或更新 GRUB。在最坏的情况下,您可以使用 LiveCD 备份您的数据(例如备份到外部驱动器),然后重新安装 *Ubuntu 发行版。
答案2
我在 MacBook Pro 5,5 (13" Mid-2009) 上使用 20.04 时遇到了同样的问题。从 Ubuntu Live USB 安装程序启动时可以完美显示 grub 图形菜单。
在有人能够找到根本原因之前,对我来说有效的一个解决方法是取消注释或添加GRUB_TERMINAL=console
,/etc/default/grub
然后运行sudo update-grub
。
您至少可以看到菜单并进行选择,只是它不是全屏的,看起来也不好看。我怀疑这更像是 EFI 设置问题,而不是 grub 问题。
答案3
这在我的 MacBook Pro 2010 和 Xubuntu 22.04 上有效:
编辑/etc/default/grub
:
GRUB_TIMEOUT_STYLE=false
GRUB_TIMEOUT=
GRUB_TERMINAL=console
然后运行sudo update-grub
并重新启动,您应该会看到 GRUB 菜单。