我正在尝试在主机上安装 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
和你一样尝试了很多解决方案,至少我建议你谷歌一下。