在安装的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. 

有没有人有任何想法我缺less什么或下一步是什么? 我正在这个圈子里转转。

问题在于, grub-install在启动扇区中安装了基于BIOS的(即实模式)块。 是的,这是从PC / XT / AT时代开始的那种“真实模式”,大多数* 86机器都是在这种模式下启动的。

BIOS不知道你的设备上的任何东西。 在BIOS中,块设备有一个单一的hex字节标识符:软盘有0x00,0x01,…,硬盘有0x80,0x81,0x82,…(CDROM,pendrives是未知的bios,但在大多数情况下有一些类似的仿真,使它们看起来像是硬盘)。

当调用grub-install的时候,需要对这个实模式引导代码进行说明,从哪个设备加载引导加载程序的下一个阶段。 这是你很快就知道的gr </s>。

devices.map ,你说的是grub安装程序,他应该如何安装bios启动加载程序,因此你可以在你的块设备和bios号码之间build立一个映射(很快在启动的时候!)。 它必须在/boot/grub/boot/grub2或类似的地方。

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

如果你知道,现在grub安装的环回设备将成为第一个启动阶段的第一个硬盘,你可以简单地给它一个bios标识符0x80。

Ps:这是说bios的唯一方法,用你的回送设备知道什么。 在bios开发的时代,环回设备是非常非常深奥的东西,只有大型机器才知道。

Ps2 .:有一个名为kpartx的工具,可以find任何文件或设备的分区,并将它们映射到设备映射器块设备中。 我玩了很多losetup .. ---offset解决scheme,至less有一个短的谷歌search,我build议强。