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


8

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

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

私は、Debian / Ubuntuのgrub-firmware-qemuパッケージがそのために意図されたものであるとの印象を受けましたが、それをうまく機能させることができませんでした。AFAICT、grub.binイメージには、いくつかのメニューオプション(multiboot.imgの検索やgrub.cfgの検索など)を含むgrub.cfgファイルを含むハードコードされたmemdiskが含まれていますが、実行時に取得できるのkvm -bios grub.binは「互換性のないライセンス」だけです。 " エラーメッセージ。またgrub.bin、別のgrub.cfgで別の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でのバージョン1.99-23のgrubパッケージと1.1.2 + dfsg-2のkvm / qemuです。

つまり、簡単に言うと、grub.bin(で使用kvm -bios)またはgrub.img(で使用kvm -kernel)を作成して、/ boot / grubを解析できるgrubイメージをkvmでブートする方法を教えてください。仮想ディスク上の/grub.cfg?

回答:


6

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

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

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

それは付属していますmemdiskが付属していますgrub.cfg。そのmemdiskを使用してモジュールを保持grub.cfgし、の-cオプションで指定することをお勧めしますgrub-mkimage。たとえば、メニューエントリの1つが/boot/grub/grub.cfg検索され、結果としてmemdiskに表示されます。また、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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.