基于qemu的KVM通过IDE适配器将硬盘模拟为/ dev / hda。 但是,我的图像(从真实机器中获取)假定启动驱动器为/ dev / sda。 这当然可以改变,但是因为这些信息深深embedded到内核所使用的initramfs中,所以我仍然希望能够在真实的硬件上启动镜像,我宁愿不去碰它。
有没有办法让我的驱动器显示为/ dev / sda而不是/ dev / hda?
(另外,Xen对我来说也是可能的,但是Xen + HVM也有同样的问题,因为它也使用qemu硬件仿真。)
虽然QEMU能够模拟USB存储设备AFAIK,但无法直接从它启动。 KVM应该是相似的。 我会为你推荐的另一个select是这样的。 我不确定它是否会起作用,因为我可能没有尝试过。
使用您的驱动器映像作为USB存储设备。 但是,通过直接在命令行上指定内核和initrd来启动。 所以,这样的事情:
kvm -kernel <kernel image> -initrd <initrd image> -usb <usb options> ...
为了使仿真更准确,您应该使用从驱动器映像中提取的内核和initrd映像。 这将启动你的内核,它应该有内置的USB驱动程序来检测/dev/sda ,然后加载你的initrd,这将是魔术。 然后,启动应像往常一样继续使用您的驱动器映像作为/root 。
其实,我自己find了合适的答案。
kvm -drive file = x,bus = scsi,boot = on
驱动器选项允许指定总线。 但由于某种原因,默认情况下,scsi不可启动。 但是,KVM支持boot=on标志,以使scsi驱动器可以启动。
然而,这个解决scheme仍然有一个问题 – 出于某种原因,它需要几秒钟的内核scsi驱动器正确检测(我猜这是一些USB设备安定等待或类似)。 正因为如此,我不得不在适当的位置手动打断我的initramfs启动,等待驱动器出现,然后继续启动。 我通过在内核命令行上提供了break=mount来实现这一点。
所以,通过这个KVMconfiguration和break=mount选项,我终于可以在不修改的情况下启动我的磁盘映像。
快速提示:bus = scsi现在是if = scsi。