直接从文件系统引导qemu / kvm


8

使用Xen及其pygrub一段时间后,我现在正尝试使用KVM / qemu做类似的事情。

基本上,我有一个LVM逻辑卷(尽管也可以是一个文件),它包含Linux发行版的根文件系统(没有分区,只有FS直接在磁盘上),还包含/boot/grub/grub.cfg,并且我希望能够启动它。

我给人的印象是Debian / Ubuntu上的grub-firmware-qemu软件包就是为此目的而设计的,但是我没有设法使其起作用。AFAICT,grub.bin映像包含一个带有grub.cfg文件的硬编码内存磁盘,该文件带有一些菜单选项(例如搜索multiboot.img或搜索grub.cfg),但是运行时得到的kvm -bios grub.bin只是一个“不兼容的许可证” “ 错误信息。而且我不太确定如何grub.bin用不同的grub.cfg(只能这样做configfile (hd0)/boot/grub/grub.cfg)生成不同的内容。

当然,我可以使用最小的grub配置创建一个软盘或cdrom或磁盘映像,但这样做的感觉是应该有一种更清洁/规范的方法,而且我的研究还很少。远。

我想一个人也可以使用qemu的-kernel选项,但是同样,我也不知道如何生成一个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上使用的grub软件包的版本1.99-23和kvm / qemu的1.1.2 + dfsg-2。

因此,简而言之,我应该如何创建grub.bin(与一起使用kvm -bios)或grub.img(与一起使用kvm -kernel),以使kvm引导能够解析/ boot / grub的grub映像/grub.cfg在虚拟磁盘上?

Answers:


6

碰巧,它看起来像是debian的软件包中的错误grub

-kernel grub.img如果仅包含所需的grub模块,则该方法有效grub-mkimage

-bios grub.bin与新的GRUB包从作品experimental(2.00-7)。但是,grub.bin它附带的不是很有用。

它带有memdisk附带的grub.cfg。最好使用该内存磁盘保存模块,并grub.cfg使用-c选项进行指定grub-mkimage。例如,菜单项/boot/grub/grub.cfg之一会在内存磁盘中查找并找到自己。另外,debian软件包不包含qemu grub模块,因此,除非您从源软件包中进行操作,否则您无法构建其他grub.bin(尽管您可以对文件进行二进制编辑以更改grub.cfg)。

-bios grub.bin对于我来说,这种方法听起来是最干净的方法,但是-kernel在固定debian软件包之前,我将使用或软盘方法。

编辑:好的,ata.mod用于读取仿真的IDE驱动器的grub模块要比biosdisk.modseabios(不使用时的默认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传递给kvm。那就是引导没有图形的Linux VM(只有串行接口),因此请确保VM的grub配置为使用串行(或至少没有配置为使用图形),内核控制台转到ttyS0并运行盖蒂)。也可以轻松地使其适用于VGA控制台。


2

经过大量的网络浏览后,我还没有找到任何解决方案,并且为pygrub制作了一个包装,用于libvirt / kvm。

也许这个解决方案对您有用,甚至迟到,所以我想分享一下。这是一个libvirt钩子脚本。该脚本在prepare / begin事件中解析域配置,让pygrub通过可用磁盘查找内核,然后将映像复制到主机中的所需文件夹。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.