загрузка qemu / kvm напрямую из файловой системы

8

Пользуясь Xen и его pygrubнекоторое время, я сейчас пытаюсь сделать нечто подобное с KVM / qemu.

По сути, у меня есть логический том LVM (хотя это может быть и файл), который содержит корневую файловую систему дистрибутива Linux (без разметки, только FS непосредственно на диске), которая также содержит /boot/grub/grub.cfg, и я хотел бы иметь возможность загрузить это.

У меня сложилось впечатление, что для этого предназначен пакет grub-firmware-qemu в Debian / Ubuntu, но мне не удалось заставить его работать. AFAICT, образ grub.bin содержит жестко запрограммированный memdisk с файлом grub.cfg с несколькими опциями меню (например, поиск multiboot.img или поиск grub.cfg), но все, что я получаю при работе, kvm -bios grub.bin- это «несовместимая лицензия» " сообщение об ошибке. И я не слишком уверен, как создать другой grub.binс другим grub.cfg (тот, который только сделал бы configfile (hd0)/boot/grub/grub.cfg).

Конечно, я мог бы создать образ дискеты, компакт-диска или диска с минимальной конфигурацией grub, которая делает именно это, но у меня есть ощущение, что должен быть более чистый / канонический способ сделать это, и мое исследование принесло очень мало далеко.

Я полагаю, что можно использовать -kernelопцию qemu , но, опять же, я не знаю, как сгенерировать grub.imgдля этого. (при использовании grub.img, сгенерированного с помощью, снова grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modпоявляется то же самое сообщение об ошибке «несовместимая лицензия»).

Это на Debian с версией 1.99-23 пакетов grub и 1.1.2 + dfsg-2 из kvm / qemu.

Итак, вкратце, как мне следует создать grub.bin (для использования kvm -bios) или grub.img (для использования kvm -kernel), чтобы kvm загрузил образ grub, который может анализировать / boot / grub /grub.cfg на виртуальном диске?

Стефан Шазелас
источник

Ответы:

6

Как это происходит, это похоже на ошибку в пакете Debian grub.

-kernel grub.imgПодход работает , если я включаю только резьбовые модули мне нужно на grub-mkimage.

-bios grub.binРаботает с более новой упаковкой потайной из experimental(2.00-7). Однако то, grub.binчто идет с ним, не очень полезно.

Это идет с, memdiskкоторый идет с grub.cfg. Было бы лучше использовать этот memdisk для хранения модулей и grub.cfgуказывать их с -cопцией grub-mkimage. Например, один из пунктов меню ищет /boot/grub/grub.cfgи в результате находит себя в memdisk. Кроме того, пакет debian не включает в себя модули qemu grub, поэтому вы не можете создать другой файл grub.bin (хотя вы можете редактировать файл в двоичном виде, чтобы изменить файл grub.cfg), если вы не сделаете это из исходного пакета.

Эти -bios grub.binзвуки подхода , как чистейшей подход ко мне, но я будут использовать -kernelили гибкий подход , пока пакет Debian не фиксирован.

РЕДАКТИРОВАТЬ : хорошо, ata.modмодуль grub для чтения эмулируемых дисков IDE намного медленнее, чем использовать biosdisk.modв сочетании с seabios(BIOS по умолчанию, когда не используется -bios grub.bin). Кроме того, кажется, что прошивка grub не поддерживает диски virtio-blk и virtio-scsi, поэтому kvm -bios grub.binдля меня это не вариант.

Если кто-то захочет пойти по этому пути, я сейчас использую (синтаксис zsh):

grub-mkimage -O i386-pc -c =(print -l serial 'terminal_input serial' \
  'terminal_output serial' 'set prefix=(hd0)/boot/grub' '. grub.cfg') -o grub.img \
  at_keyboard configfile biosdisk ext2 linux test serial halt minicmd terminal cat

И -kernel grub.img -nographicперешел на квм. То есть для загрузки виртуальных машин Linux без графики (только последовательный интерфейс, поэтому убедитесь, что рабочая среда виртуальной машины настроена на использование последовательной (или, по крайней мере, не настроена на использование графики), что консоль ядра переходит к ttyS0 и что вы запускаете Гетти там). Его можно легко адаптировать для работы с консолями VGA.

Стефан Шазелас
источник
2

После долгого просмотра веб-страниц я не нашел никакого решения и создал оболочку для pygrub, которая будет использоваться с libvirt / kvm.

Может быть, это решение полезно для вас, даже поздно, поэтому я хотел бы поделиться им. Это скрипт ловушки libvirt. Сценарий анализирует конфигурацию домена по событию prepare / begin, позволяет pygrub найти ядро ​​по доступным дискам и затем скопировать образы в нужную папку на хосте.

Посмотрите на github.com/baquilla/pygrub-kvm-wrapper .

Хуан Хавьер Бака
источник