Mac 上的 Ubuntu:执行“grub-install /dev/nvme0n1”失败

FET*_*FET 5 ubuntu grub2 macos

我知道这是一个非常常见的问题,但如果我在这里,这意味着我已经搜索并尝试了很多道路:但没有成功。我正在尝试在 MacBookPro 13" 2019 上安装 Ubuntu,运行 MacOS BigSur,分区(也不是 VM 也不是 bootcamp)。

我是如何准备 Ubuntu live USB 的

  1. 我此时已经下载了 Ubuntu 的最新稳定版本:Ubuntu 20.04.2.0 LTS

  2. 然后我插入一个 4GB USB 并使用磁盘工具将其格式化为 MS-DOS (FAT)。

  3. 最后安装了Etcher并将 ISO 映像刻录到我的 USB 中。

  4. 按住选项键重新启动我的 Mac 并启动到我的 USB(EFI 启动)。

我是如何安装Ubuntu的

  1. 从第一个菜单中我选择了“尝试 Ubuntu”
  2. 一旦进入桌面,触摸板和键盘都不起作用,因此我插入外部鼠标并启用屏幕键盘来完成安装
  • 打开活动概述并开始输入设置。

  • 单击“设置”。

  • 单击侧栏中的辅助功能以打开面板。

  • 在“打字”部分打开屏幕键盘。

  1. 我点击桌面上的 Ubuntu 安装程序图标

  2. 所选语言

  3. 选择正常安装并勾选“安装第三方软件”

  4. 当询问要安装 Ubuntu 的分区时,选择了其他选项/else

  5. 然后我从可用空间创建了 2 个分区

    • 512MB之一,“ EFI ”(来自下拉菜单)
    • 30GBext4之一(来自下拉菜单),安装到/(来自其他下拉菜单)
  6. 然后,我确保安装引导加载程序的磁盘设置为磁盘不是我创建的特定 EFI分区(即 /dev/nvme0n1 而不是 /dev/nvme0n1p3)

  7. 点击立即安装

  8. 在grub2步骤安装失败

笔记

  • 我已经尝试取消选中“安装第三方软件”
  • 我已经尝试选择“最小安装”而不是“正常”
  • WiFi 也无法工作,所以我后来尝试了以太网电缆,网络连接现在可以工作了
  • 我完全擦除了磁盘并重新安装了 MacOS(当然我有文件的备份)

安装过程视频

观看视频。

最后错误消息的屏幕截图

错误信息 新警告消息

Kne*_*459 7

我在使用 macOS Big Sur 版本 11.1、配备 2 GHz 四核 Intel Core i5 处理器的 2020 MacBook Pro 上安装 Ubuntu 20.04.2.0 LTS 时遇到了完全相同的问题。经过两天的努力,我终于找到了解决方案。请注意,这是一个漫长的过程。

\n

根据我的研究,我发现问题是由于 Mac 引导加载程序期望 EFI 分区格式化为 HFS+,而 Ubuntu 安装程序将其格式化为 VFAT(如 Rohith Madhavan此处所述)。

\n

为了解决这个问题,我找到了三种可能的解决方案:

\n
    \n
  1. 使用 Rohith Madhavan 的方法
  2. \n
  3. 将引导加载程序从 GRUB 替换为rEFInd
  4. \n
  5. 使用 Floris van Breugel 的方法在外部 SSD 上安装 Ubuntu 。
  6. \n
\n

选项一是七年前发布的,需要在我的 Ubuntu 安装中添加一个未签名的存储库(出于安全原因我不愿意这样做)。我不明白从 GRUB 交换到 rEFInd 的全部含义,所以我不习惯使用选项二,最后,我不希望使用外部 SSD 来降低内存访问速度,所以我不想选择选项三。

\n

我的最终解决方案是使用选项一和选项三的部分内容来将我自己的 GRUB 配置文件格式化为 HFS+,以便我可以从内部 SSD 上的分区启动 Ubuntu。

\n

备份

\n

虽然该过程不会给您带来任何问题,但如果发生错误,可能会擦除您的驱动器。因此,在继续操作之前备份所有内容始终是最安全的。

\n

安装Ubuntu

