EFI 在没有 rEFInd 的 Mac 上启动 Ubuntu 14.04

Roh*_*van 9 mac boot system-installation 14.04

我希望从我的 Mac 中完全删除 OS X 并单独安装 Ubuntu 14.04 LTS。

虽然我希望使用较新的 EFI 引导方法而不是传统的 BIOS 引导,但我不想使用 rEFInd 或任何其他第三方引导加载程序,而是想使用 Mac 的默认引导加载程序。

这样做的原因是我想消除由其他已知方法引起的大约 30 秒的延迟,并且还希望能够访问各种与 EFI 相关的实用程序。

您能否提供详细的分步方法以实现这一目标?

Roh*_*van 12

此过程将擦除 OS X 和您在机器上的任何其他数据。请确保在继续之前备份您的系统。

如果需要,您可能希望创建一个恢复磁盘,以便以后可以恢复 OSX。

使用 Ubuntu 创建 Live USB

有关详细说明,请参阅此页面。推荐使用UNetbootin,因为它是跨平台的并提供图形用户界面 (GUI)。

注意- 不要使用该+mac版本,因为它不支持 EFI 引导。

从 Live USB 启动

在 Mac 上从 USB 启动的技巧是在option您打开设备电源后立即按住该键。从此菜单中选择EFI 启动

在此处输入图片说明

Ubuntu 现在应该从 USB 启动。使用擦除并使用整个磁盘选项安装 Ubuntu 。

在此处输入图片说明

首先,当您重新启动/打开 Mac 电源时,您将看到 Mac 引导加载程序的灰色屏幕大约 30 秒,然后一个带有“?”的文件夹轻轻闪烁。里面。如果您现在插入安装程序 USB,它应该会启动。如果没有,请尝试按住电源按钮强制关闭电源,然后按照 USB 启动说明进行操作。

从您的硬盘驱动器手动启动

此时系统无法启动,因为 Mac 引导加载程序希望将 EFI 分区格式化为 HFS+(典型的 Mac 文件系统),而 Ubuntu 安装程序实际上将其格式化为 VFAT。

在这一步中,我们将指示 Live USB 上的 GRUB 也从硬盘驱动器上新安装的 Ubuntu 启动。– 这将需要一些认真的输入,但在以这种方式启动后,我们将准备在下一步中设置自动启动。

如果您使用的是桌面安装程序,请按住该shift键以调出 GRUB 引导加载程序菜单。

当您看到 GRUB 引导菜单时,不要选择任何条目。而是按C以调出 GRUB 控制台。

在 grub 控制台中,键入 ls

grub> ls 
(memdisk) (hd0) (hd0,msdos) (hd1) (hd2) (hd2,gpt3) (hd2,gpt2)
(hd2,gpt1)
Run Code Online (Sandbox Code Playgroud)

您可能不会得到与此完全相同的结果,但您会有一些类似的选择。

现在,找到包含用户主目录的分区。

grub> ls (hd2,gpt2)/home
rohith/
Run Code Online (Sandbox Code Playgroud)

继续尝试,直到找到为止。

最后一步的结果有两部分:(hdX,gptY). 您需要保留该hdX部分,但要查看所有gptY选项以查找 /boot/grub 目录。

grub> ls (hd2,gpt2)/boot/grub
unicode.pf2 [...] grub.cfg
Run Code Online (Sandbox Code Playgroud)

现在您想将其设置为您的根以执行进一步的命令。

grub> set root=(hd2,gpt2)
Run Code Online (Sandbox Code Playgroud)

正确引导的唯一方法是使用驱动器的 UUID。

grub> ls -l (hd2,gpt2)
Run Code Online (Sandbox Code Playgroud)

记下 UUID。您必须在下一步中手动键入它。

grub> linux /boot/vmlinuz?Tab here!?.efi.signed root=UUID=?the UUID from above?
Run Code Online (Sandbox Code Playgroud)

