KVM 并将根驱动器设为 sda

KVM 并将根驱动器设为 sda

KVM 基于 qemu,通过 IDE 适配器将硬盘模拟为 /dev/hda。但是,我的映像(取自真实机器)假设启动驱动器为 /dev/sda。这当然可以更改,但由于该信息深深嵌入内核使用的 initramfs 中,而且我仍然希望能够在真实硬件上启动映像,所以我宁愿不去碰它。

有什么办法可以让驱动器显示为 /dev/sda 而不是 /dev/hda?

(此外,Xen 对我来说也是一种可能性,但是 Xen + HVM 也存在同样的问题,因为它也使用 qemu 硬件模拟。)

答案1

虽然 QEMU 能够模拟 USB 存储设备,但据我所知,它无法直接从该设备启动。KVM 应该类似。我向您推荐的另一个选项是这个。我不确定它是否会起作用,因为我自己没有尝试过,但它可能会起作用。

将驱动器映像用作 USB 存储设备。但是,通过在命令行上直接指定内核和 initrd 来启动。因此,如下所示:

kvm -kernel <kernel image> -initrd <initrd image> -usb <usb options> ...

为了使模拟更加准确,您应该使用从驱动器映像中提取的内核和 initrd 映像。这将启动您的内核,内核应该内置 USB 驱动程序来检测/dev/sda并加载您的 initrd,这将发挥它的魔力。然后,启动应该像/root往常一样使用您的驱动器映像进行。

答案2

事实上,我自己已经找到了适合自己的答案。

kvm -drive 文件=x,bus=scsi,boot=on

驱动器选项允许指定总线。但由于某种原因,默认情况下 scsi 不可启动。但是,KVM 支持boot=on使 scsi 驱动器可启动的标志。

但是,这个解决方案仍然有一个问题 - 由于某种原因,内核花了几秒钟才正确检测到 scsi 驱动器(我猜是一些 usb 设备等待或类似情况)。因此,我不得不在合适的位置手动中断我的 initramfs 启动,等待驱动器出现,然后继续启动。我通过在内核命令break=mount行上提供来实现这一点。

因此,通过此 KVM 配置和break=mount选项,我最终可以无需修改地启动我的磁盘映像。


快速提示:bus=scsi 现在是 if=scsi。

相关内容