\n
    \n
  1. 打开 Mac 上的“磁盘工具”。
  2. \n
  3. 选择您的Apple SSD驱动器(确保选择父驱动器而不是容器)。
  4. \n
  5. 选择“分区”。
  6. \n
  7. 点击加号按钮并创建一个名为Ubuntu Boot Loader格式Mac OS Extended (Journaled)和大小为 128MB 的新分区。稍后这将作为 Ubuntu 引导加载程序的位置。
  8. \n
  9. 再次点击加号按钮,创建另一个名为Ubuntuwith format 的新分区MS-DOS (FAT),并为其分配您希望 Ubuntu 安装具有的内存大小(我建议不小于 50GB)。
  10. \n
  11. 从这里下载 Ubuntu 。
  12. \n
  13. 插入 USB 并转到“磁盘工具”。从这里找到 USB,点击Erase,选择格式MS-DOS (FAT)并选择方案,GUID Partition Map然后点击Erase
  14. \n
  15. 使用Etcher将此 ISO 文件闪存到 USB 上。请注意,这将擦除整个 USB(有关更多详细信息,请参阅此处)。
  16. \n
  17. 重新启动计算机,点击Cmd+R重新启动。这将使您进入恢复模式。
  18. \n
  19. 登录您的帐户,进入菜单位置Utilities,选择下拉菜单中的第一项,然后将设置更改为No SecurityAllow booting from external drive
  20. \n
  21. 关闭你的电脑。
  22. \n
  23. 插入可启动 USB 驱动器,然后按住 键打开计算机Option
  24. \n
  25. 选择 EFI 启动驱动器(应为黄色)。它可能会向您显示一条警告语Update Required。点击Update选项。这将重新启动您的计算机。确保在Option它重新打开时按住。然后再次点击EFI启动。
  26. \n
  27. 请按照此处的步骤一到步骤五进行操作。
  28. \n
  29. 在页面上Installation Type选择Something Else
  30. \n
  31. 找到MS-DOS (FAT)您创建的分区并点击减号。
  32. \n
  33. 选择Free Space并点击加号。
  34. \n
  35. 通过选择您想要多少 GB 来创建您的 Linux 内存空间,选择Ext4 Journaling File System、检查Format the partition并将安装点设置为/
  36. \n
  37. 选择Free Space并点击加号。
  38. \n
  39. 创建您的 Linux 交换空间,使用剩余内存并选择swap格式。
  40. \n
  41. 在下面Device for boot loader installation选择您所在的分区ext4
  42. \n
  43. Install Now
  44. \n
  45. 继续安装过程。您将再次看到grub-install /dev/nvme****失败的警告,但不用担心。只需点击重新启动即可。系统会要求您移除 USB,然后点击Enter
  46. \n
\n

现在,您的计算机上已经安装了 Ubuntu,但如果没有帮助,您的 GRUB 引导加载程序将无法打开它。

\n

进入Ubuntu

\n
    \n
  1. 重新启动计算机并Option在启动时按该键。
  2. \n
  3. 选择 EFI 启动驱动器(这是您的 Ubuntu 安装)。
  4. \n
  5. 您应该会看到一个 GRUB 终端。
  6. \n
  7. 请遵循Rohith Madhavan概述的以下步骤:
  8. \n
\n

在 grub 控制台中输入 ls

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

您可能不会得到与此完全相同的结果,但您\xe2\x80\x99将有一些类似的选项。

\n

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

\n
grub> ls (hd2,gpt2)/home\n\nrohith/\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

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

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

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

正确启动的唯一方法是使用驱动器的 UUID。为拿到它,为实现它 -

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

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

\n
grub> linux /boot/vmlinuz .efi.signed root=UUID=\xe2\x8c\xa9the UUID from above\xe2\x8c\xaa\n
Run Code Online (Sandbox Code Playgroud)\n

GRUB 控制台可以完成制表符补全,因此如果您只需键入 vmlinuz 部分并按 Tab,然后按 。并再次按 Tab 键,您将不必键入整个文件名。确保 efi.signed 部分存在。

\n

现在,设置初始 RAM 磁盘

\n
grub> initrd /boot/initrd\xe2\x8c\xa9...tab here!...\xe2\x8c\xaa\n
Run Code Online (Sandbox Code Playgroud)\n

您应该能够使用命令启动

\n
grub> boot\n
Run Code Online (Sandbox Code Playgroud)\n

您现在将进入 Ubuntu 安装状态,就好像一切都已正确安装一样。但每次重新启动时都必须重复此过程。要解决此问题,您可以执行以下操作。

\n

如果您遇到问题:

\n

确认您之前收到的 UUID 位于发行版的 grub.cfg 中 /boot/efi/EFI/ 下(例如 /boot/efi/EFI/ubuntu/grub.cfg)中的行search.fs_uuid SYSTEM-PARTITION-UUID-HERE root。如果没有,请复制粘贴当前值的行并在前面添加注释行 (#),然后在新行上将 替换SYSTEM-PARTITION-UUID-HERE为 ubuntu 分区的 UUID。

\n

永久修复 GRUB 问题

\n

在这里,您需要将 Ubuntu 安装默认创建的 VFAT 引导加载程序重新格式化为 HFS+。这可以通过使用 GRUB 创建您自己的引导加载程序配置来完成。我使用的方法与 Floris van Breugel 所做的相同(但在我的内部 SSD 而不是外部 SSD 上)。

\n
    \n
  1. Making Ubuntu bootable part 1按照从标题开始一直到结束的说明进行操作Turn SIP back on (for security)。唯一的变化是您应该引用的磁盘是您的内部Ubuntu Boot Loader分区(您不需要带有此分区的外部驱动器。
  2. \n
  3. Option在启动过程中按住 键重新启动计算机。您现在将拥有两个 EFI 启动驱动器。进入最左边的那个。它应该说你需要安装更新才能工作。点击Update
  4. \n
  5. 重新启动期间再次按住该Option键,然后选择中间的 EFI 启动驱动器。这将再次带您进入 GRUB 屏幕。等待一两分钟,然后它应该会带您进入 Ubuntu 加载屏幕。
  6. \n
\n

你们都完成了。您现在应该能够启动 Ubuntu 和 MacOS。

\n

希望这对你有用。

\n