GRUB 控制台可以完成 tab 补全,所以如果你只是输入 vmlinuz 部分并点击tab,然后点击 。并tab再次,你就不必键入整个文件名。确保efi.signed零件存在。

现在,设置初始 RAM 磁盘

grub> initrd /boot/initrd?Tab here!?
Run Code Online (Sandbox Code Playgroud)

您应该能够从硬盘驱动器启动命令

grub> boot
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

设置自动启动

您现在已经启动到新安装的 Ubuntu。下一步是通过将/boot/efi分区重新格式化为Mac 期望的 HFS+ 文件系统,并允许您直接从它启动,从而使启动自动且无痛苦。

1. 安装额外的包

现在,打开一个终端并输入

sudo add-apt-repository ppa:detly/mactel-utils
sudo apt-get update
sudo apt-get install mactel-boot hfsprogs gdisk grub-efi-amd64
Run Code Online (Sandbox Code Playgroud)

2. 重新格式化 EFI 分区

运行mount以获取已安装文件系统的列表,并查找在 /boot/efi 中安装的任何内容。卸载它。

sudo umount /dev/sda1
Run Code Online (Sandbox Code Playgroud)

我们现在使用gdisk删除VFAT分区并创建一个HFS+一个

sudo gdisk /dev/sda
Run Code Online (Sandbox Code Playgroud)

(请注意,该磁盘名称的末尾没有数字!)

p

确认第一个分区的类型为EF00。现在我们删除那个EF00分区。

d

在其位置创建一个新的 HFS+。

n

按回车键进入第一个和最后一个扇区选项。

输入AF00文件系统代码。

使用该p命令仔细检查您的更改,然后w进行写入。

现在我们有一个未格式化的 HFS+ 分区。使用以下格式对其进行格式化:

sudo mkfs.hfsplus /dev/sda1 -v ubuntu
Run Code Online (Sandbox Code Playgroud)

3. 更新文件系统表

编辑 /etc/fstab

sudoedit /etc/fstab
Run Code Online (Sandbox Code Playgroud)

删除引用/boot/efiusing的行Ctrl+K

现在,键入以下命令 -

sudo bash -c 'echo $(blkid -o export -s UUID /dev/sda1) /boot/efi auto defaults 0 0 >> /etc/fstab'
mount /boot/efi
Run Code Online (Sandbox Code Playgroud)

4、在HFS分区安装GRUB

sudo bash -c 'echo "This file is required for booting" > /boot/efi/mach_kernel'
Run Code Online (Sandbox Code Playgroud)

安装 GRUB 并“保佑”文件系统。

sudo grub-install --target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi
sudo hfs-bless "/boot/efi/System/Library/CoreServices/boot.efi"
Run Code Online (Sandbox Code Playgroud)

编辑一些故障排除:在 Ubuntu 14.04 Trusty Tahr 上按照这些说明进行操作时,我收到以下错误消息grub-install

Installing for x86_64-efi platform.grub-install
error: Can't create file: No such file or directory.
Run Code Online (Sandbox Code Playgroud)

再次运行它后,strace我确定它不是在寻找名为 的文件/boot/efi/mach_kernel,而是/boot/efi/EFI/ubuntu/mach_kernel在创建该文件后调用的文件,然后重新运行grub-install一切似乎都有效。结束编辑

5. 消除启动延迟

要设置默认的 EFI 引导条目,请运行

sudo efibootmgr
Run Code Online (Sandbox Code Playgroud)

摆脱额外的条目 -

sudo efibootmgr -b xxxx -B
Run Code Online (Sandbox Code Playgroud)

其中 xxxx 是从 sudo efibootmgr

现在,设置默认条目 -

sudo efibootmgr -o xxxx
Run Code Online (Sandbox Code Playgroud)

系统现在应该可以启动了!

学分

Jason Heeris - 对于他的原始帖子,使用了 PPA。

Rohith Madhavan - 对于 Ask Ubuntu 上的帖子,稍作修改。