arrancar qemu / kvm directamente desde un sistema de archivos

8

Después de haber usado Xen y su contenido pygrubdurante un tiempo, ahora estoy tratando de hacer algo similar con KVM / qemu.

Básicamente, tengo un volumen lógico LVM (aunque también podría ser un archivo) que contiene el sistema de archivos raíz de una distribución de Linux (sin particiones, solo FS directamente en el disco) que también contiene un /boot/grub/grub.cfg, y me gustaría poder arrancar eso.

Tenía la impresión de que el paquete grub-firmware-qemu en Debian / Ubuntu estaba destinado a eso, pero no he logrado que funcione. AFAICT, la imagen grub.bin contiene un disco duro con un archivo grub.cfg con algunas opciones de menú (como buscar un multiboot.img o buscar un grub.cfg), pero todo lo que obtengo cuando se ejecuta kvm -bios grub.bines una "licencia incompatible " mensaje de error. Y no estoy muy seguro de cómo generar un diferente grub.bincon un grub.cfg diferente (uno que solo funcionaría configfile (hd0)/boot/grub/grub.cfg).

Por supuesto, podría crear una imagen de disquete o cdrom o disco con una configuración mínima de grub que haga exactamente eso, pero tengo la sensación de que debería haber una forma más limpia / canónica de hacerlo y mi investigación ha recuperado muy poco. lejos.

Supongo que también se podría usar la -kernelopción qemu , pero de nuevo, no sé cómo generar un grub.imgpara eso. (el uso de un grub.img generado con grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modtrae de nuevo el mismo mensaje de error de "licencia incompatible").

Eso está en Debian con la versión 1.99-23 de los paquetes grub y 1.1.2 + dfsg-2 de kvm / qemu.

En resumen, ¿cómo debo crear un grub.bin (para usar kvm -bios) o un grub.img (para usar kvm -kernel) para que kvm arranque una imagen grub que pueda analizar / boot / grub /grub.cfg en el disco virtual?

Stéphane Chazelas
fuente

Respuestas:

6

Como sucede, parece un error en el paquete de Debian grub.

El -kernel grub.imgenfoque funciona si solo incluyo los módulos grub que necesito grub-mkimage.

El -bios grub.bintrabaja con el paquete de comida de más reciente a partir de experimental(2,00-7). Sin embargo, lo grub.binque viene con él no es muy útil.

Viene con un memdiskque viene con el grub.cfg. Hubiera sido mejor usar ese disco de memoria para guardar los módulos y grub.cfgespecificarlo con la -copción de grub-mkimage. Por ejemplo, una de las entradas del menú busca /boot/grub/grub.cfgy se encuentra en el disco como resultado. Además, el paquete debian no incluye los módulos qemu grub, por lo que no puede crear un grub.bin diferente (aunque puede editar el archivo binario para cambiar grub.cfg) a menos que lo haga desde el paquete fuente.

El -bios grub.binenfoque suena como el enfoque más limpio para mí, pero -kernelusaré el enfoque o disquete hasta que se arregle el paquete de Debian.

EDITAR : bueno, el ata.modmódulo grub para leer unidades IDE emuladas es mucho más lento que usarlo biosdisk.moden combinación con seabios(la BIOS predeterminada cuando no se usa -bios grub.bin). Además, parece que el firmware de grub no admite discos virtio-blk ni virtio-scsi, por kvm -bios grub.binlo que no será una opción para mí.

En caso de que alguien quiera seguir ese camino, ahora estoy usando (sintaxis 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

Y -kernel grub.img -nographicpasó a kvm. Esto es para arrancar máquinas virtuales Linux sin gráficos (solo una interfaz en serie, así que asegúrese de que el grub de la máquina virtual esté configurado para usar serie (o al menos no configurado para usar gráficos), que la consola del kernel vaya a ttyS0 y que ejecute un getty en allí). También se puede adaptar fácilmente para trabajar con consolas VGA.

Stéphane Chazelas
fuente
2

Después de mucha navegación web, no he encontrado ninguna solución y he creado un contenedor para pygrub para usar con libvirt / kvm.

Quizás esta solución sea útil para usted, incluso tarde, por lo que me gustaría compartirla. Es un script de libvirt hook. El script analiza la configuración del dominio en el evento prepare / begin, permite que pygrub encuentre el kernel a través de los discos disponibles y luego copie las imágenes a la carpeta deseada en el host.

Echa un vistazo a github.com/baquilla/pygrub-kvm-wrapper .

Juan Javier Baca
fuente