KVMメモ
KVMごっこをしたときのメモ。 共通編、qemu直叩き編、virsh使用編の3編でお送りします。
共通
環境
インストール
コマンド一発。
$ sudo aptitude install kvm
カーネルモジュールのロード
KVMはローダブルカーネルモジュールになっているので、 モジュールをロードして使う。
$ sudo modprobe kvm $ sudo modprobe kvm_intel
モジュールをブート時に読ませる
/etc/modulesにkvmとkvm_intelを追記する。
$ sudo vim /etc/modules
KVMグループにユーザを登録
必要があるかどうかわからないのでやらなかった。 コマンドはこれ。
$ gpasswd -a bisco kvm
ゲストOS用ディスクイメージ作成(qcow2)
qcow2フォーマットで、vm00.imgという名前のディスクイメージを10GB分作成する。 使った分だけ物理ドライブを消費する。性能はいまいちだけどスナップショットがとれるのが利点。
$ qemu-img create -f qcow2 vm00.img 10G # スナップショットは以下のコマンドで取れる(未実施) # snapという名前でtest.imgのスナップショットを取る $ qemu-img snapshot -c snap test.img # スナップショットを確認する $ qemu-img snapshot -l test.img # test.imgをsnapに巻き戻す $ qemu-img snapshot -a snap test.img # test.imgのスナップショットsnapを消す $ qemu-img snapshot -d snap test.img
ゲストOS用ディスクイメージ作成(raw)
rawで作る。速度を気にする場合はこちら。 ddで作ると相当時間かかる上にドライブに負担がかかるので、 並行する別の作業に支障がでるかもしれない。
# raw(スパース:見かけ0で実際使った分だけ消費) $ qemu-img create -f raw vm00.img 10G # raw(ノンスパース:10GB最初から割り当てられてる) $ dd if=/dev/zero of=./vm00.img bs=1M count=10240
ブリッジ接続用の準備
KVMはデフォルトでNATになってしまう。NATだとホストOSからSSHでアクセスできなくて困るので、 ブリッジ接続にしたい。
まずはブリッジ作成
# ブリッジ作成用に必要なものをインストール $ sudo aptitude install bridge-utils
インストールが終わったら、/etc/network/interfacesを編集する。 面倒なのでdiff結果を貼っておく。パラメタの詳細は調べてない。
$ diff -ur interfaces.back interfaces --- interfaces.back 2013-07-21 15:42:55.083528245 +0900 +++ interfaces 2013-07-21 15:47:57.123542047 +0900 @@ -2,9 +2,16 @@ # and how to activate them. For more information, see interfaces(5). # The loopback network interface -auto lo +auto lo br0 eth0 iface lo inet loopback +iface eth0 inet manual # The primary network interface allow-hotplug eth0 -iface eth0 inet dhcp +#iface eth0 inet dhcp +iface br0 inet dhcp + bridge_ports eth0 + bridge_maxwait 0 + bridge_fd 0 + bridge_stp off +
qemu用にシェルスクリプトを用意する
下記スクリプトを/etc以下にqemu-ifupとして作成しておく。
#!/bin/sh /sbin/ifconfig $1 up /usr/sbin/brctl addif br0 $1
diff結果はこれ。
--- qemu-ifup.back 2013-07-21 16:18:14.743625079 +0900 +++ qemu-ifup 2013-07-21 16:19:17.303627934 +0900 @@ -1,2 +1,3 @@ #!/bin/sh -sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1 +/sbin/ifconfig $1 up +/usr/sbin/brctl addif br0 $1
qemuコマンド直叩き編
ゲストOSをISOイメージからブートする
KVMコマンド直叩きで作成。オプションはこんな感じ。
- -no-acpi:トラブルのもとらしいので、acpiをOFFにする。実際よくわからないのでそのままコピペ。
- -m 1024:メモリの予約。ここでは、1024MBを予約。
- -cdrom:CDメディアの指定。ここでは、isoイメージを指定する。
- -hda:ディスクイメージを指定。
- -boot:ブート先。インストール作業を行うときはdを指定。
- -monitor telnet::4445,server,nowait:qemuのコンソール用設定。nowaitを設定しないと、接続するまでqemuがホールドしてしまうらしい。
- -vnc :0:VNCの接続番号を指定する。いくつかゲストOSを立ち上げる場合は、ここの番号でVNCの接続を指定する。ここでは0番を指定。
- -daemonize:プロセスをデーモン化する。デーモン化しないと、コンソールが占拠されてしまう。
$ kvm -no-acpi -m 1024 -monitor telnet::4445,server,nowait \ -vnc :0 -daemonize \ -cdrom /home/bisco/iso/debian-7.1.0-amd64-CD-1.iso \ -hda vm00.img -boot d
ゲストOSへのアクセス
付属のVNCビューアからアクセスする。マウスのフォーカスを取り返すには、Ctrl+Alt。
インストール終了後
KVMは基本的にCDブートなので、CDイメージをくくりつけておくと再起動しても無駄。qemuのコンソールから殺しておく。
$ telnet 4445 # qemuにアクセス (qemu) q
ディスクイメージから起動する(ブリッジ接続用)
デフォルトで立ち上げるとNATになる。NATだとsshでアクセスできないので、ブリッジ接続にする。TUN/TAPで何とかかんとかするらしい。 TAPを作るのに特権がいるので、sudoで起動する。
- -net nic,macaddr=xx:xx:xx:xx:xx:xx,model=e1000:物理的なネットワークカードの設定をVMに追加。MACアドレスは適当でいいけど、LAN内で同じにならないようにすること。modelはデフォルトでe1000になるけど、明示的に指定しないとrtl8139になってしまうらしい。
- -net tap,ifname=tap0:tapはVM用のブリッジインタフェース。ここで指定するifnameがqemu-ifupに渡されて、ブリッジインタフェースと関連付けられる。
- -boot c:ディスクイメージから起動する。
$ sudo kvm -no-acpi -m 1024 -monitor telnet::4445,server,nowait \ -vnc :0 -daemonize \ -net nic,macaddr=12:34:56:78:90:ab,model=e1000 \ -net tap,ifname=tap0 \ -hda vm00.img -boot c
virsh使用編
virshインストール
コマンド一発でらくらくインストール。
$ sudo aptitude install libvirt
VMインストール
promptモードでインストール
sudoしなくても作れるけど、ブリッジ接続のためにsudoで作っておく。 下記4つを指定するだけで作れる。
- 仮想マシン名
- メモリ量
- CDイメージ
- ディスクイメージ
$ sudo virt-install --prompt
コマンドラインでインストール
こことここを参考にした。 インストール終わったら、ゲストOSをシャットダウンする。
以下抜粋。
- --name=debian-kvm:ゲストOSの名前を設定
- --cdrom=/home/bisco/iso/debian-7.1.0-amd64-CD-1.iso:ISOイメージ
- --vcpus=2:CPU割り当て数を2にする
- --hvm:完全仮想化
- --ram=1024:メモリ割り当て量
- --vncport=5900:VNCポートを指定。5900以上を指定する。
- --file=vm00.img:ディスクイメージ
- --vnclisten=0.0.0.0:どのホストからもVNCを受け付ける
- --noapic:apicを無効にする。 --os-type、--os-variantが優先。
- --accelerate:カーネルの高速化設定
$ sudo virt-install --name=debian-kvm \ --connect=qemu:///system \ --ram=1024 \ --vcpus=2 \ --os-type=linux \ --hvm \ --virt-type=kvm \ --file=vm00.img \ --cdrom=/home/bisco/iso/debian-7.1.0-amd64-CD-1.iso \ --vnc \ --vncport=5900 \ --vnclisten=0.0.0.0 \ --network=bridge:br0 \ --keymap=ja \ --noapic \ --accelerate
ディスクイメージから起動
sudoでインストールしたので、virshもsudoで起動する。設定ファイルがsudoとsudoなしで保存場所が違うので、 sudo付けないと何もできない。 よく使うコマンドはこんな感じ。コマンドまとめはここ
- list --all:VM一覧を表示。shut offされてるVMはこれじゃないと見られない。
- start debian-kvm:ゲストOSの名前を指定してスタートさせる
- shutdown debian-kvm:ゲストOSの名前を指定してシャットダウン
- destroy debian-kvm:ゲストOSの名前を指定して電源断
$ sudo virsh virsh # list --all Id Name State ---------------------------------------------------- - debian-kvm shut off virsh # start debian-kvm Domain debian-kvm started virsh # list Id Name State ---------------------------------------------------- 1 debian-kvm running virsh # destroy debian-kvm Domain debian-kvm destroyed virsh # list Id Name State ----------------------------------------------------
参考ページ:メモが適当でどれがどれやら・・・
- http://d.hatena.ne.jp/aqua-nora/20110502/1304311303
- http://research.sakura.ad.jp/2010/03/08/kvm-install/
- http://research.sakura.ad.jp/2010/03/12/kvm-network/
- http://nogisawa.net/2012/01/virsh/
- http://research.sakura.ad.jp/2010/03/23/kvm-diskperf1/
- http://ameblo.jp/cry-for-the-earth/entry-11209713091.html
- http://blog.moccori.com/d/2012-10-29
- http://orangesooda.com/no/2011/02/kvm.html
- http://ymotongpoo.hatenablog.com/entry/20100806/1281084634
- http://ultimania.org/trac/yuna/wiki/linux/kvm
- http://fukumoto-tech.serveblog.net/wiki/index.php?centos%20KVM%20virsh%A5%B3%A5%DE%A5%F3%A5%C9%A4%CE%A4%DE%A4%C8%A4%E1