KVMのGuestOS上でCPUの仮想化支援技術を利用する
通常、CPUの仮想化支援機能を利用(認識)できるのは、ハイパーバイザまでですが、
KVMのNestedを使うことでGuestOS上でも仮想化支援機能を利用できるようになります。
要は、『KVM on KVM』などというトリッキーな遊びができるわけです。
実際どれほど有用な機能なのか語ることは難しいのですが、個人的には複数の
物理マシンを保有できないため、ライブマイグレーションの実験やらプライベート
クラウドの実験環境やらで活躍しています。
ハードウェアの制約
今回、この記事を書くために改めて調べてみましたが、未だIntel系のCPUでの対応は
不完全のようです。(Kernel Patchは存在するようですが...)
このため、気軽に試すのであればAMD(AMD-V)のCPUである必要があります。
設定手順
ここでは、手軽なLinuxディストリビューションであるUbuntu Server 11.04で構築する
手順を記します。
※KVM環境のインストールについてはSettingup LinuxKVM - La vie des marmotteをご覧ください。
■Kernel module "kvm_amd"のnestedオプションを有効にする
$ sudo /etc/init.d/libvirt-bin stop $ sudo modprobe -r kvm_amd $ sudo modprobe kvm_amd nested=1OSの再起動毎に再設定する必要が生じるため、設定ファイルを修正します。
$ sudo vi /etc/modprobe.d/kvm.conf -- options kvm_amd nested=1 --
■仮想マシンの起動
KVMの仮想マシンを起動する場合、"kvm"コマンドにて起動させますがこのまま起動しても
GuestOS上で仮想化支援機能を利用することができません。
実際には、"kvm"コマンドは"qemu-system-x86_64"コマンドのシンボリックリンクで、
オプションを確認すると次のようなオプションが存在します。
$ qemu-system-x86_64 --help | grep nest -enable-nesting enable support for running a VM inside the VM (AMD only)
virt-managerを利用してGuestOSを管理したいときなど、"kvm"コマンドを裏で実行している
ため、専用のシェルスクリプトを作成しておくと便利です。
$ sudo vi kvm-nested -- #!/bin/bash exec /usr/bin/qemu-system-x86_64 -enable-nesting "$@" -- $ sudo chmod +x kvm-nested
また、Ubuntu11.04ではAppArmorによってセキュリティ管理されているため設定を追加します。
$ sudo vi /etc/apparmor.d/abstractions/libvirt-qemu -- /usr/bin/kvm-nested rmix, --
最後に、必要に応じてkvmコマンドのシンボリックリンクを書き換えます
$ cd /usr/bin $ sudo mv kvm kvm.org $ sudo ln -s /usr/bin/kvm-nested /usr/bin/kvm
以上
参考資料:HugeDomains.com - Shop for over 300,000 Premium Domains