Linux

Debian Squeeze とUbuntu 10.10 で検証しています.その他の環境は適時読み替えてください

ハードウェアの要件

  • VT(virtualization technology) 対応のCPU
    大体Core 2 Duo から. Intel の場合次のページで確認が出来る.Intel® Virtualization Technology List 利用CPU のSupports Intel® VT-x がYes になっていればOK.CPU の種類は
    $ grep 'model name' /proc/cpuinfo
    で判る.
  • cpuinfo で仮想化支援機能があるかの確認
    $ egrep '(vmx|svm)' /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 syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monmitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_l ida arat dts tpr_shadow vnmi flexpriority ept vpid 
    Intel はvmx,AMD はsvm があれば仮想化支援機能があるはず.
  • CPU が対応していてもBIOS で無効にしてあることが多いので,有効にする.
  • module の読み込み
    Linux Kernel 2.6.20 からメインストリームに取り込まれているので,それ以降のKernel を利用すれば良い. intel の場合はkvm_intel AMD の場合はkvm_amd を読み込む.lamod コマンドで読み込まれているか確認します.
    $ sudo modprobe kvm_intel
    $ lsmod | grep kvm
    kvm_intel              46360  0 
    kvm                   285496  1 kvm_intel

qemu プロンプトでも確認できる

(qemu) info kvm
kvm support: enabled

導入

パッケージの導入

$ sudo aptitude install qemu-kvm virt-manager

利用ユーザの登録

$ sudo adduser user kvm

仮想マシンマネージャ(libvirt)利用時

$ sudo adduser user libvirt

Serial 利用時

$ sudo adduser user tty

ディスクイメージの作成

  • 利用可能なイメージ(man kvm-img より)
    qcow2 : QEMU image format, the most versatile format. Use it to have smaller images (useful if your filesystem does not supports holes, for example on Windows), optional AES encryption, zlib based compression and support of multiple VM snapshots.
    qcow  : Old QEMU image format. Left for compatibility.
    vdi   : VirtualBox 1.1 compatible image format.
    vmdk  : VMware 3 and 4 compatible image format.
    vpc   : VirtualPC compatible image format (VHD).
    cloop : Linux Compressed Loop image, useful only to reuse directly compressed CD-ROM images present for example in the Knoppix CD-ROMs.
  • qcow2 で8GB のイメージ作成例
    $ kvm-img create -f qcow2 disk.img 8G
    Formatting 'disk.img', fmt=qcow2 size=8589934592 encryption=off cluster_size=0 
    $ ls -l disk.img 
    -rw-r--r-- 1 mk mk 262144 2010-12-04 19:27 disk.img
    $ file disk.img 
    disk.img: QEMU QCOW Image (v2), 8589934592 bytes 
  • qcow2 で暗号化を有効にしたディスク作成
    $ kvm-img create -f qcow2 -o encryption=on disk.img 8G
    Formatting 'disk.img', fmt=qcow2 size=8589934592 encryption=on cluster_size=0 
    $ file disk.img 
    disk.img: QEMU QCOW Image (v2), 8589934592 bytes, AES-encrypted

Linux/Qcow2 も参照.

qcow2 は利用した分ディスク容量が増えるので,ディスク消費量が少ないが特に書き込み時に速度が落ちる. 速度を求める場合はRAW 形式で作成したほうが良い.
※本当は専用パーティションを切ってそこを直に使うほうが更に良い.

  • RAW 形式でディスク作成
    $ dd if=/dev/zero of=./disk.img bs=1M count=8096
    8096+0 records in
    8096+0 records out
    8489271296 bytes (8.5 GB) copied, 12.5746 s, 675 MB/s
    $ ls -l disk.img 
    -rw-r--r-- 1 mk mk 8489271296 2010-12-04 20:01 disk.img
    $ file disk.img 
    disk.img: data

virt-manager でのディスクイメージの作成

仮想マシンマネージャの[編集]>[ホストの詳細]
[ストレージ]タブ > [新規ボリューム]ボタン
で,作成可能. 以下の選択肢がある.

raw/bochs/cloop/cow/dmg/iso/qcow/qcow2/vmdk/vpc

KVM コマンドでの実行

未だまとめてない><

