web-dev-qa-db-ja.com

ファイルシステムから直接qemu / kvmを起動する

Xenとそのpygrubをしばらく使用していたので、今はKVM/qemuで同様のことをしようとしています。

基本的に、Linuxディストリビューションのルートファイルシステム(パーティション化なし、ディスク上に直接FS)のみ)を含むLVM論理ボリューム(ファイルの場合もあります)があります。 /boot/grub/grub.cfg、それを起動できるようにしたいと思います。

Debian/Ubuntuのgrub-firmware-qemuパッケージはそのためのものだという印象を受けましたが、うまく機能させることができませんでした。 AFAICT、grub.binイメージには、いくつかのメニューオプション(multiboot.imgの検索やgrub.cfgの検索など)を含むgrub.cfgファイルを含むハードコードされたmemdiskが含まれていますが、_kvm -bios grub.bin_を実行するとすべてが表示されます「互換性のないライセンス」エラーメッセージです。また、別のgrub.cfg(configfile (hd0)/boot/grub/grub.cfgのみを実行するもの)を使用して別の_grub.bin_を生成する方法がよくわかりません。

もちろん、それを行う最小限のgrub構成でフロッピー、CD-ROM、またはディスクイメージを作成することはできますが、それを行うためのよりクリーンで標準的な方法があるはずだと感じており、私の研究ではほとんど戻っていません。はるかに。

Qemuの_-kernel_オプションも使用できると思いますが、そのために_grub.img_を生成する方法がわかりません。 (grub-mkimage -O i386-pc -o grub.img -c =(echo 'configfile (hd0)/boot/grub/grub.cfg') /usr/lib/grub/i386-pc/*.modで生成されたgrub.imgを使用すると、同じ「互換性のないライセンス」エラーメッセージが再度表示されます)。

これは、grubパッケージのバージョン1.99-23とkvm/qemuの1.1.2 + dfsg-2を使用したdebianにあります。

つまり、grub.bin(_kvm -bios_で使用)またはgrub.img(_kvm -kernel_で使用)のいずれかを作成して、kvmにgrubイメージを起動させるにはどうすればよいですか?仮想ディスク上の/boot/grub/grub.cfgを解析できますか?

8

たまたま、それはgrubのdebianのパッケージのバグのように見えます。

-kernel grub.imgアプローチは、grub-mkimageに必要なgrubモジュールのみを含める場合に機能します。

-bios grub.binは、experimental(2.00-7)の新しいgrubパッケージで動作します。ただし、付属のgrub.binはあまり役に立ちません。

grub.cfgに付属するmemdiskが付属しています。そのmemdiskを使用してモジュールを保持し、grub.cfg-cgrub-mkimageオプションで指定する方がよいでしょう。たとえば、メニューエントリの1つが/boot/grub/grub.cfgを検索し、その結果、memdiskで自分自身を見つけます。また、debianパッケージにはqemu grubモジュールが含まれていないため、ソースパッケージから作成しない限り、別のgrub.binをビルドすることはできません(ファイルをバイナリ編集してgrub.cfgを変更することはできます)。

-bios grub.binアプローチは私にとって最もクリーンなアプローチのように聞こえますが、debianパッケージが修正されるまで、-kernelまたはフロッピーアプローチを使用します。

[〜#〜] edit [〜#〜]:ええと、エミュレートされたIDEドライブを読み取るためのata.modgrubモジュールはseabiosと組み合わせてbiosdisk.modを使用するよりもはるかに遅いです(-bios grub.binを使用しない場合のデフォルトのBIOS)また、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コンソールでも動作するように簡単に適合させることができます。

6

多くのWebブラウジングの後、解決策が見つからず、libvirt/kvmで使用するpygrubのラッパーを作成しました。

たぶん、このソリューションは遅くてもあなたに役立つので、私はそれを共有したいと思います。これはlibvirtフックスクリプトです。スクリプトは、prepare/beginイベントでドメイン構成を解析し、pygrubが使用可能なディスクからカーネルを見つけて、ホスト内の目的のフォルダーにイメージをコピーできるようにします。

github.com/baquilla/pygrub-kvm-wrapper を見てください。

2