Ubuntu 19.10 在 ZFS Rootfs 上执行 update-grub 后进入 Grub2 命令行

Ubuntu 19.10 在 ZFS Rootfs 上执行 update-grub 后进入 Grub2 命令行

注意:是的,我知道我应该拍摄 bpool 的快照。这本来可以解决整个问题,但我忘了这样做。

我在整个硬盘上使用 ZFS 全新安装了 Ubuntu 19.10。

我做了一些修改/etc/default/grub

GRUB_TIMEOUT_STYLE=menu
GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi=off splash"

我跑了:

sudo update-grub
sudo grub-install

然后我重新启动了。

此时,我进入了 grub 命令行。没有菜单项,我的系统无法启动。

我真的不想重新安装,因为我已经定制了我的系统并将大量个人数据移动到其中。

我运行了 Ubuntu 救援盘来修复这个问题。我能够将我的rpoolbpool分区挂载chroot到其中,但update-grubgrub-install没有找到我当前的 Ubuntu 根目录,也没有填充grub.cfg

我读到过os-prober一个问题:

https://github.com/zfsonlinux/pkg-zfs/issues/193

sudo os-prober

结果是:

device-mapper: reload ioctl on osprober-linux-sdb5
failed: Device or resource busy
Command failed.

grub-probe失败了。运行:

sudo grub-probe /

产量:

grub-probe: error: unknown filesystem.

所以这也许可以解释为什么 grub 无法正常工作。以下是版本:

grub-probe (GRUB) 2.04-1ubuntu12.1

除了重新安装之外,还有什么办法可以让该系统再次可启动吗?

答案1

  1. 在你面前chroot

您需要执行以下操作(从救援磁盘启动并安装好东西之后):

  • mv $target_root/dev $target_root/dev.save && mkdir $target_root/dev
  • mount --bind /dev $target_root/dev (你可能需要为你的 做同样的事情/sys

只有这样你才能 chroot$target_root/并期望一切正常。退出 chroot 后,不要忘记umount $target_root/dev && rmdir $target_root/dev && mv $target_root/dev.save $target_root/dev(如果你使用 chroot,请执行相同的操作/sys)。否则你将无法启动,因为你的/devchroot 不在原位。

  1. 但实际上

您必须能够在没有 chroot 的情况下安装 GRUB。只需检查/etc/fstab并了解您的分区是什么。从那里获取您的根 (/) 设备。

您很可能会找到 UUID,而不是 /dev/sd* 设备名称。没问题!从ls -l /dev/disk/by-uuid找到 UUID 和它们所链接的设备的位置获取设备名称。

了解您的/boot/grub位置 — — 很可能是在您的根上,因此ls /boot/grub足以确保。

标准grub-install命令不会找到任何东西,您需要向其提供目标安装(根)设备:

grub-install /dev/sda(而不是/dev/sda提供您从中找到的根设备/etc/fstab)。

  1. 哦,你也许想检查如何调用 grub-probe从中得到合理的答案:

grub-probe --target=disk /(或任何其他--target)

相关内容