$ kvm -hda ~/ドキュメント/KVM/sid00.img -m 512 -monitor stdio -cdrom ~/ドキュメント/iso/debian-testing-amd64-businesscard.iso -boot d
pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
QEMU 0.12.3 monitor - type 'help' for more information
(qemu) 

オプションは以下のようになっています.

       -hda : hda で利用するディスクイメージを指定します.hdb, hdc, hdd と続けて指定できます.hdc はcdrom と排他のようです.
       -m : 仮想マシンに割り当てるメモリ量です.単位はMB
       -monitor stdio : 
       -cdrom : 仮想マシンで利用するcdrom イメージを指定します./dev/cdrom 等として通常のドライブも利用できます.
       -boot : d オプションでcdrom から起動します.(a でfd, c でhd, n でPXE)

仮想マシンを実行した端末で(qemu) というプロンプトが表示されています.ここでもKVM が利用されているか確認してみます.

(qemu) info kvm
kvm support: enabled

問題ない様です. 試しにKVM モジュールを読み込まずに実行してみると体感でかなり遅くなりました. QEMU のターミナルで仮想マシンが普通に起動してくるので,インストールを進めます.普通にインストールは終わるので拍子抜けします. 完全仮想化なので,Solaris もWindows もOK

Screenshot-QEMU-debianinstaller00.png

ちなみに,QEMU 端末で他のアプリケーションに移るときは,Ctrl+Alt で端末から抜け出してから. フルスクリーンにするにはCtrl+Alt+Enter.ただし,実際の画面と同じサイズにしたい場合はフルスクリーンにしてから解像度を合わせないと下部がうまく表示されなかったりする.

  • 解像度を高くする. このままだと,800x600 迄しか利用できません.KVM 起動オプションに-vga vmware と付けることで高解像度が利用できるようになりました.

ただ,xdm 起動時に少し画面が崩れるようになりました.ログイン後は問題ありません.

それと,Debian sid のX ではマウスカーソルの周りのゴミが出るようになりました.

  • マウスポインタのズレを補正する. X などを利用すると,表示されるマウスポインタと実際のマウスポインタにズレが発生したり(Debian sqeeze)マウスポインタが飛びまわることがあります(Debian sid).押したいボタンが押せないなどかなり不便です.-usbdevice tablet オプションで補正されるようになりました. Debian sid のX ではマウスカーソルの周りのゴミが消えません.

$ kvm -hda /export/home/mk/Document/KVM/sid00.img -hdb /export/home/mk/Document/KVM/sid01.img -m 512 -monitor stdio -vga vmware -usbdevice tablet

参考URL)

  • コンソールを開放する
  • daemonize オプションでデーモン化出来ます.それだけでは操作できなくなるので,-monitor telnet::2323,server,nowait -vnc :1 のように設定すると,telnet port 2323 でqemu モニタに,vnc:1 でゲストOS に接続でき るようになります. 接続時はホストマシンのip アドレスを指定します.2台以上の場合はポートをずらしましょう.もちろんローカルマシンとも.

vnc は解像度が変わるごとに切られるので少し不便です.

  • スナップショット
  • snapshot オプションを付けて起動するとディスクイメージを読み込み専用で利用するので,再起動したら元の状態に戻ります. 次も差分を利用したい場合は,差分用のディスクイメージを用意する必要があります.

元のディスクイメージを sid00.img 差分用のディスクイメージを sid00.diff.img とすると,以下のように-b で元イメージを,-f で差分イメージを指定して作成する.

% kvm-img create -b sid00.img -f qcow2 sid00.diff.img

Formatting 'sid00.diff.img', fmt=qcow2 size=8589934592 backing_file='sid00.img' encryption=off cluster_size=0

起動時は,スナップショット用のイメージを指定して起動します.-snapshot オプションは付けません.

% kvm -hda /export/home/mk/Document/KVM/sid00.diff.img -m 512 -monitor stdio -vga vmware -usbdevice tablet
  • 仮想マシンの一時停止,再開 qemu 端末からstop, cont とすることで,停止,再開が可能です.info status で状態が確認できます.

