在已安装的 kvm 映像上安装 grub?

在已安装的 kvm 映像上安装 grub?

我正在尝试在主机上安装 KVM 映像以修复 grub 问题,但似乎某个地方出了问题。

我已尝试以下步骤:

mount -o loop,offset=32256 /var/lib/libvirt/images/vm1.img /mnt/vm1
mount -obind /dev/ /mnt/vm1/dev/
mount -obind /proc/ /mnt/vm1/proc/
mount -obind /sys/ /mnt/vm1/sys/
cd /mnt/vm1/
chroot .
grub-install

我按照上述步骤操作,但是当我安装 grub 时,看到以下内容:

root@host:/# grub-install /dev/sda      
grub-probe: error: Cannot find a GRUB drive for /dev/loop0.  Check your device.map.

Auto-detection of a filesystem module failed.
Please specify the module with the option `--modules' explicitly.

有人知道我遗漏了什么或下一步是什么吗?我在这件事上兜圈子。

答案1

问题在于grub-install将基于 bios(即实模式)的块安装到引导扇区中。是的,这是 PC/XT/AT 时代的旧“实模式”,到目前为止,大多数 *86 机器都以这种模式启动。

BIOS 无法从您的设备中获取任何信息。在 BIOS 中,块设备有一个六字节标识符:软盘有 0x00、0x01、...,硬盘有 0x80、0x81、0x82、...(CDROM、U盘对于 BIOS 来说是未知的,但在大多数情况下,存在某种类型的模拟,使它们看起来像硬盘)。

grub-install被调用时,它需要告诉这个实模式引导代码,它应该从哪个设备加载引导加载程序的下一阶段。这就是 grub,你很快就会知道。

在 中devices.map,您说 grub 安装程序应该如何安装 bios 引导加载程序,因此您给出了块设备与它们的 bios 编号之间的映射(在引导时很快!)。它必须位于 或/boot/grub中的某个位置/boot/grub2,或类似位置。

在您将 grub 安装到环回设备后,强烈建议将其恢复devices.map到其原始状态。

如果您知道,现在安装 grub 的环回设备将是启动第一阶段的第一个硬盘,那么您可以简单地为其指定 bios 标识符 0x80。

附言:这是唯一能说明 BIOS 的方法,了解你的环回设备。在 BIOS 开发的时代,环回设备是非常非常深奥的东西,只有大型机器才知道。

Ps2.:有一个名为的工具kpartx可以找到任何文件或设备的分区,并将它们映射到设备映射器块设备中。我losetup .. ---offset和你一样尝试了很多解决方案,至少我建议你谷歌一下。

相关内容