boot qemu / kvm langsung dari sistem file

8

Setelah menggunakan Xen dan pygrubuntuk sementara waktu, saya sekarang mencoba melakukan sesuatu yang mirip dengan KVM / qemu.

Pada dasarnya, saya memiliki volume logis LVM (walaupun itu bisa juga berupa file) yang berisi sistem file root dari distribusi Linux (tanpa partisi, hanya FS langsung pada disk) yang juga berisi /boot/grub/grub.cfg, Dan saya ingin bisa mem-boot itu.

Saya mendapat kesan bahwa paket grub-firmware-qemu di Debian / Ubuntu dimaksudkan untuk itu, tetapi saya belum berhasil membuatnya. AFAICT, gambar grub.bin berisi memdisk hardcoded dengan file grub.cfg dengan beberapa opsi menu (seperti mencari multiboot.img atau mencari grub.cfg), tetapi yang saya dapatkan saat menjalankan kvm -bios grub.binadalah "lisensi yang tidak kompatibel." " pesan eror. Dan saya tidak terlalu yakin bagaimana menghasilkan yang berbeda grub.bindengan grub.cfg yang berbeda (yang hanya akan dilakukan configfile (hd0)/boot/grub/grub.cfg).

Tentu saja, saya dapat membuat floppy atau cdrom atau disk image dengan konfigurasi grub minimal yang melakukan hal itu, tetapi saya punya perasaan bahwa harus ada cara yang lebih bersih / kanonik untuk melakukannya dan penelitian saya telah membawa kembali sangat sedikit sehingga jauh.

Saya kira orang bisa menggunakan -kernelopsi qemu juga, tapi sekali lagi, saya tidak tahu bagaimana menghasilkan grub.imgitu. (menggunakan grub.img yang dihasilkan dengan grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modmemunculkan pesan kesalahan "lisensi yang tidak kompatibel" yang sama lagi).

Itu ada di debian dengan versi 1.99-23 dari paket grub dan 1.1.2 + dfsg-2 dari kvm / qemu.

Jadi, singkatnya, bagaimana saya harus membuat grub.bin (untuk digunakan bersama kvm -bios) atau grub.img (untuk digunakan bersama kvm -kernel) agar kvm mem-boot image grub yang dapat menguraikan / boot / grub /grub.cfg pada disk virtual?

Stéphane Chazelas
sumber

Jawaban:

6

Seperti yang terjadi, sepertinya ada bug dalam paket debian grub.

The -kernel grub.imgPendekatan bekerja jika saya hanya menyertakan modul grub saya butuhkan pada grub-mkimage.

The -bios grub.binbekerja dengan paket grub baru dari experimental(2,00-7). Namun, grub.binyang menyertainya tidak terlalu berguna.

Itu datang dengan memdiskyang datang dengan grub.cfg. Akan lebih baik menggunakan memdisk itu untuk memegang modul dan grub.cfgditentukan dengan -copsi grub-mkimage. Sebagai contoh, salah satu entri menu mencari /boot/grub/grub.cfgdan menemukan dirinya di memdisk sebagai hasilnya. Juga, paket debian tidak termasuk modul qemu grub, jadi Anda tidak bisa membuat grub.bin yang berbeda (meskipun Anda bisa biner mengedit file untuk mengubah grub.cfg) kecuali Anda melakukannya dari paket sumber.

The -bios grub.binPendekatan suara seperti pendekatan terbersih dengan saya, tapi saya akan menggunakan -kernelatau floppy pendekatan sampai paket debian adalah tetap.

EDIT : well, ata.modmodul grub untuk membaca drive IDE yang diemulasi jauh lebih lambat daripada menggunakan biosdisk.moddalam kombinasi dengan seabios(BIOS default saat tidak menggunakan -bios grub.bin). Juga, sepertinya firmware grub tidak mendukung disk virtio-blk atau virtio-scsi, jadi kvm -bios grub.bintidak akan menjadi pilihan bagi saya.

Kalau-kalau ada yang mau menyusuri jalan itu, saya sekarang menggunakan (sintaks 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

Dan -kernel grub.img -nographicditeruskan ke kvm. Yaitu untuk mem-boot Linux VMs tanpa grafis (hanya antarmuka serial, jadi pastikan bahwa grub VM dikonfigurasikan untuk menggunakan serial (atau setidaknya tidak dikonfigurasikan untuk menggunakan grafis), bahwa konsol kernel masuk ke ttyS0 dan Anda menjalankan getty di sana). Itu dapat dengan mudah diadaptasi untuk bekerja untuk konsol VGA juga.

Stéphane Chazelas
sumber
2

Setelah banyak browsing web saya belum menemukan solusi dan saya telah membuat pembungkus untuk pygrub untuk digunakan dengan libvirt / kvm.

Mungkin solusi ini berguna untuk Anda, bahkan terlambat, jadi saya ingin membagikannya. Ini adalah naskah kait libvirt. Script mem-parsing konfigurasi domain pada acara persiapan / mulai, memungkinkan pygrub menemukan kernel melalui disk yang tersedia dan kemudian menyalin gambar ke folder yang diinginkan di host.

Lihatlah github.com/baquilla/pygrub-kvm-wrapper .

Juan Javier Baca
sumber