(qemu) info status VM status: running (qemu) stop (qemu) info status VM status: paused (qemu) cont (qemu) info status VM status: running

  • CD-ROM 交換 qemu の端末からinfo block コマンドで現在の確認が出来ます.change デバイス名 イメージファイル のように指定するとディスクの挿入,eject デバイス名 で取り出しが出来ます.
  • 状況確認 (qemu) info block ide0-hd0: type=hd removable=0 file=/tmp/vl.AHVsAW backing_file=/export/home/mk/Document/KVM/sid00.img ro=0 drv=qcow2 encrypted=0 ide1-cd0: type=cdrom removable=1 locked=0 [not inserted] floppy0: type=floppy removable=1 locked=0 [not inserted] sd0: type=floppy removable=1 locked=0 [not inserted]
  • ディスク挿入 (qemu) change ide1-cd0 /export/home/mk/Document/iso/ComiketCatalog78A.iso
  • 確認
    (qemu) info block
    ide0-hd0: type=hd removable=0 file=/tmp/vl.AHVsAW backing_file=/export/home/mk/Document/KVM/sid00.img ro=0 drv=qcow2 encrypted=0
    ide1-cd0: type=cdrom removable=1 locked=0 file=/export/home/mk/Document/iso/ComiketCatalog78A.iso ro=0 drv=raw encrypted=0 floppy0: type=floppy removable=1 locked=0 [not inserted]
    sd0: type=floppy removable=1 locked=0 [not inserted]
  • 取り出し
    (qemu) eject ide1-cd0
  • 確認
    (qemu) info block
    ide0-hd0: type=hd removable=0 file=/tmp/vl.AHVsAW backing_file=/export/home/mk/Document/KVM/sid00.img ro=0 drv=qcow2 encrypted=0
    ide1-cd0: type=cdrom removable=1 locked=0 file=/export/home/mk/Document/iso/ComiketCatalog78B.iso ro=0 drv=raw encrypted=0 floppy0: type=floppy removable=1 locked=0 [not inserted]
    sd0: type=floppy removable=1 locked=0 [not inserted]
  • NAT でネットワーク外部公開
  • redir tcp:2222::22 のようにすると,ホストの2222番ポートをゲストの22番ポートに接続できるようにします.
    acer% hostname
    acer
    acer% slogin localhost -p 2222
    Host key fingerprint is 42:e4:51:c9:ba:ef:c0:1e:10:0b:6f:8a:1b:ae:2b:2d
    +--[ RSA 2048]----+
    |      oo..       |
    |     o .o        |
    |  . . o.         |
    |   o +.          |
    |    = ..S        |
    | . o o..         |
    |o..   +.         |
    |Eo.  . o.        |
    |*+    ...        |
    +-----------------+
    
    mk@localhost's password: 
    Linux kvm-sid 2.6.32-5-amd64 #1 SMP Sat Jul 24 01:47:24 UTC 2010 x86_64
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    You have new mail.
    Last login: Sat Aug  7 11:32:44 2010 from 10.0.2.2
    mk@kvm-sid:~$ hostname
    kvm-sid

仮想マシンの新規作成

注意点

  • ACPI を有効にしておかないと,virsh やvirt-manager からの再起動,シャットダウンができません.ゲストOS で有効にしておきましょう.※仮想マシン上でシャットダウンすれば出来ます

virsh-install

virt-manager

とりあえずこちらを KVM10分(位で)入門

kvm コマンドラインからの変換

libvirt 環境でのホスト起動時の自動起動

  • virsh コマンドの場合
    $ virsh autostart vm0
    ドメイン vm0 が自動起動に設定されました
    解除する場合
    $ virsh autostart --disable vm0
    ドメイン vm0 の自動起動設定が解除されました
  • virt-manager の場合 virt-manager から対象マシンを開く,[仮想ハードウェアの詳細] > [Boot Options] > [自動起動] > [ホスト起動時に仮想マシンを起動する]チェックボックスをチェック > [適用]ボタン

virsh コマンドでのサスペンド,レジューム

仮想マシン名が vm0 かつ,サスペンドイメージが var/lib/libvirt/images/suspend/vm0.img の時の例.イメージファイルパス,ファイル名は任意.

  • イメージを指定してサスペンド
    $ virsh save vm0 /var/lib/libvirt/images/suspend/vm0.img
    Domain enquetetest-debian-lenny-amd64 saved to /var/lib/libvirt/images/suspend/vm0.img
  • # レジューム
    $ virsh restore /var/lib/libvirt/images/suspend/vm0.img
    Domain restored from /var/lib/libvirt/images/suspend/vm0.img
    レジューム時はイメージファイルのみ指定.
  • レジューム後イメージは削除
    $ rm /var/lib/libvirt/images/suspend/vm0.img

