Как отключить нежелательную попытку загрузки iPXE в Libvirt / qemu-kvm?

12

Каким-то образом после обновления до 12.04 мои виртуальные машины всегда загружаются при первой попытке загрузки из сети. Видеть это:

скриншот вирт-менеджера

пока у меня нет установленной конфигурации PXE:

Конфигурация загрузки PXE

Я пробовал:

  • чтобы отключить SPICE, изменив значение emulatorс /usr/bin/kvmот /usr/bin/kvm-spice, отредактировав XML.
  • Ctrl+ Bдля настройки iPXE, но он не позволяет отключить это как параметр загрузки.
  • установка другого типа NIC - не вариант, мне нужно virtioпо соображениям производительности. Однако e1000eтоже не работает.
  • снятие NIC: работает. Однако мне нужна сеть.
  • Погуглив вокруг. Жесткий. Много результатов о сбое настроенной загрузки PXE.

Не большая проблема, но она увеличивает время загрузки здесь на 50-100% (загрузка с SSD), так что это относительно долго и раздражает меня.

Как я могу отключить это и загружаться с виртуального жесткого диска напрямую?

gertvdijk
источник

Ответы:

6

Короткий ответ

Выполните обновление до libvirt 0.9.10+ (доступно в Quantal) и добавьте эту <rom bar='off'/>опцию в конфигурацию интерфейса определения XML машины.

Длинный ответ

Теперь, когда я на самом деле использую опцию загрузки iPXE, я вижу, что задержка, возникающая на экране SeaBIOS, не является реальной попыткой загрузки. Он просто загружает дополнительное сетевое ПЗУ Virtio, и на это уходит несколько раздражающих секунд, то есть он еще не пытается загрузить iPXE . Это заставило меня снова прочитать документацию по libvirt, и я сделал интересное открытие.

Насколько я мог найти, начиная с libvirt 0.9.7, поведение изменилось для загрузки дополнительных ПЗУ интерфейса по умолчанию. Ubuntu 11.10 поставляется с 0.9.2, Ubuntu 12.04 поставляется с 0.9.8. Это определенно имеет смысл относительно того, почему я вижу это после обновления до 12.04.

Более того, это стало настраиваемым в libvirt версии 0.9.10 с <rom bar='off'/>опцией в XML! (см. здесь ) Однако, эта версия libvirt недоступна в Ubuntu 12.04, и мне придется обновить ее до 12.10 или сделать бэкпорт. Это заставляет Ubuntu 12.04 проваливаться между двумя стульями.

Другие обходные пути - удаление файлов дополнительного ПЗУ, как указано @AH ', и изменение «файловой системы» SeaBIOS, как указано @NlightNFotis. Однако оба способа в основном полностью отключают iPXE, и он не настраивается (если придерживаться только virtioсетевых устройств). Поскольку у меня смешанная установка компьютеров iPXE и ​​компьютеров, не поддерживающих PXE, мне действительно нужно, чтобы это можно было настраивать.

gertvdijk
источник
Где определение XML машины?
Брайс Гуинта
1
@BryceGuinta Сначала создайте ВМ, а затем отредактируйте ее определение XML (дополнительно) с помощью командыvirsh edit <domain>
gertvdijk
5

Мои эксперименты по той же проблеме дали мне несколько советов:

Пакет kvm-ipxeустанавливает несколько дополнительных ПЗУ PXE в /usr/share/qemu/:

pxe-e1000.rom
pxe-ne2k_isa.rom
pxe-pcnet32.rom
pxe-rtl8139.rom
pxe-virtio.rom

Каким-то образом они автоматически обнаруживаются и используются seabios при загрузке с одного из этих сетевых адаптеров. Когда я делаю chmod a= pxe*.romэти файлы и запускаю виртуальную машину, я получаю сообщение об ошибке

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"

но он загружается чисто и без PXE.

AH
источник
Благодарю. Это дает мне немного обходного пути: использование virtioдля общих сетевых устройств и e1000eдля виртуальных машин, которым требуется PXE. Тем не менее, я все еще думаю, что это ошибка. Так или иначе, Libvirt не может успешно передать нужные параметры загрузки в SeaBIOS.
gertvdijk
Что делает chmod a=?
Брайс Гуинта
5

Мне удалось обойти это в Ubuntu 12.04, передав следующие опции в qemu-kvm из командной строки (установка трюка в romfile пустая):

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0
RolKau
источник
Круто, но могу ли я указать это в своем определении компьютера Libvirt XML?
gertvdijk
Если вы делаете многократную перезагрузку из командной строки, это путь. Это добавляет немного шума, но мгновенно убивает iPXE, не требуя, чтобы вы редактировали файлы XML, уничтожали все сети или подобное.
i336_
0

Из ваших рисунков видно, что, скорее всего, это связано с BIOS BIOS. Конфигурация виртуальной машины не должна перезаписывать SeaBIOSнастройки, что должно вызывать PXEпервую загрузку виртуальной машины .

Для первого возможного решения попробуйте посмотреть, можете ли вы войти в BIOS виртуальной машины и отредактировать имеющиеся там параметры.

ПРИМЕЧАНИЕ. Будет продолжать обновлять ответ, пока мое исследование раскрывает больше возможных решений или причин.

[EDIT # 1]: Вы можете найти информацию о том, как настроить порядок загрузки в SeaBIOS здесь . Это должно решить проблему.

NlightNFotis
источник
Как я могу войти в BIOS виртуальной машины? Википедия о SeaBIOS говорит мне, что я должен попробовать F12 во время загрузки, но это только инициирует пропуск попытки iPXE один раз.
gertvdijk
@gertvdijk Я сейчас изучаю это. Я вернусь к вам, как только узнаю.
NlightNFotis
@gertvdijk Кажется, это как-то связано: seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis
Спасибо, узнал новое сегодня. Однако, похоже, что это применимо ко всей системе и касается создания новой CBFS (основной загрузочной файловой системы). Насколько я вижу, он также полностью отключает загрузку PXE. Мне не нравится этот подход, и я думаю, что должна быть возможность предотвратить время выполнения попыток загрузки iPXE, как это возможно в графическом интерфейсе virt-manager.
gertvdijk
@gertvdijk Как вы знаете, это отключает его? Все, что я могу видеть, это установить порядок загрузки, то есть что-то загружается до чего-то другого .
NlightNFotis
-1

Я смог предотвратить это с помощью «-net none»:

# qemu-system-i386 -net none
Каталин П
источник
Но тогда у вас нет никакой сети вообще! Я считаю, что это не совсем ответ.
gertvdijk
Извините, я упустил тот факт, что OP все еще нуждается в сети. В моем случае работа без сети была приемлемой.
Каталин Р