avviare qemu / kvm direttamente da un file system


8

Avendo usato Xen ed i suoi pygrubper un po ', ora sto provando a fare qualcosa di simile con KVM / qemu.

Fondamentalmente, ho un volume logico LVM (anche se potrebbe anche essere un file) che contiene il filesystem di root di una distribuzione Linux (senza partizionamento, solo FS direttamente sul disco) che contiene anche un /boot/grub/grub.cfg, e vorrei poterlo avviare.

Avevo l'impressione che il pacchetto grub-firmware-qemu su Debian / Ubuntu fosse destinato a questo, ma non sono riuscito a farlo funzionare. AFAICT, l'immagine grub.bin contiene un memdisk hardcoded con un file grub.cfg con alcune opzioni di menu (come la ricerca di un multiboot.img o la ricerca di un grub.cfg), ma tutto ciò che ottengo durante l'esecuzione kvm -bios grub.binè una "licenza incompatibile " messaggio di errore. E non sono troppo sicuro di come generare un diverso grub.bincon un diverso grub.cfg (uno che farebbe solo configfile (hd0)/boot/grub/grub.cfg).

Certo, potrei creare un floppy o un cdrom o un'immagine del disco con una configurazione minima di grub che fa proprio questo, ma ho la sensazione che ci dovrebbe essere un modo più pulito / canonico per farlo e la mia ricerca ha riportato molto poco lontano.

Suppongo che si possa usare anche l' -kernelopzione di qemu , ma ancora una volta, non so come generare un grub.imgper quello. (l'uso di un grub.img generato con grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modriporta di nuovo lo stesso messaggio di errore "licenza incompatibile").

È su debian con la versione 1.99-23 dei pacchetti grub e 1.1.2 + dfsg-2 di kvm / qemu.

Quindi, in breve, come devo fare per creare un grub.bin (da usare con kvm -bios) o un grub.img (da usare con kvm -kernel) per fare in modo che kvm avvii un'immagine grub che sia in grado di analizzare / boot / grub /grub.cfg sul disco virtuale?

Risposte:


6

A quanto pare, sembra un bug nel pacchetto di debian di grub.

L' -kernel grub.imgapproccio funziona se includo solo i moduli grub di cui ho bisogno grub-mkimage.

Il -bios grub.binfunziona con il pacchetto grub più recente da experimental(2,00-7). Tuttavia, grub.binciò che ne consegue non è molto utile.

Viene fornito con un memdiskche viene fornito con grub.cfg. Sarebbe stato meglio usare quel memdisk per contenere i moduli e grub.cfgspecificarlo con l' -copzione di grub-mkimage. Ad esempio, una delle voci del menu cerca /boot/grub/grub.cfge si trova di conseguenza nel memdisk. Inoltre, il pacchetto debian non include i moduli qemu grub, quindi non è possibile creare un diverso grub.bin (sebbene sia possibile modificare binariamente il file per cambiare grub.cfg) a meno che non lo si faccia dal pacchetto sorgente.

L' -bios grub.binapproccio suona come l'approccio più pulito per me, ma userò l' -kernelapproccio o floppy fino a quando il pacchetto debian non sarà risolto.

EDIT : beh, il ata.modmodulo grub per leggere le unità IDE emulate è molto più lento rispetto all'uso biosdisk.modin combinazione con seabios(il BIOS predefinito quando non si utilizza -bios grub.bin). Inoltre, sembra che il firmware grub non supporti i dischi virtio-blk e virtio-scsi, quindi kvm -bios grub.binnon sarà un'opzione per me.

Nel caso in cui qualcuno voglia seguire questa strada, ora sto usando (sintassi 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

E -kernel grub.img -nographicpassato a kvm. Cioè per avviare VM Linux senza grafica (solo un'interfaccia seriale, quindi assicurati che grub della VM sia configurato per usare seriale (o almeno non configurato per usare grafica), che la console del kernel passi a ttyS0 e che tu esegua un getty lì). Può essere facilmente adattato per funzionare anche con console VGA.


2

Dopo molta navigazione web non ho trovato alcuna soluzione e ho creato un wrapper per pygrub da utilizzare con libvirt / kvm.

Forse questa soluzione è utile per te, anche in ritardo, quindi mi piacerebbe condividerla. È uno script hook libvirt. Lo script analizza la configurazione del dominio durante l'evento di preparazione / inizio, consente a pygrub di trovare il kernel attraverso i dischi disponibili e quindi copiare le immagini nella cartella desiderata nell'host.

Dai un'occhiata a github.com/baquilla/pygrub-kvm-wrapper .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.