pygrub
しばらくXenとXenを使用した後、KVM / qemuを使用して同様の操作を実行したいと思います。
デフォルトでは、Linuxディストリビューションのルートファイルシステム(パーティションなし、ディスクに直接FSのみを含む)を含むLVM論理ボリューム(ファイルかもしれません)があります。これには/boot/grub/grub .cfgも含まれています。起動できるようにしたいです。
私はDebian / Ubuntuのgrub-firmware-qemuパッケージがそれのために設計されているという印象を受けましたが、まだ機能していません。 AFAICT、grub.binイメージには、grub.cfgファイルといくつかのメニューオプション(multiboot.img検索やgrub.cfg検索など)を含むハードコードされたメモリディスクが含まれていますが、実行時に取得するのはkvm -bios grub.bin
「互換性のないライセンス」です。だけです。 "エラーメッセージ。そして、他のgrub.cfgを使用して別のgrub.cfgを生成する方法がわかりませんgrub.bin
(これが唯一の方法ですconfigfile (hd0)/boot/grub/grub.cfg
)。
もちろん、これを行うには最小限のグラブ構成を使用してフロッピー、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 です。
つまり、仮想ディスク上の/boot/grubを確認するためにkvm起動を有効にするgrub image/grub.cfgをgrub.bin(で使用kvm -bios
)またはgrub.img(で使用)作成するにはどうすればよいですか?kvm -kernel
答え1
偶然にもDebianから来たようですgrub
。
-kernel grub.img
必要なgrubモジュールのみを含めると機能しますgrub-mkimage
。
-bios grub.bin
最新のグラブパッケージ(2.00-7)で動作します。experimental
しかし、grub.bin
付属のものはあまり役に立ちません。
このメモリディスクを使用してモジュールを保存し、オプションを使用して指定することをお勧めmemdisk
します。例えば、メニュー項目の1つは、メモリディスクを検索してそれ自体を探す。さらに、Debianパッケージにはqemu grubモジュールが含まれていないため、ソースパッケージからビルドしない限り他のgrub.binをビルドすることはできません(ファイルをバイナリ編集してgrub.cfgを変更することはできますが)。grub.cfg
grub.cfg
-c
grub-mkimage
/boot/grub/grub.cfg
この-bios grub.bin
方法は私にとって最もきれいに見えますが、-kernel
Debianパッケージが修正されるまでフロッピー方法を使います。
編集する:ata.mod
グラップモジュールは、BIOSbiosdisk.mod
で使用するときよりもはるかにゆっくりエミュレートされたIDEドライブを読み取ります(使用していないときのデフォルトのBIOS)。また、grubファームウェアはvirtio-blkまたはvirtio-scsiディスクをサポートしていないようですので、私の選択ではありません。seabios
-bios grub.bin
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のグラブがシリアルを使用するように設定されているか、少なくともグラフィックを使用するように設定されていないことを確認し、カーネルコンソールがttyS0に移動してそこからgettyを実行します)。また、VGAコンソールにも簡単に適用できます。
答え2
私はたくさんのウェブを検索しましたが、解決策が見つからなかった後、libvirt / kvmで使用するpygrub用のラッパーを作成しました。
遅くなりましたが、このソリューションがあなたに役立つかもしれないので、共有したいと思いました。これはlibvirtフックスクリプトです。スクリプトは準備/開始イベントでドメイン構成を解析し、pygrubに利用可能なディスクを介してカーネルを見つけ、次にイメージをホストの必須フォルダにコピーします。