Kvm+qemu Hatena Bookmark

出典: 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
個人用ツール