libvirt 環境のホストマシンシャットダウン時の自動サスペンド,起動時の自動レジューム

そのままではホストのシャットダウン時にゲスト環境はそのままシャットダウン処理を行わずに停止される.これでは環境が壊れてしまうが,手動で停止していくのは面倒.
しかし,ダウン時にサスペンド,起動時にレジュームを自動で行なってくれるscript が用意されているので設定する.

# ls -la /usr/share/doc/libvirt-bin/examples/libvirt-suspendonreboot 
-rw-r--r-- 1 root root 1383 2010-10-01 20:08 /usr/share/doc/libvirt-bin/examples/libvirt-suspendonreboot
# cp /usr/share/doc/libvirt-bin/examples/libvirt-suspendonreboot /etc/init.d/
# chmod 755 /etc/init.d/libvirt-suspendonreboot
# mkdir -p /var/lib/libvirt/autosuspend
# update-rc.d libvirt-suspendonreboot defaults 21 19
update-rc.d: using dependency based boot sequencing

$ find /etc/rc?.d -name "*libvirt-suspendonreboot"
/etc/rc0.d/K01libvirt-suspendonreboot
/etc/rc1.d/K01libvirt-suspendonreboot
/etc/rc2.d/S21libvirt-suspendonreboot
/etc/rc3.d/S21libvirt-suspendonreboot
/etc/rc4.d/S21libvirt-suspendonreboot
/etc/rc5.d/S21libvirt-suspendonreboot
/etc/rc6.d/K01libvirt-suspendonreboot

中では,virsh save/virsh restore をやっている

libvirt 環境のマシン名変更

virsh edit コマンドでdomain のname(マシン名)とuuid を書き換える.

$ virsh edit vm0

として,

<domain type='kvm'>
  <name>vm0</name>
  <uuid>112c31b2-86d8-300e-c750-2db17da75c15</uuid>

<domain type='kvm'>
  <name>vm1</name>
  <uuid>9d6975c0-fc0d-459c-982d-34d4608c6201</uuid>

のように書き換える.
uuid はuuidgen コマンドで生成できる

$ uuidgen 
9d6975c0-fc0d-459c-982d-34d4608c6201

libvirt 環境でのバックアップ

マシンイメージ

