注意:是的,我知道我应该拍摄 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 救援盘来修复这个问题。我能够将我的rpool
和bpool
分区挂载chroot
到其中,但update-grub
和grub-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
- 在你面前
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
)。否则你将无法启动,因为你的/dev
chroot 不在原位。
- 但实际上
您必须能够在没有 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
)。
- 哦,你也许想检查如何调用
grub-probe
从中得到合理的答案:
grub-probe --target=disk /
(或任何其他--target)