如何将 /boot 移动到 UEFI 系统上当前启动在 btrfs 上的单独分区?

如何将 /boot 移动到 UEFI 系统上当前启动在 btrfs 上的单独分区?

/boot我在带有 btrfs 分区(subvol=@)的UEFI 系统上安装了 Ubuntu 18.04 。

由于 Ubuntu 最近的变更,我总是遇到 grub 超时 30 秒的情况。如果/boot位于 btrfs 分区上,则这是设计使然。

部分/grub.cfg

function recordfail {
  set recordfail=1
  # GRUB lacks write support for btrfs, so recordfail support is disabled.
}
...
if [ "${recordfail}" = 1 ] ; then
  set timeout=30

我认为如果我创建一个单独的 ext2/boot分区,问题就会解决。

问题是,如果上述假设正确,我如何boot从 btrfs 子卷移动到 ext2 分区?

答案1

我设法使用 LiveUSB 的 Boot-repair 来完成此操作。

在开始之前,我建议创建@子卷的快照,以防出现问题。

  1. 缩小/分区以留出 1-2 GB 的可用空间gparted

  2. 创建ext2分区。

  3. 将分区挂载//mnt

  4. 挂载新ext2分区到/media

  5. 跑步cp -a /mnt/@/boot/* /media

  6. 编辑/mnt/@/etc/fstab并添加新ext2分区的挂载/boot

  7. /删除旧引导sudo rm -r /mnt/@/boot

  8. 跑步sudo umount /mnt && sudo umount /media

  9. 运行boot-repair并执行默认检查。

一切都应该正常工作,并且 grub 超时现在正常。

答案2

还有另一种方法可以解决 btrfs 文件系统上的超时问题。

你可以加

GRUB_RECORDFAIL_TIMEOUT=0

/etc/default/grub运行sudo update-grub

但请确保您始终可以使用 ESC 或其他键进入 UEFI 设置。

相关内容