/var/lib/libvirt/images/*.img

マシン設定

/etc/libvirt/qemu/*.xml

この2つををバックアップしておけば大丈夫だと思う.

その他,ネットワークの設定などは

/var/lib/libvirt/network/*.xml

とかストレージの設定は

/etc/libvirt/storage/*.xml

とか.でもこの辺りはすぐ復旧できそう.

libvirt 環境でのコア指定

http://gyazo.com/74d18f22b053432fe1a667a25a71e705.png
xml では<vcpu cpuset='指定実コア'>仮想コア数</vcpu> な感じ

2コア使って実CPU の6と7の場合以下のような感じ
存在しないCPU 指定したら起動時に怒られて起動しない

<vcpu cpuset='6-7'>2</vcpu>
<vcpu cpuset='6,7'>2</vcpu>

libvirt 環境でのserial 接続

基本的にゲストで普通にserial の設定をして,

% sudo virsh -c qemu:///system console vm0

の様にして接続する.

切断は接続時に表示されるとおり^]

Escape character is ^]

ゲストがDebianSqueeze?

/etc/inittab の設定

#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

の部分を以下の様に変更.

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

grub の設定
/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0"

を設定.

$ sudo update-grub

でgrub 反映
再起動して,ホストから接続確認

$ sudo virsh -c qemu:///system console vm0
Connected to domain vm0
エスケープ文字は  ^] です

                       GNU GRUB  version 1.98+20100804-14

 +--------------------------------------------------------------------------+
 |Debian GNU/Linux, with Linux 2.6.32-5-amd64                               |
 |Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)               |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 |                                                                          |
 +--------------------------------------------------------------------------+

      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the commands
      before booting or 'c' for a command-line.

クローンしたイメージでネットワークに繋がらない

MAC アドレスが変わることで起こる問題.固定IP の場合そっちの変更もしておかないとぶつかる.

  • DebianSqueeze?/Ubuntu10.10 の場合 udev が古いデバイスを覚えているので,以下のファイルから削除する.現在の物も削除して再起動するのが楽だと思う.この辺はKVM に限らない.

/etc/udev/rules.d/70-persistent-net.rules の以下の辺りを削除.

# PCI device 0x1af4:0x1000 (virtio_net)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:a6:b6:30", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

必要なら/etc/network/interfaces も変更.

VirtIO Driver

tool

virt-top

top ライクな表示で仮想マシンのステータスを表示してくれる. パッケージ名はvirt-top

virt-top 01:27:43 - x86_64 4/4CPU 1733MHz 5780MB
9 domains, 2 active, 2 running, 0 sleeping, 0 paused, 7 inactive D:0 O:0 X:0
CPU: 27.1%  Mem: 1792 MB (1792 MB by guests)

   ID S RDRQ WRRQ RXBY TXBY %CPU %MEM    TIME   NAME                                                                                                                                                       
    2 R    0    0  104    0 26.5 13.0   2:01.74 sid
    4 R    0    0  104    0  0.6 17.0   0:23.46 Ubuntu10.10amd64
    -                                           (CetOS5.4-amd64)
    -                                           (Debian-squeeze_Tyny)
    -                                           (Debian-squeeze_Tyny-clone)
    -                                           (Fedora14-amd64)
    -                                           (Lenny-test)
    -                                           (MikoGnyo4.2-c78)
    -                                           (Solaris11express)

運用ツール

oViart

Proxmox VE

Karesansui

convirt

OpenQRM

動作不具合

起動しなくなった(Unable to deny all devices for vm0: No such file or directory)

virsh では

$ virsh start vm0
エラー: ドメイン vm0 の起動に失敗しました
エラー: Unable to deny all devices for vm0: No such file or directory

virt-,anager では Traceback (most recent call last):

File "/usr/share/virt-manager/virtManager/engine.py", line 814, in run_domain
vm.startup()
File "/usr/share/virt-manager/virtManager/domain.py", line 1296, in startup
self._backend.create()
File "/usr/lib/python2.6/dist-packages/libvirt.py", line 333, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: Unable to deny all devices for vm0: No such file or directory

新規マシンを作成しようとすると,ディスクイメージ作成後同様のエラー.
既存マシンのデバイスを削除できるだけ削除してみても変わらない.

/etc/libvirt 以下を退避して,

$ sudo aptitude reinstall libvirt-bin

して,退避した/etc/libvirt/qemu/*.xml をvirsh define したら使えるように 多分このへんのどこかが壊れた?

$ dpkg -L libvirt-bin|grep /etc/libvirt
/etc/libvirt
/etc/libvirt/libvirtd.conf
/etc/libvirt/lxc.conf
/etc/libvirt/nwfilter
/etc/libvirt/nwfilter/allow-arp.xml
/etc/libvirt/nwfilter/allow-dhcp-server.xml
/etc/libvirt/nwfilter/allow-dhcp.xml
/etc/libvirt/nwfilter/allow-incoming-ipv4.xml
/etc/libvirt/nwfilter/allow-ipv4.xml
/etc/libvirt/nwfilter/clean-traffic.xml
/etc/libvirt/nwfilter/no-arp-spoofing.xml
/etc/libvirt/nwfilter/no-ip-multicast.xml
/etc/libvirt/nwfilter/no-ip-spoofing.xml
/etc/libvirt/nwfilter/no-mac-broadcast.xml
/etc/libvirt/nwfilter/no-mac-spoofing.xml
/etc/libvirt/nwfilter/no-other-l2-traffic.xml
/etc/libvirt/nwfilter/no-other-rarp-traffic.xml
/etc/libvirt/nwfilter/qemu-announce-self.xml
/etc/libvirt/nwfilter/qemu-announce-self-rarp.xml
/etc/libvirt/qemu
/etc/libvirt/qemu/networks
/etc/libvirt/qemu/networks/autostart
/etc/libvirt/qemu/networks/default.xml
/etc/libvirt/qemu.conf
/etc/libvirt/qemu/networks/autostart/default.xml

参考URL



spam 避けですcheck を付けて下さい

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-12-19 (月) 17:21:34 (1954d)