ラベル KVM の投稿を表示しています。 すべての投稿を表示
ラベル KVM の投稿を表示しています。 すべての投稿を表示

2011年5月3日火曜日

Ubuntu 11.04 で VKM + virsh + kvm-img を試してみる

仮想マシンの作成は、コマンドラインで行うと面倒なので、仮想マシンマネージャーを使うと良いでしょう。
仮想マシンの作成が終わったら、virsh コマンドを使って、仮想マシンを制御するのが便利です。


virsh コマンドの使い方

以下の例では、操作対象の仮想マシンの名前を VirtualMachine とします。
  • ヘルプを表示する
    $ virsh help
  • 仮想マシンの一覧と現在の状態を表示する (--all オプションで停止中も含める)
    $ virsh list --all
  • 仮想マシンを起動する
    $ virsh start VirtualMachine
  • 仮想マシンを起動し、シリアルコンソールに接続する
    $ virsh start VirtualMachine --console
  • 仮想マシンをシャットダウンする (ACPI に対応していれば使える。Ubuntu ならパッケージ "acpid" が必要となる。)
    $ virsh shutdown VirtualMachine
  • 仮想マシンを一時停止する (ただし、ホストマシン上のメモリは開放されない)
    $ virsh suspend VirtualMachine
  • 仮想マシンを一時停止から再開する
    $ virsh resume VirtualMachine
  • 仮想マシンの電源を切断する (仮想マシンが反応しない場合のみ使用すること)
    $ virsh destory VirtualMachine
  • 仮想マシンの現在の状態を保存する (仮想マシンは停止し、状態がファイルに保存される。ハイバネーションのようなもの。デフォルトでは、AppArmor で任意の場所には保存できないように設定されている。)
    $ virsh save VirtualMachine /path/filename
  • 仮想マシンの状態を復元する
    $ virsh restore /path/filename
  • 仮想マシンのシリアルコンソールに接続する
    $ virsh console VirtualMachine
  • 仮想マシンに接続する際に使用する VNC のディスプレイ番号を調べる
    $ virsh vncdisplay VirtualMachine
  • 仮想マシンの CD-ROM を入れ替える
    $ virsh attach-disk --type cdrom VirtualMachine /path/to/filename.iso hdc
  • 仮想マシンの設定を確認する (xml 形式)
  • $ virsh dumpxml VirtualMachine
  • 仮想マシンの情報を表示する
    $ virsh dominfo VirtualMachine
  • ホストマシンの情報を表示する
    $ virsh nodeinfo
  • 仮想マシンの CPU 情報を表示する
    $ virsh vcpuinfo VirtualMachine


KVM で VMware のようにスナップショットを取得したいなら、qcow2 形式のイメージを使用しましょう。

イメージの情報を表示

$ kvm-img info JeOS11.img
image: JeOS11.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 903M


イメージの形式を変換

単純な raw 形式から、多機能な qcow2 形式に変換する例を示します。
qcow2 形式は、スナップショットが使えます。

仮想マシンを停止した状態で変換します。

$ sudo mv JeOS11.img JeOS11.img.tmp
$ sudo kvm-img convert -O qcow2 JeOS11.img.tmp JeOS11.img
$ sudo rm JeOS11.img.tmp
$ sudo kvm-img info JeOS11.img
image: JeOS11.img
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 926M
cluster_size: 65536


スナップショット

仮想マシンを停止した状態で作業します。

  • スナップショットを作成 (タグとして "Init" を指定)
    $ sudo kvm-img snapshot -c Init Ubuntu01.img

  • スナップショットを確認する
    $ sudo kvm-img snapshot -l Ubuntu01.img
    Snapshot list:
    ID TAG VM SIZE DATE VM CLOCK
    1 Init 0 2011-05-03 17:09:50 00:00:00.000

  • スナップショット作成時に戻る
    $ sudo kvm-img snapshot -a Init Ubuntu01.img

  • スナップショットを削除する
    $ sudo kvm-img snapshot -d Init Ubuntu01.img


参考

2011年5月1日日曜日

Ubuntu 11.04 で KVM + 仮想マシンマネージャを試してみる

Ubuntu 11.04 で KVM を試してみました。


KVM のネットワーク設定

KVM の仮想マシンが外部のネットワークへ接続するには、NAT を使う方法が簡単です。
ただし、この方法では外部のホストから仮想マシンへアクセスできない。
ホスト OS の物理インタフェースを通して、外部のホストから仮想マシンへのアクセスを許すには、ブリッジの設定が必要になります。

  1. bridge-utils パッケージをインストールします。
    $ sudo apt-get install bridge-utils

  2. ホスト OS のブリッジ設定をするために、"/etc/network/interfaces" を編集します。
    [/etc/network/interfaces]
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet manual

    auto br0
    iface br0 inet static
    address 192.168.1.10
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off


  3. ネットワーク設定の変更を反映します。
    $ sudo /etc/init.d/networking restart

  4. iptables、ufw などのファイアウォール設定を変更します。私の場合は、ufw を使用しているので、FORWARD のデフォルト ポリシーを ACCEPT に変更する。
    $ sudo vi /etc/default/ufw ← DEFAULT_FORWARD_POLICY="ACCEPT" に変更
    $ sudo ufw reload ← 変更を反映



KVM、仮想マシンマネージャーのインストール

  1. CPU が仮想化支援機能に対応しているか調べます。(BIOS の設定変更が必要な場合もあります。)
    $ sudo apt-get install cpu-checker
    $ sudo kvm-ok | grep CPU
    INFO: Your CPU supports KVM extensions

    または、
    $ egrep --color '(vmx|svm)' /proc/cpuinfo ← 出力があれば対応しています

  2. 必要なパッケージをインストールします。
    $ sudo apt-get install kvm libvirt-bin
    $ kvm-ok
    INFO: /dev/kvm exists
    KVM acceleration can be used

  3. ユーザを libvirtd グループに加えます。
    $ sudo adduser $USER libvirtd

  4. libvirtd グループに加わったことを反映するために、ログインしなおし、id コマンドで反映を確認します。
    $ id

  5. virt-manager、virt-viewer をインストールします。
    $ sudo apt-get install virt-manager virt-viewer


