#topicpath

QEMU-KVM contents


Web に tenforward さんの連載(ブログ)があります(不定期) :)


以下の内容は古くなってる可能性があります

contrib に仮想環境のパッケージが置かれているので QEMU-KVM を使用してみました。
「 qemu kvm 」 などで検索すれば十分な情報が得られますので、開発中の Plamo-5.0(64bit) 環境(ホスト)で動作させた時の記録です。 Plamo-4.73(ホスト)でも同様だと思いますが 64bit 環境のゲストOSは利用できません。

M.Tomi (2011-05-08)


とにかく使用してみる

 パッケージのインストール
$ sudo installpkg qemu_kvm-0.13.0-x86_64-P2.txz

 モジュールのロード
$ sudo modprobe kvm-amd ( or kvm-intel )

ここでの利用範囲なら以下は一般ユーザで実行できるはずである (^^;
 仮想ディスクの作成
$ qemu-img create -f raw image.raw 10G
 ( qcow2 イメージへのインストールは非常に時間が掛かるので raw イメージへインストールし qcow2 イメージへ変換するのがよいと思われる )

 ゲストOSのインストールCD を起動
$ qemu-kvm -hda image.raw -cdrom /dev/sr0 -boot d [ -k ja -localtime ] -m 512 [ & ]
 ( /dev/sr0 は iso イメージファイルでもよい )

 インストール実行
 ( ここでは、ゲストOSのネットワーク設定は DHCP による自動設定にしておく )
 インストール終了

 Ctrl+Alt+2 で QEMU のモニターに移行して
 (qemu) system_powerdown
 で終了できる。

 インストールしたゲストOSの起動
$ qemu-kvm -hda image.raw -cdrom /dev/sr0 -boot c [ -k ja -localtime ] -m 512 [ & ]

ブラウザを起動して Google 等にアクセスできれば OK 。
このままではホスト、他のマシン(他のゲストOS)とのネットワーク接続ができない。


ネットワーク(TAP、 ブリッジ)の設定

ホスト (Plamo-5.0 の場合) の設定
 # modprobe tun
 # ifconfig eth0 0.0.0.0 promisc up
 # brctl addbr br0
 # brctl addif br0 eth0
 # ifconfig br0 ???.xxx.aaa.bbb <-- DHCP の場合は # dhclient br0
 # route add default gw ???.xxx.yyy.zzz <-- DHCP の場合は必要無し

ゲストOSの起動
 # qemu-kvm -hda ゲストOS.qcow2 [ -cdrom /dev/sr0 -k ja -localtime -smp 2 ] -boot c -m 512 -net nic[ ,macaddr=52:54:00:12:34:56 ] -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup <-- ルート権限で起動する必要がある。

kvm-ifup スクリプトの内容 --- ホストの /etc/kvm/ 以下に用意(任意に変更可)する。
 #! /bin/sh
 /sbin/ifconfig $1 0.0.0.0 promisc up
 /usr/sbin/brctl addif br0 $1

ゲストOSの設定 ( Plamo の場合なら /etc/rc.d/rc.inet1 (rc.inet1.tradnet) の内容 ) で初期化される。


VMwareイメージ(vmdk)の利用

vmdk のイメージそのままで起動できる。
但し、
ゲストOSが Linux の場合は、起動時 (grubなど) のデバイス名、/etc/fstab でのデバイス名に違いが生じて正常に起動できない事がある。 1CD, レスキューモードなどで起動して修正すれば問題ない。 Ubuntu などのように grub, fstab で UUID を利用している物は問題ないと思われる。
Windows の場合は、ブルースクリーン (0x0000007B) が出てしまう問題があるようです。
 参照先(WinXP) (Win2K)
対応策はレジストリに以下を追加する。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlCriticalDeviceDatabase\pci#ven_8086&dev_7010]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"

上記の対応を施しても同じ問題が発生する場合は、レジストリをチェックして以下の内容が無ければ、追加する事で起動できるかもしれません。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlCriticalDeviceDatabase\primary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"

USB機器の利用

起動オプションに -usb を付けてゲストOSを起動する。
 ( $ sudo qemu-kvm -hda ゲストOS.qcow2 ..... -usb )

ctrl+alt+2 で monitor console に移行し
 (qemu) info usbhost      デバイス表示(確認)
 (qemu) usb_add host:X.X   接続
   ( (qemu) usb_del host:X.X    切断 )
ctrl+alt+1 で仮想マシンに戻る。

通常の USB デバイスを利用するようにゲストOSで利用できる。
( Pixux-560i(Canon), PM-730C(Epson) プリンタ、 CanoScan 5200F(Canon) スキャナ、 USB Flash メモリがゲストOSの Win2k から利用できました(スキャナ以外は ゲストLinux からも利用できました)。)


USB 2.0 (qemu-kvm-0.15.0 で)

起動オプションに

-usb -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=1,hostport=2

を追加する。
hostbus=, hostport= は dmesg の

usb 1-2: new high speed USB device using ehci_hcd and address 4

で bus, port, addr を確認し、設定する。ここでは、hostbus=1, hostport=2, (hostaddr=4) である。
【注意】 ホストマシンの接続ポートにより変化するので、接続先を変更した場合は確認・変更が必要である。
( ソースの qemu-kvm-0.15.0/docs/usb2.txt も一読を .. )


virtioの利用

virtio については動作してるなぁ程度の確認なので、実性能の向上度などについては分かりません。

ディスク

ゲストOSが Plamo の場合 virtio でディスクを利用するには、ドライバーをカーネル組み込みにする必要がある。
これは、ゲスト側のカーネルに必要な事なのでホスト側は起動時のオプション指定だけである。
(Ubuntu などのように起動が initrd 対応ならドライバーがモジュールでも問題ないし、 UUID 指定ならなお楽である。)

ゲストOSが Plamo-4.73 の場合の例

CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=m     -----  y でもよい
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM_VIRTIO=m     -----  y でもよい
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=y

でカーネルを再構築する。

grub.conf の root= と resume= のデバイス指定を sda?? --> vda?? に変更する。
fstab の / と swap のデバイス指定を sda?? --> vda?? に変更する。

ゲストOSを終了して再起動する。
$ sudo qemu-kvm -drive file=ゲストOS.qcow2,if=virtio,boot=on -cdrom /dev/sr0 -boot c -k ja -localtime -m 512 -smp 2 -net nic -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup -usb

正常に起動できればデバイスファイル /dev/vda? で /dev/sda? がない状態である。
ゲストOS側の lspci でも確認できる。

(参考まで)
fstab でのデバイス記述を UUID にしておけば grub のコマンドラインでの変更だけで起動できて少し便利である。 rootfs をマウントできない(どこにあるの?)なんて事がなくなるので (^^;


virtio-net

ネットワークだけ virtio を利用する場合はゲストOS (Plamo の場合) のカーネル再構築は必要ない。
起動オプション指定だけでよい。

ディスクの virtio を利用しない場合
$ sudo qemu-kvm -hda ゲストOS.qcow2 -cdrom /dev/sr0 -boot c -k ja -localtime -m 512 -smp 2 -net nic,model=virtio -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup -usb

ディスクも virtio を利用する場合
$ sudo qemu-kvm -drive file=ゲストOS.qcow2,if=virtio,boot=on -cdrom /dev/sr0 -boot c -k ja -localtime -m 512 -smp 2 -net nic,model=virtio -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup -usb

ゲストOS側の lspci や lsmod で virtio_net を確認できる。


VhostNet

ホスト (Plamo-5.0) のカーネルが

# CONFIG_VHOST_NET is not set
で構築されてますので、有効にして再構築する。

$ sudo qemu-kvm -drive file=ゲストOS.qcow2,if=virtio,boot=on -cdrom /dev/sr0 -boot c -k ja -localtime -m 512 -smp 2 -net nic,model=virtio -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup,vhost=on

でゲストOSを起動する。
ホストでプロセスを見ると

$ ps axww

 3753 pts/7    Ss+    0:00 bash
 3795 pts/1    S      0:00 sudo qemu-kvm -drive file=plamo-473_virtio.qcow2,if=virtio,boot=on -cdrom 
 /dev/sr0 -boot c -k ja -localtime -m 512 -smp 2 -net nic,model=virtio -net tap,ifname=tap0,script=/etc
/kvm/kvm-ifup,vhost=on -usb
 3796 pts/1    Sl     0:28 qemu-kvm -drive file=plamo-473_virtio.qcow2,if=virtio,boot=on -cdrom /dev/sr0 
 -boot c -k ja -localtime -m 512 -smp 2 -net nic,model=virtio -net tap,ifname=tap0,script=/etc/kvm/kvm-
ifup,vhost=on -usb
 3797 ?        S<     0:00 [kvm-pit-wq]
 3805 ?        S      0:00 [vhost-3796]
 3815 pts/1    R+     0:00 ps axww

とカーネルスレッドで動作してるのが確認できる。


Audio Device

ゲスト起動時に -soundhw ? の指定で利用できる。
? に指定できる内容は 
$ qemu-kvm -soundhw ?
で確認できます。
ホスト側、ゲスト側のミキサーの設定に影響されるので、その辺は自身の環境でテストが必要かも知れません。


スナップショット? (backing file ? の利用)

diskimage_diff.qcow2 を作成し (backing file の作成)

$ qemu-img create -b diskimage.qcow2 -f qcow2 diskimage_diff.qcow2 

diskimage_diff.qcow2 を利用して仮想マシンを起動し

$ sudo qemu-kvm -hda diskimage_diff.qcow2 -boot c -m 256 -k ja -localtime ...

操作すれば diskimage.qcow2 は変更されない。


ちょっとした記録



Top/話題/仮想化on Plamo_QEMU-KVM編

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:43