Gentoo Linux で kvm-qemu: 作成したGentoo LinuxゲストをVirtIO化する


 前回、kvm ゲストとして Gentoo Linux をインストールしたが、このままだとゲスト環境の NIC やストレージ周りが実際のハードウェアをエミュレーションしているため、オーバーヘッドが大きくなる。そのため、これらを VirtIO と呼ばれる準仮想化デバイスに置き換えてオーバーヘッドを減らす。

 まず、VirtIO ではない状態で仮想マシンを起動する。というのは、完全仮想化ストレージは /dev/sdxx といったデバイスファイルなのに対し、VirtIO の場合は /dev/xdxx になるため、あらかじめ該当箇所を書き換えておく必要がある。書き換えが必要なのは

  • /boot/grub/grub.conf
  • /etc/fstab

あたりだろうか。

 まず、現在のカーネルが VirtIO ドライバを持っているかを確認する。

  • Device Drivers→Block Devices→Virtio block driver
  • Device Drivers→Network device support→Virtio network driver

が該当する。これらが Y か m になっていなければ変更の上、カーネルを再構築するかモジュールをコンパイルする。

 ドライバが準備できたら、上記2ファイルを書き換える。/dev/sda の箇所は /etc/xda に置き換えていく、といった感じで作業すればok。修正が完了したら、いったんゲストをシャットダウンする。

 次に、libvirtd 側の XML を更新して、ストレージと NIC が VirtIO デバイスになるように修正する。

virsh edit [ゲスト名]

 ブロックデバイスは、<target dev='sda' bus='ide'/> のようになっている箇所を <target dev='xda' bus='virtio'/> のように置き換えればよい。NIC については、<model>type 属性を virtio に置き換える。

<model type='virtio'/>

 編集できたらゲストを起動して正しく動作しているかを確認すればよい。

virsh start [ゲスト名]

 個人的には、この状態まで作っておいた LVM を保存しておき、それを dd でコピーして新しいゲストを作成するようにしている。