仮想マシンマネージャの起動、設定

  1. [仮想マシンマネージャ] (virt-manager) を起動します。
    (端末から起動する場合は、"virt-manager &")

  2. [localhost (QEMU)] が選択された状態で、メニューから [編集] > [接続の詳細] を選択する。

  3. [仮想ネットワーク] タブを選択します。初期設定では、[default] という名前のデバイス [virbr0] が存在します。これは、NAT するネットワークです。[default] は、設定変更できないようなので、[ネットワークの停止] をクリックした後、[ネットワークの削除] をクリックして削除します。

  4. [ネットワークの追加] をクリックし、新しい仮想ネットワークを作成します。
    (設定ファイルは、/var/lib/libvirt/network/*.xml に作成されます。)

    (作成例)
    ネットワーク名: default
    ネットワーク: 192.168.201.0/24
    DHCP 範囲の選択: (開始) 192.168.201.200, (終了) 192.168.201.249
    物理ネットワークへの接続: 物理ネットワークにフォワード, (宛先) いずれかの物理デバイス, (モード) NAT

  5. 仮想ディスクを保存する ストレージ プールを作成します。/var/lib/libvirt/images/ のままでよければ、ストレージ プールの作成作業は必要ありません。
    $ sudo mkdir -pm 755 /somedir/libvirt_images

  6. [ホストの詳細] の [ストレージ] タブを選択、[プールの追加] ボタンをクリックします。

    (作成例)
    名前: libvirt_images
    種類: dir: ファイルシステムディレクトリー
    ターゲットパス: /somedir/libvirt_images

  7. [default] を選択して、[プールの停止] をクリック、[自動起動] のチェックを外し、[適用] をクリックします。[default] を使う場合は、この作業は必要ありません。

  8. 仮想マシンマネージャの [新しい仮想マシンの作成] をクリックして、仮想マシンを作成します。
    (※ 仮想マシンの設定は、/etc/libvirt/qemu/<仮想マシン名>.xml に作成されます。)

  9. 仮想マシン作成後、仮想マシンを選択して、[開く] をクリック。[詳細] > [ディスプレイVNC] > [キーマップ] を [ja] に指定します。デフォルトの [Auto] では、アンダーバーの入力ができませんでした。

Virtual Machine Viewer での接続

仮想端末から、以下のようにして接続します。
$ virt-viewer -c qemu:///system VirtualMachine &


~/.bash_aliases に以下の行を加えると便利かもしれません。
alias virt-viewer='virt-viewer -c qemu:///system'




参考

2010年5月16日日曜日

Ubuntu 10.04 + KVM + Ubuntu Server Edition JeOS を試してみる

Ubuntu 10.04 上で動作させる KVM で、Ubuntu 10.04 Server Edition JeOS をインストールしてみました。


仮想マシンの作成
  1. 仮想マシンマネージャを起動し、[localhost (QEMU)] を選択した状態で、[New] ボタンをクリックして、仮想マシン作成します。

    (作成例)

    名前: JeOS10
    Choose how you would like to install the operating system: ローカルインストールのメディア (ISO イメージ、又は CDROM)
    Locate your install media: Use ISO image, /somepath/ubuntu-10.04-server-amd64.iso
    OS Type: Linux
    Version: Ubuntu 10.04 (Lucid Lynx)
    Memory (RAM): 128
    CPUs: 1
    Enable storage for this virtual machine: ■ (チェック)
    Select managed or other existing storage: ● (選択), [Browse...] をクリック
    ⇒ ストレージボリュームの検索又は作成: [Storage Pools] を選択し、[New Volume] をクリック
    ⇒ ⇒ 名前: JeOS11.img
    ⇒ ⇒ Format: qcow2 (※ qcow2 なら、スナップショット機能が使える。raw なら単純なフォーマットなので、より効率が良い。)
    ⇒ ⇒ Max Capacity: 8192 MB
    ⇒ ⇒ Allocation: 0 MB
    ⇒ 「ストレージボリュームの検索又は作成」に戻ったら、今作成した [JeOS10.img] を選択し、[Choose Volume] をクリック
    Advanced options
    ⇒ Virtual network 'nat1': NAT to br0
    ⇒ Set a fixed mac address: ■ (チェック)
    ⇒ Virt Type: kvm
    ⇒ Architecture: x86_64


Ubuntu JeOS のインストール

(インストール例)
  1. メモリ 128MB を割り当て、CD-ROM (ubuntu-10.04-server-amd64.iso) をセットした仮想マシンを起動する。
  2. Language: 日本語
  3. [Ubuntu Server をインストールする] が選択された状態で、[F4] (モード) を押し、[最小限の仮想マシンをインストール] を選択する。
  4. [Ubuntu Server をインストールする] が選択された状態で、[Enter] キーを押す。
  5. Keyboard model: Generic 105-key (Intl) PC
  6. Detect keyboard layout?: いいえ
  7. Origin of the keyboard: Japan
  8. Keyboard layout: Japan
  9. ホスト名: JeOS10
  10. Is this time zone correct?: はい
  11. パーティショニングの方法: ガイド - ディスク全体を使う
  12. パーティショニングするディスクの選択: 仮想ディスク 1 (vda) - 8.6 GB Virtio Block Device
  13. ディスクに変更を書きこみますか?: はい
  14. 新しいユーザの本名 (フルネーム): Non Sugar
  15. あなたのアカウントのユーザ名: nonsugar
  16. 新しいユーザのパスワードを選んでください: (パスワード)
  17. 確認のため、再度パスワードを入力してください: (パスワードを再入力)
  18. ホームディレクトリを暗号化しますか?: いいえ
  19. HTTP プロキシの情報 (なければ空): (空欄)
  20. このシステムのアップグレードをどのように管理しますか?: 自動的にアップグレードしない
  21. インストールするソフトウェアの選択: (何も選択しない)
  22. マスターブートレコードに GRUB ブートローダをインストールしますか?: はい
  23. [インストールの完了] 画面で、[続ける] を選択する。
  24. インストールが終了すると、再起動せずに停止してしまうので、仮想マシンマネージャで仮想マシンを選択し、[実行] をクリックする。


Ubuntu でシリアルポートからログインできる設定
  1. /etc/init/ttyS0.conf を作成する。
    $ sudo cp -p /etc/init/tty1.conf /etc/init/ttyS0.conf
    $ sudo vi /etc/init/ttyS0.conf
    ---- ---- ---- ----
    start on stopped rc RUNLEVEL=[2345]
    stop on runlevel [!2345]

    respawn
    exec /sbin/getty -L 115200 ttyS0 vt100
    ---- ---- ---- ----
  2. 再起動する。("sudo reboot")
  3. 以後、"sudo virsh console JeOS10" でシリアルポートからログインできます。


Ubuntu JeOS インストール後の初期設定

  1. 作成したアカウントで、ログインする。

  2. ネットワークの設定を行う。(/etc/network/interfaces, /etc/resolv.conf)

    (設定例)
    [/etc/network/interfaces]
    auto eth0
    iface eth0 inet static
    address A.B.C.D
    netmask A.B.C.D
    gateway A.B.C.D

    [/etc/resolv.conf]
    nameserver 8.8.8.8
    nameserver 8.8.4.4

  3. ネットワーク設定を反映する。
    $ sudo /etc/init.d/networking restart

  4. パッケージをアップグレードする。
    $ sudo apt-get update && sudo apt-get dist-upgrade

  5. 再起動する。
    $ sudo reboot

  6. 必要なパッケージのインストールや設定を行う。
    (例)
    $ sudo apt-get install openssh-server ## ssh でログインできるようにする
    $ sudo apt-get install acpid ## 仮想マシンの停止 (virsh shutdown) ができるようにする
    $ sudo apt-get install vim screen wget telnet traceroute dnsutils tcpdump


仮想マシンの複製

  1. コピー元の仮想マシン OriginalGuest を停止しておく。
  2. virt-clone コマンドで、仮想マシン NewGuest を作成する。(仮想マシンマネージャで、仮想マシンを選択、右クリック [Clone] でも複製できる。)

    Host$ sudo virt-clone -o OriginalGuest -n NewGuest -f /var/kvm_images/NewGuest.img

  3. 仮想マシン NewGuest を起動し、ログインした後、以下のコマンドを実行する。
    NewGuest$ passwd
    NewGuest$ sudo vi /etc/hostname
    NewGuest$ sudo vi /etc/hosts
    NewGuest$ sudo vi /etc/network/interfaces
    NewGuest$ sudo rm /etc/udev/rules.d/70-persistent-net.rules ## MAC アドレスが変更されているので、削除する。再起動後に再生成される。
    NewGuest$ sudo reboot


2010年3月14日日曜日

kvm-img (qemu-img) を使ってみる

KVM で VMware のようにスナップショットが取れないものかと調べていたら、qcow2 形式のイメージなら可能なようです。
スナップショット機能は、検証作業に無くてはならない便利な機能です。


イメージの情報を表示

$ kvm-img info JeOS11.img
image: JeOS11.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 903M


イメージの形式を変換

単純な raw 形式から、多機能な qcow2 形式に変換する例を示します。
qcow2 形式は、スナップショットが使えます。

仮想マシンを停止した状態で変換します。

$ sudo mv JeOS11.img JeOS11.img.tmp
$ sudo kvm-img convert -O qcow2 JeOS11.img.tmp JeOS11.img
$ sudo rm JeOS11.img.tmp
$ kvm-img info JeOS11.img
image: JeOS11.img
file format: qcow2
virtual size: 8.0G (8589934592 bytes)
disk size: 926M
cluster_size: 65536


スナップショットの作成

仮想マシンを停止した状態で作業します。

$ sudo kvm-img snapshot -c 20100314#1 JeOS11.img


スナップショットを確認する

$ kvm-img snapshot -l JeOS11.img
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 20100314#1 0 2010-03-14 22:40:34 00:00:00.000


スナップショットに戻る

仮想マシンを停止した状態で作業します。

$ sudo kvm-img snapshot -a 20100314#1 JeOS11.img


スナップショットを削除する

仮想マシンを停止した状態で作業します。

$ sudo kvm-img snapshot -d 20100314#1 JeOS11.img


参考

2010年2月26日金曜日

KVM で、Virtio Windows 用ドライバを試してみる

注意

64ビット版 Windows では、ドライバに署名が必須となるようです。
現在配布されているドライバは署名がされていないので、64ビット版で使うには苦労するようです。


ドライバのインストールの概要

  1. インストール時に使用した NIC を削除し、Virtio NIC を追加します。
  2. ドライバをインストールするために、ダミーの Virtio Disk を追加します。
  3. 仮想マシンを起動し、[新しいハードウェアの検索ウィザード] で、NIC と Disk のドライバをインストールします。
  4. 仮想マシンシャットダウン後、ダミーの Disk を削除します。
  5. 起動ディスクを一度削除したあと、再度 Virtio Disk として起動ディスクのファイルを選択し直します。

ドライバのインストール方法

  1. Windows 用 Virtio ドライバ をダウンロードする。
  2. 仮想マシンをシャットダウンする。
  3. 仮想マシンマネージャー (virt-manager) を起動する。
  4. 対象の仮想マシンを選択し、メニュー Edit > Virtual Machine Datails を選択する。
  5. [Datails] タブで NIC を選択して、[削除] ボタンをクリックする。
  6. [Add Hardware] ボタンをクリックする。
  7. Hardware type: Network、Device Model: virtio で、NIC を追加する。
  8. [Add Hardware] ボタンをクリックする。
  9. Hardware type: Storage、Device Model: Virtio Disk で、ダミーのディスクを追加する。
    手順 3-9 を virsh コマンドで実施することもできる。
    $ virsh edit VirtualMachine

    <interface type="network">
    :
    :
    <model type="virtio"/> ← この行を追加する。
    </interface>

    ダミーのディスクを追加するため、以下 3 行を追加する。(dummy.img は、仮想マシンマネージャーで予め作成しておく。)
    <disk type="file" device="disk">
    <source file='/var/kvm_images/dummy.img'/>
    <target dev="vda" bus="virtio"/>
    </disk>
  10. 仮想マシンを起動する。($ virsh start VirtualMachine)
  11. Administrator で、ログオンする。
  12. [新しいハードウェアの検索ウィザード] が起動するので、NIC と Disk のドライバをインストールする。ウィザードが起動しない場合は、[デバイス マネージャー] を起動して、[SCSI コントローラー] と [イーサネット コントローラー] の [ドライバ ソフトウェアの更新] を実施する。先にダウンロードしたドライバを選択するのだが、OS の種類、32/64ビット毎にフォルダに分かれているので、選択を間違えないようにすること。
  13. 仮想マシンをシャットダウンする。
  14. 仮想マシンマネージャー (virt-manager) で、対象の仮想マシンを選択し、メニュー Edit > Virtual Machine Datails を選択する。
  15. [Datails] タブで、先ほど追加したダミーのディスクを選択して、[削除] ボタンをクリックする。
  16. 起動ディスク (Disk hda) を選択して、[削除] ボタンをクリックする。
  17. [Add Hardware] ボタンをクリックする。
  18. Hardware type: Storage、Device Model: Virtio Disk、Location で、起動ディスクの仮想ディスクを選択し、ディスクを作成する。
  19. Disk vda が作成される。
    手順 14-19 を virsh コマンドで実施することもできる。
    $ virsh edit VitrualMachine

    ダミー用ディスクの部分を削除

    起動ディスクの仮想ディスクを virtoio に変更する。
    <disk type='file' device='disk'>
    <source file='/var/kvm_images/VirtualMachine.img'/>
    <target dev='vda' bus='virtio'/> ← 変更
    </disk>
  20. 仮想マシンを起動する。($ virsh start VitrualMachine)

ベンチマーク
  • ホスト OS: Ubuntu 9.10 (amd64)
  • 仮想マシン: KVM, Windows 7 (x86)
  • CPUs: 2 (x64), Memory: 2GB, HDD: 40GB (ide, raw, 固定サイズ)
  • プロセッサ: 5.8
  • メモリ (RAM): 5.5
  • グラフィックス: 1.0
  • ゲーム用グラフィックス 1.0
  • プライマリ ハードディスク: 5.9
  • ホスト OS: Ubuntu 9.10 (amd64)
  • 仮想マシン: KVM, Windows 7 (x86)
  • CPUs: 2 (x64), Memory: 2GB, HDD: 40GB (virtio, raw, 固定サイズ)
  • プロセッサ: 5.8
  • メモリ (RAM): 5.5
  • グラフィックス: 1.0
  • ゲーム用グラフィックス 1.0
  • プライマリ ハードディスク: 5.9

※ virtio にしても測定結果に変化はありませんでした。


参考

2010年1月31日日曜日

Ubuntu 9.10 で KVM + virsh を試してみる

仮想マシンの作成は、コマンドラインで行うと面倒なので、仮想マシンマネージャーを使うと良いでしょう。
仮想マシンの作成が終わったら、virsh コマンドを使って、仮想マシンを制御するのが便利です。

仮想マシンの デスクトップが必要な場合は、「Virtual Machine Viewer」を使うのが便利です。
例えば、VirtualMachine という名前の仮想マシンに接続するには、仮想マシンを起動した後に、

$ virt-viewer VirtualMachine &

とします。
仮想マシンマネージャーでもデスクトップに接続できますが、制御を仮想マシンに渡しても、[Alt] + [F] などが、仮想マシンマネージャーのメニューに制御が取られてしまいます。
「Virtual Machine Viewer」は、この点が改良されています。
仮想マシンに、キーボード、マウスの制御を渡すには、仮想マシンの画面をクリックします。
仮想マシンから、キーボード、マウスの制御をホスト側に戻すには、[Ctrl] + [Alt] を押します。


virsh コマンドの使い方

以下の例では、操作対象の仮想マシンの名前を VirtualMachine とします。
  • ヘルプを表示する
    $ virsh help
  • 仮想マシンの一覧と現在の状態を表示する (--all オプションで停止中も含める)
    $ virsh list --all
  • 仮想マシンを起動する
    $ virsh start VirtualMachine
  • 仮想マシンをシャットダウンする (ACPI に対応していれば使える)
    $ virsh shutdown VirtualMachine
  • 仮想マシンを一時停止する (ただし、ホストマシン上のメモリは開放されない)
    $ virsh suspend VirtualMachine
  • 仮想マシンを一時停止から再開する
    $ virsh resume VirtualMachine
  • 仮想マシンの電源を切断する (仮想マシンが反応しない場合のみ使用すること)
    $ virsh destory VirtualMachine
  • 仮想マシンの現在の状態を保存する (仮想マシンは停止し、状態がファイルに保存される。ハイバネーションのようなもの。デフォルトでは、AppArmor で任意の場所には保存できないように設定されている。)
    $ virsh save VirtualMachine /path/filename
  • 仮想マシンの状態を復元する
    $ virsh restore /path/filename
  • 仮想マシンのシリアルコンソールに接続する (root 権限が必要)
    $ sudo virsh console VirtualMachine
  • 仮想マシンに接続する際に使用する VNC のディスプレイ番号を調べる
    $ virsh vncdisplay VirtualMachine
  • 仮想マシンの CD-ROM を入れ替える
    $ virsh attach-disk --type cdrom VirtualMachine /path/to/filename.iso hdc
  • 仮想マシンの設定を確認する (xml 形式)
  • $ virsh dumpxml VirtualMachine
  • 仮想マシンの情報を表示する
    $ virsh dominfo VirtualMachine
  • ホストマシンの情報を表示する
    $ virsh nodeinfo
  • 仮想マシンの CPU 情報を表示する
    $ virsh vcpuinfo VirtualMachine

参考

dbench でベンチマークを試してみる

仮想マシンのベンチマークをしてみたくて、dbench (ディスク) と iperf (ネットワーク) を使ってみた。

dbench

$ sudo apt-get install dbench ## インストール

$ debench 5 ## テスト

iperf

$ sudo apt-get install iperf ## インストール

server$ iperf -s ## サーバ側

client$ iperf -c <サーバ IP アドレス> ## クライアント側


結果

ディスクのベンチマークは、仮想マシン上で "dbench 5" を実行しました。
ネットワークのベンチマークは、仮想マシン上で、"iperf -s" を実行し、ホスト OS 上で、"iperf -c <仮想マシンの IP アドレス>" を実行しました。
  • 仮想マシン: KVM, Ubuntu 9.10 (JeOS), CPUs = 1, Memory = 128MB, Disk = virtio, qcow2, NIC = virtio
    ディスク: Throughput 87.0448 MB/sec 5 clients 5 procs max_latency=1549.509 ms
    ネットワーク: Bandwidth 1.05 Gbits/sec
  • 仮想マシン: VMware Server 2.0, Ubuntu 9.10 (JeOS), CPUs = 1, Memory = 128MB, VMware Tools インストール済み
    ディスク: Throughput 247.579 MB/sec 5 clients 5 procs max_latency=223.260 ms
    ネットワーク: 1.14 Gbits/sec
結果は、VMware の方が、KVM よりパフォーマンスが良かったのだが、条件を変えて試してみる必要がありそうだ。


参考

2010年1月30日土曜日

KVM で、Ubuntu JeOS のインストールを試してみる

KVM で、Ubuntu Server Edition JeOS をインストールしてみました。

仮想マシンの作成
  1. 仮想マシンマネージャーを起動し、[localhost (System)] を選択した状態で、[新規] ボタンをクリックして、仮想マシン作成します。

    (作成例)
    Name: JeOS11
    Choose how you would like to install the operating system: Local install media (ISO image or CDROM)
    Locate your install media: Use ISO image, /somepath/ubuntu-9.10-server-amd64.iso
    OS Type: Linux
    Version: Ubuntu 9.10 (Karmic Koala)
    Memory (RAM): 128
    CPUs: 1
    Enable storage for this virtual machine: ■ (チェック)
    Select managed or other existing storage: ● (選択)、[Browse...] をクリック
    Storage Pools: kvm_images を選択し、[New Volume] をクリック
    > Name: JeOS11.img
    > Format: qcow2 (※ qcow2 なら、スナップショット機能が使える。raw なら単純なフォーマットなので、より効率が良い。)
    > Max Capacity: 8192 MB
    > Allocation: 0 MB
    Advanced options: Virtual network 'nat1': NAT to br0
    > Set a fixed mac address: ■ (チェック)
    > Virt Type: kvm
    > Architecture: x86_64


Ubuntu JeOS のインストール

(インストール例)
  1. メモリ 128MB を割り当て、CD-ROM (ubuntu-9.10-server-amd64.iso) をセットした仮想マシンを起動する。
  2. Language: English
  3. [Install Ubuntu Server] が選択された状態で、[F4] キーを押し、[Install a minimal virtual machine] を選択する。
  4. [Install Ubuntu Server] が選択された状態で、[Enter] キーを押す。
  5. Choose language: C
  6. Choose a continent or rigon: Asia
  7. Choose a coutry, territory or area: Japan
  8. Detect keyboard layout?: no
  9. Origin of the keyboard: Japan
  10. Keyboard layout: Japan
  11. Character set to support: . Combined - Latin; Slavic Cyrillic; Hebrew; basic Arabic
  12. Hostname: JeOS11
  13. Partitioning method: Guided - use entire disk
  14. Select disk to partition: Virtual disk 1 (vda) - 8.6 GB Virtio Block Device
  15. Write the changes to disks?: Yes
  16. Full name for the new user: Non Sugar
  17. Username for your account: nonsugar
  18. choose a password for new user: (パスワード)
  19. Re-enter password to verify: (パスワードを再入力)
  20. Encrypt your home directory?: No
  21. HTTP proxy information (blank for none): (空欄)
  22. How do you want to manage upgrades on this system?: No automatic updates
  23. Choose software to install: (何も選択しない)
  24. [Finish the installation] 画面で、continue を選択する。
  25. インストールが終了すると、再起動せずに停止してしまうので、仮想マシンマネージャーのメニューから、[Virtual Machine] > [Run] をクリックする。


Ubuntu でシリアルポートからログインできる設定
  1. /etc/init/ttyS0.conf を作成する。
    $ sudo cp -p /etc/init/tty1.conf /etc/init/ttyS0.conf
    $ sudo vi /etc/init/ttyS0.conf
    ---- ---- ---- ----
    start on stopped rc RUNLEVEL=[2345]
    stop on runlevel [!2345]

    respawn
    exec /sbin/getty -L 115200 ttyS0 vt100
    ---- ---- ---- ----
  2. 再起動する。("reboot")
  3. 以後、"sudo virsh console JeOS11" でシリアルポートからログインできます。


Ubuntu JeOS インストール後の初期設定

  1. 作成したアカウントで、ログインして、パッケージを最新の状態にする。

  2. $ sudo apt-get update && sudo apt-get dist-upgrade

  3. 再起動する。
    $ sudo reboot

  4. ネットワークの設定を行う。(/etc/network/interfaces, /etc/resolv.conf)
    (設定例)
    [/etc/network/interfaces]
    auto eth0
    iface eth0 inet static
    address A.B.C.D
    netmask A.B.C.D
    gateway A.B.C.D

    [/etc/resolv.conf]
    nameserver 8.8.8.8
    nameserver 8.8.4.4
  5. ネットワーク設定を反映する。
    $ sudo /etc/init.d/networking restart

  6. 必要なパッケージのインストールや設定を行う。
    (例)
    $ sudo apt-get install openssh-server ## ssh でログインできるようにする
    $ sudo apt-get install acpid ## 仮想マシンの停止 (virsh shutdown) ができるようにする
    $ sudo apt-get install screen wget vim traceroute telnet dnsutils tcpdump iperf


仮想マシンの複製

  1. コピー元の仮想マシン OriginalGuest を停止しておく。
  2. virt-clone コマンドで、仮想マシン NewGuest を作成する。
    Host$ sudo virt-clone -o OriginalGuest -n NewGuest -f /var/kvm_images/NewGuest.img
  3. 仮想マシン NewGuest を起動し、ログインした後、以下のコマンドを実行する。
    NewGuest$ passwd
    NewGuest$ sudo vi /etc/hostname
    NewGuest$ sudo vi /etc/hosts
    NewGuest$ sudo vi /etc/network/interfaces
    NewGuest$ sudo rm /etc/udev/rules.d/70-persistent-net.rules ## MAC アドレスが変更されているので、削除する。再起動後に再生成される。
    NewGuest$ sudo reboot


Ubuntu 9.10 で KVM + 仮想マシンマネージャーを試してみる

virtio を使った準仮想化がどの程度、パフォーマンスを向上させるか興味があるので、Ubuntu 9.10 での KVM を試してみました。


KVM、仮想マシンマネージャーのインストール

  1. CPU が仮想化支援機能に対応しているか調べます。
    $ egrep --color '(vmx|svm)' /proc/cpuinfo ← 出力があれば対応しています

  2. 必要なパッケージをインストールします。
    $ sudo apt-get install kvm libvirt-bin

  3. ユーザを libvirtd グループに加えます。
    $ sudo adduser $USER libvirtd

  4. libvirtd グループに加わったことを反映するために、ログインしなおし、id コマンドで反映を確認します。
    $ id

  5. virt-manager、virt-viewer をインストールします。
    $ sudo apt-get install virt-manager virt-viewer


仮想マシンマネージャーの起動、設定

  1. [アプリケーション]-[システムツール]-[仮想マシンマネージャー] (virt-manager) を起動します。
    (端末から起動する場合は、"virt-manager &")

  2. [localhost (System)] が選択された状態で、メニューから [Edit] > [Host Details] を選択する。

  3. [Virtual Networks] タブを選択、[Add Network] ボタン ([+] のボタン) をクリックし、新しい仮想ネットワークを作成します。
    (設定ファイルは、/var/lib/libvirt/network/*.xml に作成されます。)

    (作成例)
    Network Name: nat1
    Network: 172.16.211.0/24
    Selecting the DHCP range: 172.16.211.128 (Start), 172.16.211.254 (End)
    Connecting to phisical network: Forwarding to phicical network, NAT to phicical device br0

  4. [default] ネットワークを選択、[Stop Network]、[Delete Network] を順にクリックして、自動的に作成された [default] ネットワークを削除する。

  5. 仮想ディスクを保存する ストレージ プールを作成します。/var/lib/libvirt/images/ のままでよければ、ストレージ プールの作成作業は必要ありません。
    $ sudo mkdir -pm 755 /var/kvm_images

  6. [Host Details] ダイアログの [Storage] タブを選択、[Add Pool] ボタンをクリックします。

    (作成例)
    Name: kvm_images
    Type: dir Filesystem Directory
    Target Path: /mnt/sda2/kvm_images

  7. [default] を選択して、[Autostart] のチェックを外します。[default] を使う場合は、この作業は必要ありません。


参考

2009年8月16日日曜日

VMware Server 2.0 と KVM (Kernel Based Virtual Machine) のパフォーマンス比較

あくまで参考程度で。

ホストマシン
  • CPU: AMD Phenom X4 クアッドコア・プロセッサ 9750 (4×512KB L2キャッシュ | 2.40GHz | HyperTransport 3.0)
  • メモリ: 8GB (2GB × 4)
  • ホスト OS: Ubuntu 9.04 (Kernel: 2.6.28-14)
ゲスト OS
  • ゲスト OS: Windows 7 RC 64-bit
  • CPU 数: 2
  • メモリ: 2GB
仮想環境
  • VMware Server: 2.0.1
    ※ Hard Disk - Policies - Write cashing: ● Optimize for performance とする。
    ※ VMware Tools をインストールする。
  • kvm: 1:84+dfsg-0ubuntu12.3
    ※ kvm は、リブート時やシャットダウン時に固まるので、"virsh destroy DOMAIN" で強制終了しなければならない。
Windows エクスペリエンス インデックスの結果
  • VMware Server
    プロセッサ: 5.9
    メモリ (RAM): 5.5
    グラフィックス: 1.0
    ゲーム用グラフィックス: 1.0
    プライマリ ハードディスク: 6.9
  • KVM
    プロセッサ: 5.9
    メモリ (RAM): 5.5
    グラフィックス: 1.0
    ゲーム用グラフィックス: 1.0
    プライマリ ハードディスク: 5.9

2009年6月1日月曜日

CentOS 5 に Plone をインストール

KVM (仮想マシン) で Plone という CMS を CentOS 5 にインストールしてみた。

インストール
  1. CentOS 5 をインストール DVD (CentOS-5.3-x86_64-bin-DVD.iso) でインストールする。
  2. インストーラの boot: プロンプトに「linux text 」と入力し、テキストモードでインストールする。
  3. [Package selection] では最小の構成でインストールしたいので、全てのチェックを外す。
  4. 最初の起動時に [Setup Agent] (setup) が起動するので、適宜設定する。
  5. 最新のパッケージに更新する。
    # yum update
  6. グループの確認
    # yum grouplist
  7. 「開発ツール」をインストールする。
    # yum groupinstall "開発ツール"
  8. ソースをダウンロード、コンパイル、インストールする。
    # wget http://launchpad.net/plone/3.2/3.2.2/+download/Plone-3.2.2-UnifiedInstaller.tgz
    # tar xzf Plone-3.2.2-UnifiedInstaller.tgz
    # cd Plone-3.2.2-UnifiedInstaller
    # ./install.sh standalone
    # iptables -I RH-Firewall-1-INPUT -p tcp --dport 8080 -m state --state NEW -j ACCEPT
    # iptables-save
    # /usr/local/Plone/zinstance/bin/plonectl start

参考

2009年5月27日水曜日

Ubuntu でシリアルポートからログインする

Linux でネットワーク経由で接続できない場合のために、シリアルポートからログインできるようにしておくと便利である。

そうすれば、邪魔なディスプレイもキーボード、マウスも片付けられる。



Ubuntu でシリアルポートからログインする設定



  1. /etc/event.d/ttyS0 を作成する
    $ sudo cp -p /etc/event.d/tty1 /etc/event.d/ttyS0
    $ sudo vi /etc/event.d/ttyS0
    ---- ---- ---- ----
    start on stopped rc2
    start on stopped rc3
    start on stopped rc4
    start on stopped rc5
    stop on runlevel 0
    stop on runlevel 1
    stop on runlevel 6
    respawn
    exec /sbin/getty -L 9600 ttyS0 vt100
    ---- ---- ---- ----



Ubuntu でシリアルポートからログインする設定 (9.10 以降)



  1. /etc/init/ttyS0.conf を作成する
    $ sudo cp -p /etc/init/tty1.conf /etc/init/ttyS0.conf
    $ sudo vi /etc/init/ttyS0.conf
    ---- ---- ---- ----
    start on stopped rc RUNLEVEL=[2345]
    stop on runlevel [!2345]

    respawn
    exec /sbin/getty -L 9600 ttyS0 vt100
    ---- ---- ---- ----



CentOS 5 でシリアルポートからログインする設定



  1. /etc/inittab に次の行を追加する
    S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100

  2. /etc/securetty に次の行を追加する (root ログインに必要)
    ttyS0


CentOS 6 でシリアルポートからログインする設定






Debian (Lenny) でシリアルポートからログインする設定





  1. /etc/inittab の次の行のコメントを外す
    T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100





KVM でシリアルデバイスを追加する




また、KVM で virtsh 経由でコンソール接続するには、xml ファイルを編集してシリアルデバイスを追加する必要がある。



  1. 仮想マシンの xml ファイルを編集する。(仮想マシン: UbuntuJeOS11 の例)
    $ virsh
    virsh # edit UbuntuJeOS11
    :
    <devices>
    :
    <serial type='pty'>
    <source path='/dev/pts/0'>
    <target port='0'/>
    </serial>
    :
    </devices>

  2. 仮想マシンを起動する。
    virsh # start UbuntuJeOS11
    virsh # quit

  3. コンソールで仮想マシンに接続する。(root 権限が必要。コンソールから抜けるには、ctrl + ])
    sudo virsh console UbuntuJeOS11



参考

2009年5月26日火曜日

仮想マシンのディスクイメージの複製

仮想マシンのディスク イメージを複製して使用したいことがよくある。
その場合の注意点がある。


仮想マシンの複製 (KVM の場合)
  1. 複製元になる仮想マシンを停止する。
  2. 仮想マシンのディスクイメージをコピーする。
    $ sudo virt-clone -o OriginalGuest -n NewGuest -f /path/to/NewGuest.img


Windows Server 2003 の場合

Windows の場合、SID などの再生性のために sysprep を実行する必要がある。
  1. 新しい仮想マシンを起動し、Administrator でログオンする。
  2. C:\sysprep フォルダを作成する。(このフォルダは再起動後に自動的に削除される)
    > mkdir C:\sysprep
  3. 仮想マシンの CD-ROM ドライブに OS のインストール CD-ROM をセットする。
    KVM なら 以下の例のようにする。
    $ virsh attach-disk --type cdrom NewGuest /path/to/2003_disk1.iso hdc
  4. D:\SUPPORT\TOOLS\DEPLOY.CAB に含まれるファイルを C:\sysprep フォルダにコピーする。(D: をCD-ROM ドライブとする。)
    > expand -f:* D:\SUPPORT\TOOLS\DEPLOY.CAB C:\sysprep
  5. C:\sysprep\sysprep.exe を実行する。
  6. [再シール] ボタンをクリックする。
  7. 自動的にシャットダウンする。
  8. 起動すると「Windows セットアップ ウィザード」が開始します。
後は、ホスト名とネットワーク設定を通常通り行えば良い。


Windows Server 2008 R2 の場合

Windows の場合、SID などの再生性のために sysprep を実行する必要がある。
  1. 新しい仮想マシンを起動し、Administrator でログオンする。
  2. ファイル名を指定して実行から、[%SystemRoot%\System32\sysprep\sysprep.exe /generalize /oobe /reboot] を実行する。
  3. 再起動すると、「Windows セットアップ ウィザード」が開始します。
後は、ホスト名とネットワーク設定を通常通り行えば良い。


Ubuntu の場合

新しい仮想マシンを作成し、MAC アドレスが変わると、新しいインタフェース名で認識してしまう。
/etc/udev/rules.d/70-persistent-net.rules を削除し、再起動すればよい。/etc/udev/rules.d/70-persistent-net.rules は、再起動後に再生成される。

後は、ホスト名とネットワーク設定を通常通り行えば良い。

CentOS の場合

新しい仮想マシンを作成し、MAC アドレスが変わると、ネットワーク設定が初期化されてしまう。

  1. eth0 の記述があるファイルを調べる。
    find /etc -type f | xargs grep eth0
  2. MAC アドレスを調べる。
    # ifconfig | grep HWaddr
  3. /etc/sysconfig/network-scripts/ifcfg-eth? ifcfg-eth?.bak にバックアップされ、ifcfg-eth? は初期化されてしまう。バックアップファイルから元に戻し、HWADDR= の行の MAC アドレスを実際のアドレスに修正する。
  4. /etc/sysconfig/hwconf にも network.hwaddr: の行に MAC アドレスの記述があるが自動的に更新される。
後は、ホスト名とネットワーク設定を通常通り行い、再起動すればよい。

(例) ホスト名を変更する場合
  1. ホスト名の記述があるファイルを調べる。
    # find /etc -type f | xargs grep `hostname -s`
  2. /etc/sysconfig/network の HOSTNAME= の行を修正
  3. /etc/hosts を修正
  4. reboot

2009年5月6日水曜日

Windows 7 RC をインストールしてみる



Windows 7 RC 版の配布が開始されたので、早速、64-bit 版をダウンロードし、KVM でインストールしてみました。
2010/6/1 まで使えますが、2010/3/1 からは、2時間毎にシャットダウンするようです。
リモート デスクトップで使用してみましたが、快適に動いています。

最小システム要件は、以下のとおり。
  • 1 GHz or faster 32-bit (x86) or 64-bit (x64) processor
  • 1 GB RAM (32-bit) / 2 GB RAM (64-bit)
  • 16 GB available disk space (32-bit) / 20 GB (64-bit)
  • DirectX 9 graphics processor with WDDM 1.0 or higher driver
インストール
  1. Virtual Machine Manager (virt-manager) を起動
  2. 以下のパラメータで仮想マシンを作成
    OS Type: Windows, OS Variant: Microsoft Windows Vista
    File Size: 50000MB
    Max memory: 2048MB
    Startup memory: 2048MB
    Virtual CPUs: 2
  3. インストール中の再起動で止まってしまうので、"Force Off" 後、"Run" で起動する。(ACPI が対応していないから?)
  4. ウイルス対策ソフトをインストールする。(AVG Free が対応済み)

参考

2009年5月3日日曜日

KVM のネットワーク設定

KVM の仮想マシンが外部のネットワークへ接続するには、NAT を使う方法が簡単です。
ただし、この方法では外部のホストから仮想マシンへアクセスできない。
ホスト OS の物理インタフェースを通して、外部のホストから仮想マシンへのアクセスを許すには、ブリッジの設定が必要となる。

ホスト OS のブリッジの設定
  1. /etc/network/interfaces を編集する
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet manual

    auto br0
    iface br0 inet static
    address 192.168.1.10
    network 192.168.1.0
    netmask 255.255.255.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off
  2. ネットワーク設定の変更を反映する
    $ sudo /etc/init.d/networking restart
  3. iptables、ufw などのファイアウォール設定を変更する
    私の場合は、ufw を使用しているので、FORWARD のデフォルト ポリシーを ACCEPT に変更する
    $ sudo vi /etc/default/ufw ← DEFAULT_FORWARD_POLICY="ACCEPT" に変更
    $ sudo ufw reload ← 変更を反映


参考

2009年4月29日水曜日

KVM で仮想マシンを作成

KVM で仮想マシンを作成にはいくつかの方法がある。

virt-install: ISO イメージからインストールする
  1. virt-install をインストールする
    $ sudo apt-get install python-virtinst
  2. virt-install のヘルプを表示する
    $ virt-install --help
  3. virt-install を使い ISO イメージからインストールする
    sudo virt-install --connect=qemu:///system \
    --hvm --accelerate --vnc --noautoconsole \
    --name=Win7Beta01 \
    --ram=2048 --vcpus=2 --sound \
    --os-type=windows --os-variant=vista \
    --cdrom=/CD-ROM/Windows/Win7Beta.iso \
    --file=/kvm_images/Win7Beta01/Win7Beta01.img --file-size=50
  4. 仮想マシンの名前を確認する
    $ virsh list --all
  5. 仮想マシンに接続する
    $ virt-viewer Win7Beta01
  6. 通常どおり OS をインストールする
vmbuilder: Ubuntu JeOS を作成する
  1. vmbuilder をインストールする
    $ sudo apt-get install python-vm-builder
    ※ なぜか、Postfix されてしまう。私は「ローカル」のみで設定した。
  2. 仮想ハードディスクを作成するディレクトリに移動
    $ cd /kvm_images
  3. vmbuilder のヘルプを表示する
    vmbuilder kvm ubuntu --help
  4. vmbuilder を使って Ubuntu JeOS を作成する
    sudo vmbuilder kvm ubuntu \
    --suite jaunty --flavour=virtual \
    --overwrite --tmpfs=- --libvirt=qemu:///system \
    --dest=/kvm_images/UbuntuJeOS01 \
    --mem=128 --cpus=1 --arch=amd64 \
    --domain=localdomain \
    --hostname=UbuntuJeOS01 \
    --user=nonsugar --name="Non Sugar" --pass=nonsugar
    ※ 我が家の環境では約15分かかった
  5. 仮想マシンの名前を確認する
    $ virsh list --all
  6. 仮想マシンを起動する
    $ virsh start UbuntuJeOS01
  7. 仮想マシンに接続する
    $ virt-viewer UbuntuJeOS01


参考

2009年4月28日火曜日

Ubuntu で KVM (Kernel-based Virtual Machine)

Ubuntu 9.04 で KVM による仮想化に挑戦してみました。
Ubuntu は、仮想技術のバックエンドとして KVM を、そのツールキット/API として、libvirt を使います。仮想マシンを管理するツールとして、virt-manager (GUI) と virsh (CLI) があります。
KVM を使うには、CPU が仮想化支援機能 (Intel VT/AMD-V) に対応している必要があり、かつ BIOS で機能を有効にしなくてはなりません。

インストール
  1. CPU が仮想化支援機能に対応しているか調べます。
    $ egrep --color '(vmx|svm)' /proc/cpuinfo ← 出力があれば対応しています
  2. 必要なパッケージをインストールします。
    $ sudo apt-get install kvm libvirt-bin
  3. ユーザを libvirtd グループに加えます。
    $ sudo adduser $USER libvirtd
  4. libvirtd グループに加わったことを反映するために、ログインしなおします。
  5. virt-manager、virt-viewer を含むパッケージをインストールします。
    $ sudo apt-get install virt-manager virt-viewer
仮想マシンマネージャーによる仮想マシンのインストール
  1. [アプリケーション]-[システムツール]-[仮想マシンマネージャー] (virt-manager) を起動します。
    仮想マシンマネージャーを使えば、GUI で仮想マシンを作成できます。

仮想マシンへの接続

仮想マシンへの接続は、VNC クライアントで行います。
  • 仮想マシンマネージャー (virt-manager) の Console タブで接続する。
  • 仮想マシン VirtualMachine に Virtual Machine Viewer で接続する。
    $ virt-viewer VirtualMachine
  • (TightVNC などお好みの) VNC クライアントで接続する。リモートホストからの場合、ssh ポートフォワードと組み合わせます。
    remote$ l=""; for p in `seq 5901 5910`; do l="$l -L $p:localhost:$p"; done; ssh $l -X remote ← 5901/tcp ~ 5910/tcp をポートフォワードします。

virsh (CLI) の使い方
  • ヘルプを表示する
    $ virsh help
  • 仮想マシンをリストする
    $ virsh list --all
  • 仮想マシン VirtualMachine を起動する
    $ virsh start VirtualMachine
  • ホスト OS 起動時に仮想マシン VirtualMachine を起動する
    $ virsh autostart VirtualMachine
  • 仮想マシン VirtualMachine を再起動する
    $ virsh reboot VirtualMachine
  • 仮想マシン VirtualMachine をシャットダウンする
    $ virsh shutdown VirtualMachine
  • 仮想マシン VirtualMachine を一時停止する
    $ virsh suspend VirtualMachine
  • 仮想マシン VirtualMachine の電源を切断する
    $ virsh destory VirtualMachine
  • 仮想マシン VirtualMachine に接続する際に使用する VNC のディスプレイ番号を調べる
    $ virsh vncdisplay VirtualMachine
  • CD-ROM の入れ替え
    $ virsh attach-disk VirtualMachine filename.iso hdc --driver file --type cdrom --mode readonly
参考