如何让 grub 菜单显示在 MacBook 上?

如何让 grub 菜单显示在 MacBook 上?

我在 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.cfgUSB 安装程序,它有一行代码,而/boot/grub/grub.cfg我的 Ubuntu 安装中似乎没有这行代码:insmod efi_gop

那么根据这些信息,我该如何配置 GRUB 来显示菜单?

答案1

简短回答

解决方法在我的 2009 年中 13 英寸 Apple Macbook Pro 上运行 64 位 XUbuntu 20.04:

  1. 创建 *Ubuntu(即 Ubuntu、XUbuntu、KUbuntu...)发行版的 LiveCD万一
  2. 删除shim*.efi位于的文件/boot/efi/EFI/ubuntu/
  3. 使用 APT 清除(即彻底卸载)垫片从系统中卸载 DEB 包(shim和)。shim-signed
  4. 删除grub位于的文件夹/boot
  5. 再次安装 GRUB(即使用诸如 之类的命令执行“全新”或“干净”的 GRUB 安装grub-install /dev/sda ; grub-install --recheck)。
  6. 修复 GRUB 的默认设置,/etc/default/grub以便[1]激活 GRUB控制台模式[2] 力量GRUB 显示菜单 3 秒,在这种情况下控制台模式。您可以通过在 中设置GRUB_TIMEOUT_STYLE=menuGRUB_TIMEOUT=3来完成此操作。GRUB_TERMINAL=console/etc/default/grub
  7. 运行sudo update-grub这些固定的默认设置适用于“全新” GRUB 安装。
  8. 运行efibootmgr以确保ubuntu(即grubia32.efigrubx64.efi,创建并存储在/boot/efi/EFI/ubuntu)仍然是默认的 EFI 引导加载程序选项。
  9. 重新启动系统。
  10. 如果出现问题,请从 LiveCD 启动。

(非常)长的答案:如何执行上述程序

  1. 创建 LIVECD。

    创建 LiveCD 的方法有很多种。我认为最基本的方法是下载 *Ubuntu LiveCD.iso文件(例如ubuntu-20.04-amd64.iso),然后使用联合国网启动将其刻录到 USB 记忆棒(闪存驱动器)或(如果您可以访问 Linux shell 终端,例如bash)使用dd将此类.iso文件刻录到任何外部媒体(USB 记忆棒、可写入 CD-ROM 等)。这个问题的答案提供一套相当详细的程序。

  2. 删除 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/ubuntunautilus /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 的硬件“交互”。

  3. 清除 SHIM DEB 包。

    删除后垫片 .efi文件位于例如/boot/efi/EFI/ubuntu,运行APT来清除垫片DEB 软件包,从而防止将来垫片.efi再次创建有问题的文件的更新:

    apt-get purge shim shim-signed --allow-remove-essential -y
    
  4. 删除 GRUB 文件夹。

    现在你已经摆脱了垫片,是时候摆脱 GRUB 了:返回文件管理器窗口(例如 Nautilus、Thunar……)并删除grub可能位于 的文件夹。如果您在 中/boot找不到该文件夹​​,请运行命令以查找文件的位置:该文件存储在文件夹中,因此如果您找到文件的位置,您就会找到文件夹的位置。grub/bootupdatedb ; locate -i grubenvgrubenvgrubgrubenvgrub

    • 如果您希望从终端删除该grub文件夹(假设它位于/boot),只需运行:

      rm -r /boot/grub
      

      ...该grub文件夹将被删除。

  5. 安装 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

  6. 修复 GRUB 的默认设置。

    如果您没有 Gedit 文本编辑器,请通过运行命令进行安装apt-get install gedit -y,然后运行此命令以便使用 Gedit 编辑 GRUB 的默认设置文件:

    gedit /etc/default/grub
    

    当 Gedit 窗口显示文件内容后grub,删除每个参数、和#左侧的字符,然后修改其选项,使其变为如下形式:GRUB_TIMEOUT_STYLEGRUB_TIMEOUTGRUB_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

  7. 应用在 GRUB 默认设置中所做的更改。

    这个很简单。只需返回终端并运行以下命令:

    update-grub
    

    上述命令将读取/etc/default/grub“全新” GRUB 安装的内容并将其应用到其设置中,从而从此时起改变 GRUB 的行为。

  8. 确保选择了正确的 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文件,那么现在就该检查ubuntuEFI 文件夹是否被选为默认(即第一个).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

  9. 重新启动系统。

    重新启动系统,以检查经过这么长时间的尝试后问题是否得到解决。您可以从菜单重新启动系统,也可以通过运行以下终端命令之一重新启动系统:

    init 6
    

    或者

    reboot
    

    或者

    shutdown -r now
    

    或者

    telinit 6
    
  10. 如果出现问题,请从 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 菜单。

相关内容