在 fat32 分区上安装 /boot

在 fat32 分区上安装 /boot

安装 Ubuntu 16.04 时是否可以在 fat32 分区上安装 GRUB?

当我在安装过程中尝试执行此操作时,会打印以下错误:

无法在 上安装文件系统类型 fat32 /boot,因为它不是功能齐全的 Unix 文件系统。请选择其他文件系统,例如 ext2。

我需要它进行双重启动(与 Windows 一起),并且我想从 Windows 编辑 GRUB 配置以更改启动屏幕上的默认操作系统,而不会出现 Windows 上的文件系统驱动程序任何问题。

我确信这是一项常见的任务。

另外,我经常在一些示例(可启动的 USB 闪存驱动器等)中看到 fat32 上的 GRUB,所以我认为原则上可以在 fat32 上安装 GRUB。

答案1

根据您所说的要执行的操作,重新排列默认启动顺序,最好的方法是重新编号/重命名 /etc/grub.d 中的文件,将(Windows?)启动放在首位(例如,将 30_os-prober 改为 06_os-prober)。然后 update-grub 将按您希望的方式重写 grub.cfg,并在每次更新时保持该顺序。不建议直接编辑 grub.cfg,因为它经常被内核更新重写。

现在您可以将 grub 安装到 FAT 文件系统,但不能在 Ubuntu 安装期间安装。我曾经这样做过一次,当时我清除了磁盘上的 Windows MBR,无法重新安装它,所以我使用 grub 作为引导加载程序,将引导目录放在一个小型 FAT 工具或恢复 Windows 分区上。请注意,我没有尝试使用此设置进行双启动,所以我不必担心 grub.cfg 更新。


不要混淆 Ubuntu 安装如何限制 grub 以及 grub 在手动运行时可以执行的操作。将 Ubuntu 安装到 ext4,接受默认 grub 安装(MBR 和 grub 文件位于 /boot/grub)。运行 Ubuntu,并将 FAT 挂载到 /mnt(假设您的 FAT 描述位于第二个分区):

sudo mount -tvfat /dev/sda2 /mnt 

在那里创建一个名为 boot 的目录

sudo mkdir /mnt/boot 

手动安装 grub 到 FAT 分区:

sudo grub-install --boot-directory=/mnt

您的 grub 安装现在运行 FAT 分区上的文件,您可以从 Windows 编辑它们。请注意 Windows 编辑器可能放入您的 grub.cfg 文件中的任何“垃圾”,例如回车符(Ubuntu 和大多数 unix 只使用换行符作为行终止符)。但是,内核更新会导致新的 grub 信息被放入 /boot/grub/grub.cfg,因此您需要编辑您的 FAT grub.cfg,或将新的 grub.cfg 复制到 FAT 并再次编辑它(否则新内核将不会显示在启动菜单中)。

答案2

参考 ubfan1s 解决方案,您可以将 FAT 分区永久挂载在 /boot 上,这样您的内核和 initrd 更新就会转到正确的位置,您无需自己复制任何内容。

假设你的 FAT 分区是 /dev/sda2,执行以下命令

  • 将你的 Linux 和 initrd 映像移动到临时目录
  • 将 FAT 分区的条目附加到 /etc/fstab
  • 挂载它并将文件从临时目录移动到 FAT
  • 更新 GRUB 文件
  1. part=/dev/sda2
  2. sudo mkdir /boot_ && sudo mv /boot/* /boot_
  3. echo $(sudo blkid | grep $part | grep -Eo ' UUID="[[:alnum:]-]+"' | sed -E 's/[" ]//g') /boot auto nosuid,nodev,nofail 0 0 | sudo tee -a /etc/fstab
  4. sudo mount /boot && sudo mv /boot_/* /boot && sudo rm -r /boot_
  5. sudo grub-install ${part%[0-9]*} && sudo update-grub

相关内容