VirtIOを使う

VirtIOのインストール

パッチを当てる

VirtIOはPlan 9の標準ディストリビューションには含まれないので、 9legacyのパッチを当てます。

% cd /
% hget http://www.9legacy.org/9legacy/patch/pc-sdvirtio.diff | ape/patch -p1
% hget http://www.9legacy.org/9legacy/patch/pc-ethervirtio.diff | ape/patch -p1

自前のツールですが、9legacy/installを使うと便利です。

% 9legacy/init
% 9legacy/installall <{9legacy/stable}
% 9legacy/apply

次に、カーネルコンフィグへVirtIOドライバを追加します。 ここで不要なドライバを削除しておいてもいいかもしれません。

% cd /sys/src/9/pc
% ed pccpuf

カーネルコンフィグは、たとえば以下のように。

link
    ethervirtio    pci

misc
    sdvirtio        pci sdscsi

また、9loadにも足しておかないとデバイスが見つからなくて ブートできなくなるので、9loadのコンフィグにもsdvirtioを足します。

% cd /sys/src/9/pcboot
% ed load

loadはカーネルをロードするだけなので、sdvirtioがあれば十分だと思います。 もし9bootも必要なら、そっちにはethervirtioを追加しましょう。

インストール

カーネルのビルドを行います。

% cd /sys/src/9/pc
% mk 'CONF=pccpuf'

次にローダのビルド。

% cd /sys/src/9/pcboot
% ed load
% mk 9load

9fat領域へカーネルとローダをコピーしたらインストール完了です。

# 9fat:
# cp 9load /n/9fat/9load (きちんとdisk/format使ったほうが良いかも)
# cp 9pccpuf /n/9fat/9pccpuf

デバイス名を変更

VirtIOを有効にすると、デバイス名がsdC0からsdF0に変わります。 そのため、fossil等、デバイス名の変更が必要です。 必ず、新しいカーネルでブートする前に実施しなくてはいけません。

まずplan9.iniを変更。

bootfile=sdF0!9fat!9pccpuf
bootargs=local!#S/sdF0/fossil
bootdisk=local!#S/sdF0/fossil

fossilのconfにも設定が入っているので修正します。

# fossil/conf /dev/sdC0/fossil >fossil.conf
# ed fossil.conf
fsys main config /dev/sdF0/fossil
# fossil/conf -w /dev/sdC0/fossil fossil.conf

ventiを使っている場合は、ventiの設定も修正が必要です。

% venti/conf /dev/sdC0/arenas >venti.conf
% ed venti.conf
isect /dev/sdF0/isect
arenas /dev/sdF0/arenas
% venti/conf -w /dev/sdC0/arenas <venti.conf

このあと仮想マシンのVirtIOを有効にするのでシャットダウンさせます。

仮想マシンのVirtIO

シャットダウンし終わったら、カスタムOSインストールを実行するか、 ISOイメージインストールでVirtIOを有効にしてインストールを実行します。 このとき、あくまで目的はVirtIOを有効にするだけなので、 イメージから起動したらすぐに再起動させてしまってください。 (VirtIO有効無効の切り替えはOSインストール時しかできないので)

これで正しく設定できていればVirtIOドライバを使ったカーネルが動作します。

終わりに

さくらVPSは、OS再インストールをすると 仮想マシンのスイッチ設定がリセットされるので、 ファイルサーバから/を得ている場合はスイッチの設定も忘れずに。

困ったときの対応

少しはまったことをまとめました。

ブートしなくなった場合

Plan 9のISOイメージからブートさせると、 インストールするかCDからブートするかを選べるので、 CDからブートして必要なリカバリを行いましょう。

ISOイメージのアップロードができない場合

ISOをアップロードしようとしたら、 以下のようなエラーで失敗するときがあります。

sftp> put plan9.iso
Uploading plan9.iso to /iso/plan9.iso
remote open("/iso/plan9.iso"): Failure

さくらの VPS で ISO イメージがアップできないによると、ISOアカウントを削除したうえで、 仮想マシンを起動・停止するといいそうです。

それでもだめな場合は、起動・停止のかわりに カスタムOSインストール・停止させると解消します。