我fat32
使用 GParted 创建了一个新的空分区来安装 GRUB,因为我想将 GRUB 与 Windows 启动管理器分开
但fstab
需要一个挂载点,这是 fstab 中的原始行:
UUID=ABCD-1234 /boot/efi vfat umask=0077 0 1
中的原始挂载点fstab
是/boot/efi
。现在的挂载点应该是什么?
当我使用时lsblk
挂载点是空的。
我无法使用,mount -a
因为它没有挂载点
答案1
在您的根文件系统中,/boot/efi 是一个空目录,用作 EFI 分区的挂载点。EFI 分区上有一个 FAT 文件系统,通常只有一个目录 - EFI。在 EFI 下,您可能有其他用于不同引导加载程序的目录 - Microsoft、ubuntu。还有一个 Boot 目录,它是设备默认引导加载程序(不需要 nvram 条目,如果您的第一个选择失败,可以用作后备引导加载程序等,但实际上仅在您有可移动磁盘并想要启动它时才使用)。
请参阅 help.ubuntu.com/community/UEFI 通常,每个可启动设备只有一个 EFI 分区,并且不同操作系统的引导加载程序只是放入不同的目录中 - ...EFI/ubuntu、.../EFI/Microsoft 等。grub 替换 Microsoft 引导加载程序的一个地方是设备默认引导加载程序 .../EFI/Boot/bootx64.efi(但该引导加载程序通常不在一个磁盘设置上使用。也就是说,您可以简单地创建另一个 EFI,更改启动和 ESP 标志,然后在那里安装 grub,但没有必要费心这样做。
grub 安装程序了解 EFI 分区上的目录结构,并将其文件(grubx64.efi 和 shimx64.efi)复制到正确的位置。您实际上不必自己做任何事情(即使文件设置很简单,只需将两个文件复制到 /boot/efi/EFI/ubuntu 和一个三行 grub.cfg 存根文件,该文件从 /boot/grub/grub.cfg 导入实际维护的 grub.cfg 文件。此类存根的示例(更改您的 UUID 和磁盘/分区号)适用于您的情况:
$ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid 0ac9e07b-c36d-473c-832c-030dab912345 root hd1,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
grub 安装程序执行的另一项操作是创建 nvram 条目,以允许从 EFI 启动菜单中选择 ubuntu 引导加载程序并将其置于正常启动顺序中。您也可以使用 efibootmgr 手动执行此操作,或者设置默认引导加载程序(将 grubx64.efi 和 shimx64.efi 复制到 .../EFI/Boot 中,并将 shimx64.efi 重命名为 bootx64.efi。设置默认引导加载程序可让您跳过 nvram 设置,因为该设备始终是启动选项。手动完成所有操作并不难,但 grub-installer 确实为您完成了所有操作。
如果您确实想要,您可以指定 grub-install --efi-directory=/boot/ubuntu,而 /boot/ubuntu 只是一个目录 - 如果您将 /dev/sda3 挂载到 /boot/ubuntu,则文件将转到 sda3,而不是挂载点目录。使用正确的标志,这可以用于启动,但不要指望任何 grub 更新(可执行文件,而不是 grub.cfg 文件)能够找出您的新 EFI 未挂载在 /boot/efi。请参阅手册页(man grub-install)了解更多选项。您是在尝试解决问题,还是这只是一个学习实验?
答案2
简短答案
别费心了。为 Windows 和 Ubuntu 创建单独的 ESP 几乎没有什么好处,而且这样做需要付出额外的努力,而且可能会产生新的问题。
长答案
据我所知,@ubfan1 的回答是正确的,但我想强调并阐述几点……
首先,确实没有必要为 Ubuntu 创建单独的 ESP。ESP 是故意的跨操作系统共享。事实上,创建多个 ESP 可能会导致问题——例如,某些版本的 Windows(或至少是 Windows 安装程序)会因多个 ESP 的存在而感到困惑。因此,创建第二个 ESP 可能会在以后造成问题。也就是说,将 Windows 和 Ubuntu 引导加载程序分离在不同的分区上可能使 Ubuntu 引导加载程序更安全,避免 Windows 的干预或错误,反之亦然。不过,如果您对此感到担忧,我建议您在 USB 闪存驱动器上,甚至在根 ( /
) Linux 文件系统和/或 Windows 中的某个位置创建 ESP 备份,这将是很好的保护。
其次,Ubuntu 要求 ESP 安装在/boot/efi
。虽然您可以将其安装在其他地方(或将其保持未安装状态,直到需要修改它为止),并将 GRUB 2 安装到该备用安装点,但这是一种非标准做法,可能会导致问题。任何脚本或工具假设如果您将 ESP 安装在其他地方,则 ESP 将被安装在的位置/boot/efi
可能会出现问题。因此,您应该将 ESP 安装在/boot/efi
,句号。如果您有两个 ESP,那么“这个”ESP 是指保存所讨论的发行版安装的引导加载程序的 ESP。在您使用单独的 Windows 和 Ubuntu ESP 的情况下,根本没有理由在 Ubuntu 中安装 Windows ESP。事实上,如果拥有两个 ESP 的目的是为了最大限度地降低一个操作系统损坏另一个操作系统文件的风险,那么您绝对应该不是在 Ubuntu 的任何地方安装 Windows ESP。相反,编辑/etc/fstab
以更改标识 ESP 的“UUID”(它实际上是一个序列号,而不是 UUID,但那是另一回事),以便它引用新的 Ubuntu 特定 ESP,而不是原始 ESP。(您可以使用 找到任何分区的 UUID/序列号blkid
,如sudo blkid /dev/sda1
。)然后您可以重新启动或执行 ,sudo umount /boot/efi
然后执行sudo mount -a
以将 Ubuntu 特定 ESP 安装到/boot/efi
。实用程序和脚本都应该可以正常工作;您可以执行sudo grub-install
以将 GRUB 安装到 Ubuntu 特定 ESP。(如果 GRUB 已安装到 Windows ESP,您可能需要临时安装它并删除那些文件。)
如果您需要临时访问 Windows ESP,则挂载点并不重要。目录/mnt
通常用于此类用途;或者各种自动挂载工具会/media
为此目的创建子目录。
第三,100 MiB 比我建议的 ESP 要小。虽然这提供了足够的空间,但它有几个问题。首先,mkdosfs
将在其上创建一个 FAT16 文件系统,而一些 EFI 和操作系统(包括至少某些版本的 Windows 的安装程序)对 FAT16 ESP 反应不佳。您可以通过指示mkdosfs
创建 FAT32 文件系统来解决这个问题,但如果您忘记这样做,它将默认创建 FAT16。其次,一些 EFI 的 FAT 驱动程序存在错误,导致它们无法处理小于 512 MiB 的 FAT32 文件系统。一个常见的问题是,即使 Linux 和 Windows 都可以看到所有文件,并且文件系统检查工具表明文件系统正常,某些文件似乎不存在于 EFI 中。如果 Shim、主 GRUB 二进制文件或其在 ESP 上的配置文件受到影响,您将无法启动。出于这些原因,为了弥补兆字节 (MB;1,000,000 字节) 和兆比字节 (MiB;1,048,576 字节) 之间可能出现的混淆,我建议创建一个至少 550 MiB 大小的 ESP。为确保万无一失,您将大概100 MiB ESP 没问题;但是可能会导致难以诊断的问题。请注意,如果您已经拥有低于 512MiB 的 ESP 并且它工作正常,我不建议调整大小或更换它,因为该操作很繁琐并且可能会导致更大的问题。我建议创建一个 550+ MiB ESP 的目的是为了避免问题;如果较小的 ESP 已经在工作,那么就没有问题。