Kvm+qemu

出典: Asterisk works Wiki
Ubuntu デスクトップで仮想化環境を構築する場合、KVMの方が作りやすいようである。XENをインストールしてみたがうまく動かなかった。
このページではkvm+qemu+virt-managerの環境についてまとめる。ubuntuは9.04を使っている。
目次 |
KVMとは?
KVMはカーネル2.6.20から組み込まれたカーネルの仮想マシン環境。
ハイパーバイザー型の仮想環境であり、完全仮想化をするためWindowsもOSに手を加えることなくインストール可能。利用するにはIntel VTやAMD-VといったCPUによる仮想化支援機能が必要。
KVMを使用するにはQEMUとvirt-managerを組み合わせる。
完全仮想化でかまわないならカーネル組み込まれているのでどんなディストリでも使え便利だと思う。
kvm+qemuはlibvirtで操作でき、それも便利。
KVMのインストール
KVMをインストールするにはCPUが仮想化対応している必要がある。 Linuxでは次のコマンドで結果が帰ってくれば対応している。
> egrep '(vmx|svm)' --color=always /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pebs bts pni dtes64 monitor ds_cpl vmx cid cx16 xtpr pdcm lahf_lm tpr_shadow flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pebs bts pni dtes64 monitor ds_cpl vmx cid cx16 xtpr pdcm lahf_lm tpr_shadow
インストールはapt-getで簡単にインストール可能
> sudo apt-get install kvm virt-manager
Fedora11ではデフォルトインストールされたように思う。
また、ubuntuではvirsh shutdownできない場合がある。ACPIの signalが送れないかららしい
解決策としては、acpidパッケージをインストールすればOK。
$ sudo apt-get install acpid
これで、virsh shutdown VM名 でshutdownができるようになる。
また、最近のバージョンでは大丈夫だと思うのだが一応kvmモジュールがロードされているか確認する。lsmod | grep kvmを実行して次の結果が得られれば大丈夫
> lsmod | grep kvm kvm_intel 46296 0 kvm 286392 1 kvm_intel
出力がなかった場合、次のように手動でロードする。AMDのCPUの場合はkvm_amdと入力する
>sudo modprobe kvm > sudo modprobe kvm_intel
次回の起動時も自動的にロードされるように/etc/modulesに次の2行を加えておく
kvm kvm_intel
ゲストOSのインストール
KVMとvirt-managerをインストールすると[アプリケーション]-[システムツール]の仮想マシンマネージャーを選択するとvirt-managerが起動する。ただし、この起動方法ではユーザモードでのインストールとなり、ユーザモードネットワークしか選択できない。それが不便ならsudo virt-managerでrootとして起動する。
仮想ホストを選択して右下の[新規]ボタンをクリックするとウィザード形式でゲストOSをインストールしていける。
virt-managerでインストールした仮想マシンの情報は /etc/libvirt/qemu ディレクトリにドメインxmlファイルができる。
イメージファイルの作り方
virt-managerのウィザードでも作成可能なのだが、フォーマットを細かく選択できないので選択したい場合にはqemu-imgコマンドで作成する。
> qemu-img create -f [フォーマット] [イメージファイルパス] [容量]
例)qcow2フォーマットで/var/kvm/centos.imgを15GBで作成する
> qemu-img create -f qcow2 /var/kvm/centos.img 15G
virshについて
virt-managerによるKVMの操作は便利だが、できないこともある。その場合はコマンドラインインターフェースであるvirsh(ヴァーシュ)を使う。
virshを使うにはlibvirtが必要だが、virt-managerが使える環境ならインストールされている。
ゲストOSの一覧を表示する
起動していないゲストOSもすべて表示する場合には次のようにする。起動しているゲストOSのみでよい場合は--allをつけなければよい。
> sudo virsh list --all Connecting to uri: qemu:///system Id 名前 状態 ---------------------------------- - CentOS5 シャットオフ - Fedora11 シャットオフ - Ubuntu9.10 シャットオフ - WindowsXP シャットオフ
ゲストOSのイメージをインポートする
すでに他のマシン等で作成したkvmのゲストOSイメージとドメインXMLファイルがある場合、virsh createコマンドでインポートできる。 createを使うとゲストの起動までやってしまうので、起動したくない場合はdefineを利用すればよい。
例) guest.xmlで定義されているゲストOSをインポートする
> virsh create /etc/libvirt/qemu/guest.xml
ドメインxmlファイルに定義されているイメージファイルの場所と実際のイメージファイルの場所が一致していないといけないことに注意。
ゲストOSの起動、停止
コマンドラインからゲストOSを起動、停止する場合にはvirsh start 、virsh destoryを利用する。
例)guestという名称のゲストOSを起動する。
> virsh start guest
例)guestという名称のゲストOSを停止する。
> virsh shutdown guest
強制的に止めたい場合は次の様にする
> virsh destroy guest
ドメインxmlファイルの変更の反映
virsh createでインポートしたドメインxmlファイルを変更した場合、それを反映させる必要がある。その場合にはvirsh defineコマンドで反映させる。
例)guest.xmlの変更を反映する
> virsh define /etc/libvirt/qemu/guest.xml
仮想マシンのキーボード設定
ゲストOSをインストール後、virt-managerのコンソールを開いて操作しようとすると、キーボードがen-usと認識されていて不便な時がある。
そのときはドメインXMLファイルを編集して日本語キーボードの配列に設定することができる。
<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/> ↓ <graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>
ドメインXMLを編集した後ではvirsh defineで変更後の設定を反映する必要がある。
コンソールで仮想OSに接続する
まず、仮想OSの方にコンソールポートを開く設定をする必要がある。
Ubuntuの設定方法はこちら → Ubuntuのコンソールポート設定
上記の設定ができていれば、次のコマンドでコンソールに接続できる。
> sudo virsh console <接続先の仮想OSドメイン名>
接続するとログインアカウントを聞かれるので、アカウント、パスワードを入力し普通にログインできる。
ネットワークの設定
virt-managerのウィザードにそのまましたがっていくとnatネットワークが組まれて、それによりゲストOSからインターネット側に出て行くことはできる。
しかし、サーバ用途でゲストOSを使うとなると外部から接続できる必要がある。natネットワークのままルーティングを設定していっても可能ではあるだろうが、ブリッジインターフェースを設定する方が簡単。
Fedoraでブリッジ接続する
ubuntuでブリッジ接続する
NICを認識しないときの対処
仮想イメージをコピーすると、NICのMACアドレスを変更したりする。 そうすると仮想OS側でNICを認識しなくなることがある。 その場合は次のファイルを削除して再起動すればよい。
> sudo rm /etc/udev/rules.d/70-persistent-net.rules > sudo reboot
