KVM, поскольку он основан на qemu, эмулирует жесткий диск как / dev / hda через адаптер IDE. Однако мои образы (взятые с реальной машины) предполагают, что загрузочным диском является / dev / sda. Это, конечно, можно изменить, но поскольку эта информация встроена глубоко в initramfs, используемые для ядра, и я все еще хочу иметь возможность загружать образ на реальном оборудовании, я бы предпочел не трогать его.
Есть ли у меня способ заставить диск отображаться как / dev / sda вместо / dev / hda?
(Кроме того, Xen - это для меня возможность, но Xen + HVM имеет ту же проблему, поскольку также использует аппаратную эмуляцию qemu.)
Собственно, подходящий для меня ответ нашла сама.
kvm -drive file=x,bus=scsi,boot=on
Опция привода позволяет указать шину. Но почему-то по умолчанию scsi не загрузочный. Однако KVM поддерживает boot=on
флаг для создания загрузочного диска scsi.
Однако у этого решения все еще была проблема - по какой-то причине потребовалось несколько секунд, чтобы ядро правильно определило диск scsi (я предполагаю, что это какое-то устройство USB, ожидающее урегулирования или подобное). Из-за этого мне пришлось вручную прервать загрузку initramfs в подходящем месте, дождаться появления диска, а затем продолжить загрузку. Я сделал это, поставив break=mount
в командной строке ядра.
Итак, с этой конфигурацией KVM и break=mount
вариант, я наконец смог загрузить образ диска без изменений.
Краткое примечание: bus = scsi в настоящее время является if = scsi.
Хотя QEMU может эмулировать USB-накопитель, AFAIK, он не может загружаться напрямую с него. KVM должен быть похожим. Еще один вариант, который я бы порекомендовал вам, - это. Я не уверен, что это сработает, потому что я сам не пробовал, вероятно, это было бы.
Используйте образ диска в качестве USB-накопителя. Однако загрузитесь, указав ядро и initrd непосредственно в командной строке. Итак, примерно так:
kvm -kernel <kernel image> -initrd <initrd image> -usb <usb options> ...
Чтобы сделать эмуляцию более точной, вы должны использовать образы ядра и initrd, извлеченные из образа вашего диска. Это загрузит ваше ядро, в которое должны быть встроены драйверы USB для обнаружения /dev/sda
а затем загрузите свой initrd, который сотворит чудеса. Затем загрузка должна продолжиться с использованием образа вашего диска как /root
по-прежнему.