PyGRUBとは、Xenの準仮想化ドメイン(PV)で利用できるブートローダです。PyGRUBを使用すると、ドメイン起動時にゲストOSのディスクイメージ上から必要なファイル(カーネルおよびRAMディスクイメージ)を読み出して起動することができます。これにより、ドメイン起動にあたりdomain-0のファイルシステム上へゲストのカーネルファイルなどに事前準備する必要がなくなりkernel行とextra行に具体的な値を記述する必要がなくなります。
PyGRUBは多数のファイルシステムをサポートしており、最近のバージョンでは、なんとOpenSolarisのZFS上のGRUB設定ファイルを使って純仮想化ドメインを起動できます。
■ PyGRUBとpv-grub
同種のツールとしてはpv-grubがあります。PyGRUBもpv-grubも基本的にやってくれる事は同じなのですが、PyGRUBは
Pythonベースのもどきスクリプトであるのに対してpv-grubは準仮想化ドメイン向けにportされたGRUB(つまり、ブートローダの機能としてはx86の物理マシンで使われているものをXenに対応させたもの)である、という違いがあります。ただ、Xen 3.4.2に含まれるpv-grubではZFSを扱えないようです(しっかり確認したわけではないのですが)。
なお、
現在ではPyGRUBの利用は推奨されていません。なぜなら、PyGRUBはdomain-0上で動作するプログラムであり、細工されたdomain-Uイメージを処理させることによりdomain-0への干渉を許す可能性があるためです。pv-grubはブートローダの処理自体がDomain-U上で動作するため、いくらかセキュリティ面において優位性があります。
■ OpenSolaris のブートに必要なファイルとパラメータ
OpenSolarisをPVドメインとして動作させる際に必要なものとして、下記のファイルとパラメータがあります。
unix ファイル …… OpenSolarisのカーネル
boot_archive ファイル …… RAMイメージ
ルートファイルシステムとしてマウントするファイルシステムの位置情報
カーネル、およびRAMイメージのファイルはOpenSolarisのファイルシステム上にあるものですので、これをLinuxで動作するdomain-0のファイルシステム上にコピーするのはそれほど難しいことではありません。また、ルートファイルシステムの場所は、OpenSolarisのファイルシステム上にあるGRUBの設定ファイルを見れば解決可能です。
しかし、実際に運用をはじめると、カーネルやRAMイメージをゲストのファイルシステムから適宜抽出したり、もしくはBoot Environmentを作成/更新するたびにbootfsの値をドメインの定義ファイルに書くのは煩雑な作業となります。
■ PyGRUBを使ったOpenSolarisの起動
では早速PyGRUBを使ってOpenSolarisを起動してみましょう。以下にドメイン定義ファイルの記述例を示します。
PyGRUBを使用しない場合の例(参考)
kernel="/boot/os200811/unix"
ramdisk="/boot/os200811/boot_archive"
extra= '/platform/i86xpv/kernel/amd64/unix –B
zfs-bootfs=rpool/52,bootpath="/xpvd/xdf@0:a"’
PyGRUBを使用する場合の例
bootloader="/usr/bin/pygrub"
いかがでしょうか?ドメイン定義ファイルの内容が非常にすっきりしたことでしょう。
この方法を使うと、OpenSolarisのPVドメインを、ゲストのファイルシステム上にある最新カーネル、およびbeadmで実際にアクティブ化されているBEから自動的に起動することが可能です。
■ Live CDの起動にも使える
PyGRUBはZFSをサポートしていますが、そのほかISO9660もサポートしていますので OpenSolaris LiveCD をPVで起動するためにも使えます。