Bro*_*eph 9 grub2 macbook grub-efi 19.10
我已经在我的 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
Run Code Online (Sandbox Code Playgroud)
当我的计算机启动时,我看到一个不闪烁的_符号大约 5 秒钟,然后我看到您在 Ubuntu 启动时看到的正常内核输出。如果我在显示ESC时按下该键_,则无法继续启动并且屏幕会卡住,直到我通过按住电源按钮强行关闭系统。
我注意到的一个线索是,从 USB 安装程序启动时,grub 菜单工作得非常好。我查看grub.cfg了 USB 安装程序上的 ,它有这条线,/boot/grub/grub.cfg在我的 Ubuntu 安装中似乎没有:insmod efi_gop
因此,鉴于此信息,我该如何配置 GRUB 以显示菜单?
Yur*_*ira 12
简答
此解决方法适用于我 2009 年年中运行 64 位 XUbuntu 20.04 的 13" Apple Macbook Pro:
shim*.efi位于/boot/efi/EFI/ubuntu/shim和shim-signed)。grub位于的文件夹/bootgrub-install /dev/sda ; grub-install --recheck)。/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。在我看来,最基本的包括下载 *Ubuntu LiveCD.iso文件(例如ubuntu-20.04-amd64.iso),然后使用UNetbootin将其刻录到 U 盘(闪存驱动器)或(如果您可以访问 Linux shell 终端,例如bash)使用dd将此类.iso文件刻录到任何外部媒体(U 盘、可写 CD-ROM 等)中。这个问题的答案提供了一套非常详细的程序。
删除垫片 EFI 文件。
一旦你创建了你的 LiveCD 并测试它以确保它在你碰巧需要它时可以工作,打开一个 shell 终端模拟窗口(CtrlAltT是它的快捷方式,但你也可以从应用程序面板/菜单中运行它或右键单击桌面中的空闲区域,然后选择终端选项)然后sudo su在终端中运行,这样您就成为了root用户。从现在开始,成为root将使您不必使用sudo每个 shell 命令。成为root 后,删除可能位于的shim*.efi文件(例如shimia32.efi对于 32 位系统,shimx64.efi对于 64 位系统)/boot/efi/EFI/ubuntu。假设shim .efi文件确实位于/boot/efi/EFI/ubuntu,可以通过在终端中运行以下命令来删除它:
rm /boot/efi/EFI/ubuntu/shim*.efi
Run Code Online (Sandbox Code Playgroud)
如果未挂载 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,并假设shim .efi文件位于/boot/efi/EFI/ubuntu,类似thunar /boot/efi/EFI/ubuntu或的命令nautilus /boot/efi/EFI/ubuntu(取决于您的系统使用的文件管理器)将使您直接从文件管理器(例如)获得对此类文件夹的root访问权限(例如/boot/efi/EFI/ubuntu)窗口界面):这样可以更轻松地浏览、查找和删除shim .efi文件(例如shimx64.efi)。
*警告*如果您已连接的根部,不小心删错了文件,这样的文件是永远失去了(它并没有去到回收站)。因此它建议你付出了很多的关注你在做什么,所以你最终不会使您的操作系统无法使用/访问。
如果您想知道为什么要删除shim .efi文件(即 32 位shimia32.efi文件或 64 位shimx64.efi文件):GRUB 的.efi文件(即 32 位grubia32.efi文件或 64 位grubx64.efi文件)是合适的使用在禁用安全启动的计算机上。shim 版本实际上只是提供了 GRUB.efi文件版本的签名版本(因为安全启动需要这样的签名版本)。但是如果你在禁用安全启动的 Mac 上安装 *Ubuntu (这是常见的情况),即使 Mac 的固件告诉引导程序加载不安全的文件,*Ubuntu 也会将 shim EFI 文件添加为默认选项GRUB EFI 文件。因此,解决方案是删除 shim(安全启动)EFI 文件,然后将 GRUB(非安全启动)EFI 文件设为必须在启动时与 Mac 硬件“交互”的新默认 EFI 文件。
清除垫片 DEB 包。
删除位于 eg的shim .efi文件后/boot/efi/EFI/ubuntu,运行 APT 以清除shim DEB 包,从而防止将来的shim更新.efi再次创建有问题的文件:
apt-get purge shim shim-signed --allow-remove-essential -y
Run Code Online (Sandbox Code Playgroud)
删除 GRUB 文件夹。
现在您已经摆脱了shim,是时候摆脱 GRUB 了:返回到您的文件管理器窗口(例如 Nautilus、Thunar...)并删除grub可能位于的文件夹/boot。如果在 中没有找到grub文件夹/boot,请运行命令updatedb ; locate -i grubenv查找grubenv文件的位置:此文件存储在grub文件夹中,因此如果您找到grubenv文件的位置,您就可以找到grub文件夹的位置。
如果您希望grub从终端删除文件夹(假设它位于/boot),只需运行:
rm -r /boot/grub
Run Code Online (Sandbox Code Playgroud)
...grub文件夹将被删除。
安装 GRUB 的“新”副本。
假设 GRUB 安装在您的第一个 SATA 存储驱动器(即sda)中,请通过运行以下命令将其安装回那里:
grub-install /dev/sda ; grub-install --recheck
Run Code Online (Sandbox Code Playgroud)
如果您的 EFI 分区位于 eg sda(eg /dev/sda1),通常的做法是将 GRUB 安装在/dev/sda. 如果您的 EFI 分区位于 eg sdb(eg /dev/sdb1),通常的做法是将 GRUB 安装在/dev/sdb. 等等。
正如这里所解释的,也可以使用您的 LiveCD 在您的启动盘中安装一个“新鲜”的 GRUB (例如/dev/sda)。当您系统的 GRUB 安装程序损坏并且您暂时无法通过例如 APT 重新安装它时,此方法特别有用。例如,对于 64 位 Intel Mac,root安装命令当前是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,然后grub创建新文件夹in eg/boot是由这个 LiveCD 的 GRUB 创建的。
修复 GRUB 的默认设置。
如果您没有 Gedit 文本编辑器,请通过运行命令安装它apt-get install gedit -y,然后运行此命令以使用 Gedit 编辑 GRUB 的默认设置文件:
gedit /etc/default/grub
Run Code Online (Sandbox Code Playgroud)
一旦 Gedit 窗口显示grub文件的内容,删除#位于每个参数左侧的字符GRUB_TIMEOUT_STYLE,GRUB_TIMEOUT和GRUB_TERMINAL,然后修改它们的选项,使其成为这些:
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=3
GRUB_TERMINAL=console
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
上面的命令将读取/etc/default/grubGRUB的内容并将其应用到“新”GRUB 安装的设置中,从而从此更改 GRUB 的行为。
确保选择了正确的引导 EFI。
假设您的 EFI 分区挂载在,/boot/efi并且您删除的shim .efi文件存储在/boot/efi/EFI/ubuntu(这是 *Ubuntu.efi文件的默认位置),请检查 GRUB 的.efi文件是否在那里:
ls -l /boot/efi/EFI/ubuntu/ |grep -i '.efi'
Run Code Online (Sandbox Code Playgroud)
由于 Intel Mac 是 64 位计算机,因此预计在其上安装了 64 位 *Ubuntu,因此grubx64.efi上面的命令会找到一个名为的文件。但是,32 位系统应改为使用名为 eg 的文件grubia32.efi,因此如果您的系统是 32 位系统,请查找 32 位版本的 GRUB.efi文件。
如果未.efi找到GRUB文件,则说明有问题,建议您重新安装 GRUB(请参阅第 5 步)。
如果.efi找到了 GRUB文件,那么现在是时候检查ubuntuEFI 文件夹是否被选为默认(即第一个).efi文件源(此优先级在启动时很重要)。为此,请运行以下命令:
efibootmgr
Run Code Online (Sandbox Code Playgroud)
输出必须显示如下内容:
BootCurrent: 0001
BootOrder: 0001,0080
Boot0001* ubuntu
Boot0080* Mac OS X
Boot0081* Mac OS X
Boot0082*
BootFFFF*
Run Code Online (Sandbox Code Playgroud)
在我的例子中,ubuntu被标识为Boot0001*(它的编号是0001),因此它是需要作为默认选项的那个:从左到右,BootOrder必须首先显示0001(即ubuntu)。如果这不是您的情况,请通过运行如下命令来修复它:
efibootmgr --bootorder 0001,0080,0081
Run Code Online (Sandbox Code Playgroud)
这将使0001(即ubuntu)第一个引导选项,0080(即Mac OS X)第二个,以及0081(即Mac OS X)第三个(我还没有找到0080和之间的区别0081。无论如何......)。
如果您的引导加载程序位于 eg /dev/sdb,您必须通过运行命令来更新引导管理器efibootmgr --disk /dev/sdb。
如果ubuntu不是活动引导,请使用efibootmgr -b 0001 -a. 查看更多,例如在这里或通过运行efibootmgr --help。
重新启动系统。
重新启动系统以检查所有这些漫长的旅程是否解决了问题。您可以从菜单或通过运行以下终端命令之一来重新启动它:
init 6
Run Code Online (Sandbox Code Playgroud)
或者
reboot
Run Code Online (Sandbox Code Playgroud)
或者
shutdown -r now
Run Code Online (Sandbox Code Playgroud)
或者
telinit 6
Run Code Online (Sandbox Code Playgroud)
出现问题时从 LIVECD 启动。
在 Mac(iMac、Macbook 等)上从 LiveCD 启动的标准方法:
小智 5
我在 MacBook Pro 5,5(13" 2009 年中)上的 20.04 上遇到了同样的问题。从 Ubuntu Live USB 安装程序启动可以很好地显示 grub 图形菜单。
在有人能够找到根本原因之前,对我有用的解决方法是取消注释或添加到GRUB_TERMINAL=console,/etc/default/grub然后运行sudo update-grub。
您至少可以从菜单中查看并进行选择,它只是不是全屏或看起来不太好。我怀疑这更多的是 EFI 设置问题,而不是 grub 问题。
| 归档时间: |
|
| 查看次数: |
13047 次 |
| 最近记录: |