我有一台 Chromebook,并已成功安装了 Gallium OS。(是的,我知道,也是基于 Ubuntu 的)这是唯一可以开箱即正确启动操作系统的版本。
我尝试过的所有其他 Ubuntu 版本(Ubuntu、Ubuntu Mate、Ubuntu Budgie)在安装后都遇到了同样的问题。它们都提供了 GRUB 命令行。
当我进入 BIOS 时,我可以浏览 EFI 文件,当我启动位于其中的文件时,EFI/Ubuntu/Grubx64.efi
操作系统就会启动。但我不想手动执行此操作。
如何解决此 EFI / Grub 问题并让 Ubuntu 在我的 Chromebook 上启动和运行?
- 安装在MMCBLK0上的硬盘。
- MMCBLK0p1 是 EFI(Fat32)(启动标志设置)。
- MMCBLK0p2 是 ext4。
- 所有分区前面都有2048kb的可用空间。
答案1
不幸的是,Boot Repair 输出不完整,因为该实用程序尚未正确支持 eMMC 和类似的高级 SSD 类型,它们在 Linux 中显示为和/dev/mmcblk0
相关文件名,而不是传统/dev/sda
风格的文件名。因此,我仍然不了解一些重要因素,例如.efi
ESP 上存储的 EFI 程序(带扩展名)到底是什么(/boot/efi
在 Ubuntu 中)。
也就是说,您的启动信息摘要中有一个关于问题原因的非常重要的线索:
=================== efibootmgr -v
Timeout: 3 seconds
BootOrder: 0000,0001
Boot0000* EFI eMMC Device PciRoot(0x0)/Pci(0x17,0x0)/Msg(29,00)/Ctrl(0x0)
Boot0001* EFI Internal Shell MemoryMapped(11,0x830000,0xc0ffff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
由此可见禁止ubuntu
驶入。通常,已安装的 Ubuntu 将包含指向 的条目EFI/ubuntu/shimx64.efi
;但是,您的系统中缺少此 NVRAM 条目。(该efibootmgr
实用程序显示和操作计算机基于 NVRAM 的 EFI 启动管理器条目的内容。)相反,计算机EFI eMMC Device
默认启动 。这是大概启动EFI/BOOT/bootx64.efi
文件,我猜是 GRUB 条目不完整或不正确。至少有三种方法可以解决此问题:
- 创建正确的 NVRAM 条目- 这应该有已经由 Ubuntu 安装程序完成,因此您的计算机固件可能有缺陷并忘记了正确创建的条目。另一方面,Ubuntu 安装期间也可能出现问题,阻止安装程序创建此条目。因此,值得尝试手动执行此操作。为此,请键入
sudo efibootmgr -c -d /dev/mmcblk0 -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L ubuntu
。如果您随后键入sudo efibootmgr -v
,您应该会看到新ubuntu
条目,并且当您重新启动时,它应该启动到 GRUB 并显示一个菜单。如果您得到相同的老行为,并且如果sudo efibootmgr -v
在您使用解决方法启动后显示该ubuntu
条目已消失,那么您的固件(或可能是 NVRAM 硬件)肯定有缺陷。可能值得从制造商处寻找固件更新并重试,或者如果您在退货期内,甚至将计算机退回商店以获得退款。 使用该
fbx64.efi
程序-- 该程序已安装在最近的一些 Ubuntu 安装中,但它安装后并没有什么用。要使其有用,请按照以下步骤操作:- 键入以备份ESP 上的
sudo mv /boot/efi/EFI/BOOT /boot/efi/EFI/BOOT-backup
现有目录。EFI/BOOT
- 键入
sudo mkdir /boot/efi/EFI/BOOT
在 ESP 上创建一个新的后备目录。 - 键入
sudo cp /boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/BOOT/bootx64.efi
以将 Shim 从EFI/ubuntu
ESP 上的目录复制到,并在新位置EFI/BOOT
使用后备文件名 ( )。bootx64.efi
- 键入
sudo cp /boot/efi/EFI/ubuntu/fbx64.efi /boot/efi/EFI/BOOT
要复制到ESP 上的fbx64.efi
后备目录 ( )。EFI/BOOT
- 在您的主目录中创建一个名为 的文本文件
boot.txt
。它应该只有一行,内容为grubx64.efi,ubuntu,,This is the boot entry for ubuntu
。 - 键入
sudo iconv -t UCS-2 < ~/boot.txt > ~/BOOT.CSV
。这会将您创建的文件转换为文件fbx64.efi
可以读取的格式 - 键入
sudo cp ~/BOOT.CSV /boot/efi/EFI/ubuntu
要复制BOOT.CSV
到EFI/ubuntu
ESP 上的目录。
此过程的要点是,程序在运行时扫描ESP 上
fbx64.efi
的每个子目录,查找名为 的文件。如果找到,它会使用这些文件为文件中描述的引导加载程序重新生成 NVRAM 条目。完成后,将运行新引导顺序中的第一个条目。因此,如果作为后备引导加载程序运行(它将在步骤 1-4 中复制时作为后备引导加载程序运行),并且如果您创建合适的文件,即使您的 NVRAM 条目经常丢失,Ubuntu 的 GRUB 也应该从其正常位置启动。这不如拥有一个可以正常工作的 EFI 引导管理器好,但它比使用下一个选项要好,但需要注意的是,此过程比下一个过程更繁琐。一个重要的警告是,如果 ESP 有EFI
BOOT.CSV
BOOT.CSV
fbx64.efi
BOOT.CSV
其他BOOT.CSV
文件,其中一个文件可能会在启动顺序中排在第一位,这可能会导致进程出错。因此,如果您遇到问题,您可能需要搜索此类文件,如果您认为它们可能导致问题,则可能需要删除或重命名它们。- 键入以备份ESP 上的
使用后备文件名——如果上述方法不起作用,您可以复制有效的 GRUB 以使其正常工作,如下所示:
- 键入以备份ESP 上的
sudo mv /boot/efi/EFI/BOOT /boot/efi/EFI/BOOT-backup
现有目录。EFI/BOOT
- 键入
sudo cp -r /boot/efi/EFI/ubuntu /boot/efi/EFI/BOOT
以将工作的 Ubuntu 引导加载程序放入EFI/BOOT
目录中。 - 键入
sudo mv /boot/efi/EFI/BOOT/shimx64.efi /boot/efi/EFI/BOOT/bootx64.efi
将 Shim 重命名为后备文件名,以便它默认启动。
第三种方法存在危险:如果我的诊断有误,或者
shimx64.efi
ESPEFI/ubuntu
目录中缺少或有缺陷,则此过程将导致计算机无法启动。在这种情况下,您需要使用紧急系统来逆转该过程,以将系统恢复到当前的半工作状态。此外,第三种方法将使您永远运行当前安装的 Shim 和 GRUB,除非您手动干预;您将不是通过 Ubuntu 软件包管理器安装更新。出于这些原因,通过第一种方法按顺序获取 NVRAM 条目是首选解决方案 —— 但考虑到您问题的性质,我并不希望这可行。- 键入以备份ESP 上的
如果您正在尝试使用不同的发行版,请注意,每个安装都可能需要grub.cfg
在与 Shim 和 GRUB 相同的目录中(EFI/ubuntu
或EFI/BOOT
在 ESP 上)有自己的文件。因此,如果您使用第三个修复程序安装新的发行版,则至少需要移动grub.cfg
。如果您安装不相关的发行版,则可能需要完全重做第三个修复程序。