2026年01月21日/ 浏览 9
我盯着我的 2014 款 Mac Mini 看了好几个小时,眼睁睁看着 Ubuntu 23.10 安装到 99% 就失败了。日志显示 Grub 安装错误,提示“此系统不支持 EFI 变量”。如果你也遇到了同样的问题,以下是我手动安装 Grub 并成功运行 Ubuntu 的方法。
本指南记录了我的反复试验过程,包括遇到的死胡同。虽然我是在 2014 款 Mac Mini 上测试的,但它应该也适用于其他具有类似 UEFI 限制的 Intel Mac 电脑。
Ubuntu 安装程序运行顺利,直到最后一步。进度条卡住了,查看日志后发现:
此系统不支持 EFI 变量 grub-install:错误:注册 EFI 启动项失败安装程序无法写入 Mac 的 NVRAM 以将 Ubuntu 注册为启动选项。安装完成,但系统无法启动进入 Ubuntu,因为 Grub 配置不正确。
老款 Mac(尤其是 2012-2014 年的机型)的 UEFI 实现方式比较特殊。它们不像现代 UEFI 系统那样支持从 Linux 系统操作 EFI 变量。Ubuntu 安装程序需要将自身注册到 NVRAM 中,但 Mac 的固件会阻止这一操作。
解决方案:使用 Mac 将自动启动的 EFI 回退加载程序路径手动安装 Grub,完全绕过 NVRAM 注册。
从 Ubuntu Live USB 启动。在 Mac 上,开机后立即按住Option 键,然后选择 USB 驱动器。
在进行任何操作之前,请先确定您的磁盘布局。打开终端并运行:
lsblk -f查找您的分区。您通常会看到:
EFI 系统分区 (ESP):通常位于 /dev/sda1,格式为 vfat,大小约为 100–512MB。Ubuntu 根分区:通常为 /dev/sda2,格式化为 ext4或者,使用:
sudo fdisk -l记下哪个设备是你的 ESP 设备,哪个设备是你的 Ubuntu 根目录设备。你将在后续步骤中用到这些信息。在本指南中,我将使用 ` /dev/sda1<ESP_id>` 和/dev/sda2`<root_id>` 作为 ESP 设备,`<root_id>` 作为根目录设备——请将它们替换为你实际使用的设备名称。
我的第一个方法是创建一个备用引导加载程序,让 Mac 系统自动查找。这种方法比较简单,但可能无法正确保存 Grub。
挂载ESP:
sudo mkdir -p /mnt/efi sudo mount /dev/sda1 /mnt/efi # 替换为您的 ESP 设备安装 EFI 备用加载程序:
sudo mkdir -p /mnt/efi/EFI/BOOT sudo cp /mnt/efi/EFI/ubuntu/grubx64.efi /mnt/efi/EFI/BOOT/BOOTX64.EFI添加一个最小化的 grub.cfg 文件,告诉备用加载器在哪里可以找到真正的配置:
sudo tee /mnt/efi/EFI/BOOT/grub.cfg >/dev/null << EOF search --file --no-floppy --set =root /boot/grub/grub.cfg configfile /boot/grub/grub.cfg EOF问题:此步骤假设 grubx64.efi 文件已存在/mnt/efi/EFI/ubuntu/。在我的情况下,该文件不存在,因为安装程序从未完成 Grub 安装。如果您没有看到此文件,请跳至步骤 3。
当备用加载器方法不起作用时(因为 Grub 实际上没有安装),我需要通过 chroot 进入已安装的系统来手动安装 Grub。
挂载已安装的Ubuntu系统:
UBUNTU_ROOT=/dev/sda2 # 替换为您的根分区 ESP=/dev/sda1 # 替换为您的 ESP 分区 sudo mount " $UBUNTU_ROOT " /mnt sudo mkdir -p /mnt/boot/efi sudo mount " $ESP " /mnt/boot/efi为 chroot 绑定系统目录:
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys使用 chroot 命令进入已安装的系统并安装 Grub:
sudo chroot /mnt bash -c set -e # 验证 EFI 是否已挂载 mount | grep -q "/boot/efi" || { echo "EFI 未挂载"; exit 1; } # 为 x86_64 UEFI 安装 GRUB grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck # 生成 GRUB 配置 update-grub现在创建Mac电脑将自动启动的备用加载程序:
sudo mkdir -p /mnt/boot/efi/EFI/BOOT sudo cp /mnt/boot/efi/EFI/ubuntu/grubx64.efi /mnt/boot/efi/EFI/BOOT/BOOTX64.EFI # 创建最小 grub.cfg sudo tee /mnt/boot/efi/EFI/BOOT/grub.cfg >/dev/null << EOF search --file --no-floppy --set =root /boot/grub/grub.cfg configfile /boot/grub/grub.cfg EOF清理并重启:
sudo umount /mnt/sys /mnt/proc /mnt/dev sudo umount /mnt/boot/efi sudo umount /mnt sudo reboot移除U盘,让Mac从内置硬盘启动。
在尝试过程中,运行程序时遇到了另一个错误grub-install:
grub-install:错误:无法获取规范路径当 chroot 环境中的设备路径无法正确访问时,就会发生这种情况。解决方法是在 chroot 之前确保已正确挂载所有绑定挂载点。
如果遇到这种情况,请检查您的坐骑:
挂载 | grep /mnt你应该能看到/dev、、/proc以及/sys绑定到的/mnt。如果缺少任何组件,请重新挂载它们:
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys然后请在 chroot 环境中重试 grub-install 命令。
重启后,您应该会看到 Grub 菜单。如果看不到:
重新启动进入macOS恢复模式(启动时按住Cmd+R)检查启动磁盘— 您可能需要手动选择 Ubuntu 驱动器请再次尝试创建备用加载器——有时需要第二次尝试。启动进入 Ubuntu 23.10 后,我随后顺利升级到 24.04。手动安装的 Grub 配置在升级过程中仍然保留。
关键在于:Mac 启动时会EFI/BOOT/BOOTX64.EFI在 ESP 分区上查找一个特定文件。通过将 Grub 复制到该位置,我们可以绕过老款 Mac 上容易出错的 NVRAM 注册过程。
grub.cfg同一目录下的最小配置告诉这个备用加载器在哪里可以找到真正的 Grub 配置,其中包含您的启动菜单和内核选项。
这种方法应该适用于其他具有类似 UEFI 限制的 Intel Mac(2012-2015 年款)。但 Apple Silicon Mac(M1/M2)无法通过这种方式启动 Ubuntu,它们需要完全不同的启动方法。
哪些方法奏效了:
通过 Live USB 上的 chroot 手动安装 Grub创建 Mac 自动启动所需的 EFI 备用加载程序 (BOOTX64.EFI)。完全避免NVRAM注册需要注意的事项:
挂载前请检查您的 ESP 和根分区设备。在执行 chroot 操作之前,请确保所有绑定挂载点都已就位。备用加载器需要 .EFI 文件和一个最小化的 grub.cfg 文件。时间投入:预计需要 30-60 分钟,包括故障排除时间。大部分时间用于等待挂载完成和了解各个分区的功能。
如果你在老款 Intel Mac 上安装 Ubuntu 时遇到“不支持 EFI 变量”的错误,不要在 99% 就放弃。只要掌握了步骤,手动安装 Grub 就非常简单。反复尝试比任何文档都让我对 UEFI 启动过程有了更深入的了解。