我试图在主机上安装一个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议强。