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を解析できますか?
たまたま、それはgrub
のdebianのパッケージのバグのように見えます。
-kernel grub.img
アプローチは、grub-mkimage
に必要なgrubモジュールのみを含める場合に機能します。
-bios grub.bin
は、experimental
(2.00-7)の新しいgrubパッケージで動作します。ただし、付属のgrub.bin
はあまり役に立ちません。
grub.cfg
に付属するmemdisk
が付属しています。そのmemdiskを使用してモジュールを保持し、grub.cfg
を-c
のgrub-mkimage
オプションで指定する方がよいでしょう。たとえば、メニューエントリの1つが/boot/grub/grub.cfg
を検索し、その結果、memdiskで自分自身を見つけます。また、debianパッケージにはqemu grubモジュールが含まれていないため、ソースパッケージから作成しない限り、別のgrub.binをビルドすることはできません(ファイルをバイナリ編集してgrub.cfgを変更することはできます)。
-bios grub.bin
アプローチは私にとって最もクリーンなアプローチのように聞こえますが、debianパッケージが修正されるまで、-kernel
またはフロッピーアプローチを使用します。
[〜#〜] edit [〜#〜]:ええと、エミュレートされたIDEドライブを読み取るためのata.mod
grubモジュールは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コンソールでも動作するように簡単に適合させることができます。
多くのWebブラウジングの後、解決策が見つからず、libvirt/kvmで使用するpygrubのラッパーを作成しました。
たぶん、このソリューションは遅くてもあなたに役立つので、私はそれを共有したいと思います。これはlibvirtフックスクリプトです。スクリプトは、prepare/beginイベントでドメイン構成を解析し、pygrubが使用可能なディスクからカーネルを見つけて、ホスト内の目的のフォルダーにイメージをコピーできるようにします。