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