SH170R8+PX-Q3PEの構成で大分安定的な録画環境が構築できてきた。録画品質の1番の敵はどうやらディスクI/Oの衝突。特にSATAだと顕著なのでSSDが望ましい。なるべくディスクI/Oを減らしたいところだが、PX-Q3PEがCentOS6限定、QSVがCentOS7.2推奨となっているため、録画サーバからエンコードサーバに録画データを引き渡す必要がある。以前はこれをGlusterFS上でやり取りしていたのだが、GlusterFSはSATAで組んでいるのでノイズが入ってしまう。録画先のデバイスは容量をやりくりしてローカルのSSDを割り当てたい。
現時点ではホストOSがCentOS7.2なのでそのままQSVを使える。そこにゲストOSとしてCentOS6.7が動作している。このホスト・ゲスト間をVirtFSでデータ共有させるというアイデア。VirtFSはホストのファイルシステムをそのままゲストに引き渡すことができる。LXCコンテナなんかがまさにこの構造。1度この構造に慣れてしまうと、SSDのようなそれほど大きくないデバイスをホストとゲストで分断してしまうと扱いづらい事この上ない。特に録画サーバは1時間の録画で8GB弱ほどのファイルが出来てしまうので、容量の分断は可用性の低下に直結する。
そのVirtFSをググってみると、それなりに利用実績はあるようで難易度はそれほど高くないと考えていた。ググった手順だとゲストOSにVirtFSの設定を加えるだけで動作している。ネットだとvirt-managerで設定している人が多いが、GUI環境なんてある訳ないので、virsh editで設定する。ゲストOSのqemu設定に以下のような記述を追加するだけ。
mkdir /data
virsh edit c6test
:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/data'/>
<target dir='data'/>
</filesystem>
しかし、安定の起動失敗。じわじわ気付いていく事になるのだが、CentOSでVirtFSを扱うのはかなりハードルが高かった。そもそもホストOSがVirtFSに対応しているのかどうかを確認する。以下のコマンドで確認可能だ。
/usr/libexec/qemu-kvm -device help
このコマンドに対して『name “virtio-9p-pci”, bus PCI』というレコードが返って来ればVirtFS対応済み。CentOS7.2のデフォルトemulatorは案の定対応していなかった。emulatorが対応していない状態でVirtFSの設定を入れると、ゲストOSは起動すらしない。
逆を言えばこの設定で起動さえしてくれれば成功と言えそうだ。とりあえずはVirtFS設定されたゲストOSの起動を目指す。qemu-kvmのsrc.rpmをダウンロードしてspecファイルにて『–enable-virtfs』に変更した上でrpmbuildしてみる。出来上がったrpmをインストールして確認コマンドを発行すると『virtio-9p-pci』が含まれていたのでガッツポーズ。しかし、このemulatorでも起動する事出来ず。ホストOSのkernelにv9fsや9pnet_virtio等のkernelモジュールを組み込んでみたりもしたけど進展せず。そっと我が手を見る。
改めてネットで情報収集。CentOSに限って言えばVirtFSの実績はほとんどないのかも。。。数少ない動作手順を見るとqemu-2.0.0を使っている事が多い。どうやらepelリポジトリにあるようなのでインストールしてみる。このパッケージでインストールされるemulatorは『qemu-system-x86_64』というもの。qemu-kvmと同様の手順でVirtFS対応の有無を確認してみる。
qemu-system-x86_64 -device help
:
name "virtio-9p-device", bus virtio-bus
name "virtio-9p-pci", bus PCI
おっしゃあ!最初から対応してる!ゲストOSのqemu設定にてemulatorを変更。更にqemu-system-x86_64はmachineの指定も異なるようなので一緒に直しておく。
qemu-system-x86_64 -machine help
virsh edit c6test
:
<type arch='x86_64' machine='pc-i440fx-2.0'>hvm</type>
:
<emulator>/usr/bin/qemu-system-x86_64</emulator>
virsh start c6test
ドキドキしながら結果を待つと・・・順調に起動してきた!うきうきしながらゲストOSにログイン。まだマウントは出来ないが、通常の動作に問題はなさそう。ちなみにvirt-install時にこのemulatorを明示指定したいんだけど、そういうオプションはないらしい。『virsh capabilities』で確認できるデフォルトのemulatorで設定されてしまうようだ。試行錯誤してみたが、どうしてもqemu-kvmがデフォルトになってしまうため、やむなくqemu-kvmそのものをアンインストール。これでデフォルトのemulatorがqemu-system-x86_64になったので、virt-install直後にVirtFSが使えるようになる。
とはいえ、qemu-kvmがないと自分のお気に入りのlibguestfs-toolsがインストールできない。このパッケージにはvirt-rescueとか入ってていろいろ便利なんだよね。まあ、頻繁に使うようなツールではないので、必要な時だけ入れればいいやと割り切った。ともあれ、これでホストOS側の準備はよさそう。次回はゲストOS側の設定を進めていく。