KVM パッケージインストール

  • CentOS 7
    # yum groupinstall "Virtualization Host" "Virtualization Client"
  • CentOS 6
    # yum groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools"
  • Windows Virtio Drivers
    # wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo
    # yum install virtio-win
    # cp /usr/share/virtio-win/virtio-win.iso .
  • ISOイメージのコピーではなくシンボリックリンクだと「Permission denied」になる?
  • Windows Server 2012 R2 のインストーラはサブディレクトリの探索はしてくれないので各々のドライバが配置してあるサブディレクトリまで指定する必要がある。

NIC のブリッジ設定

  • 物理マシン-仮想マシン間の接続を「NAT接続」にすると、物理マシンのネットワークから仮想マシンのサービスにアクセスすることができないため、物理マシン-仮想マシン間の接続には「ブリッジ接続」を使う。

CentOS 7

  • NIC デバイス確認。
    物理 NIC デバイス名は環境によって変わる。
    # nmcli dev
    DEVICE      TYPE      STATE      CONNECTION
    virbr0      bridge    connected  virbr0
    enp1s0      ethernet  connected  enp1s0
    lo          loopback  unmanaged  --
    virbr0-nic  tun       unmanaged  --
  • 自動的に追加される virbr0 は初期状態だと NAT モードなので、削除してブリッジモードの仮想デバイスを追加。
    # nmcli dev delete virbr0
    # nmcli con delete virbr0
    # nmcli con add type bridge ifname br0
    # nmcli con modify bridge-br0 bridge.stp no
    # nmcli con modify bridge-br0 ipv4.method manual ipv4.address "192.168.1.2/24" ipv4.gateway "192.168.1.1" ipv4.dns 8.8.8.8 ipv4.dns-search example.com
  • 物理 NIC デバイスを bridge デバイスに追加。
    # nmcli con add type bridge-slave ifname enp1s0 master br0
    # nmcli con del enp1s0; reboot
  • 再起動後の状態確認。

    # nmcli dev
    DEVICE      TYPE      STATE      CONNECTION
    br0         bridge    connected  bridge-br0
    virbr0      bridge    connected  virbr0
    enp1s0      ethernet  connected  bridge-slave-enp1s0
    vnet0       tun       connected  vnet0
    lo          loopback  unmanaged  --
    virbr0-nic  tun       unmanaged  --
    
    # nmcli dev show br0
    GENERAL.DEVICE:                         br0
    GENERAL.TYPE:                           bridge
    GENERAL.HWADDR:                         XX:XX:XX:XX:XX:XX (実 NIC の MAC と同じ)
    GENERAL.MTU:                            1500
    GENERAL.STATE:                          100 (connected)
    GENERAL.CONNECTION:                     bridge-br0
    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
    IP4.ADDRESS[1]:                         192.168.1.2/24
    IP4.GATEWAY:                            192.168.1.1
    IP4.ROUTE[1]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 425
    IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 425
    IP4.DNS[1]:                             8.8.8.8
    IP6.ADDRESS[1]:                         XXXX::XXXX:XXXX:XXXX:XXXX/64
    IP6.GATEWAY:                            --
    IP6.ROUTE[1]:                           dst = ff00::/8, nh = ::, mt = 256, table=255
    IP6.ROUTE[2]:                           dst = fe80::/64, nh = ::, mt = 256
    IP6.ROUTE[3]:                           dst = fe80::/64, nh = ::, mt = 425
    
    # nmcli dev show virbr0
    GENERAL.DEVICE:                         virbr0
    GENERAL.TYPE:                           bridge
    GENERAL.HWADDR:                         YY:YY:YY:YY:YY:YY
    GENERAL.MTU:                            1500
    GENERAL.STATE:                          100 (connected)
    GENERAL.CONNECTION:                     virbr0
    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
    IP4.ADDRESS[1]:                         192.168.122.1/24
    IP4.GATEWAY:                            --
    IP4.ROUTE[1]:                           dst = 192.168.122.0/24, nh = 0.0.0.0, mt = 0
    IP6.GATEWAY:                            --
    
    # nmcli dev show enp1s0
    GENERAL.DEVICE:                         enp1s0
    GENERAL.TYPE:                           ethernet
    GENERAL.HWADDR:                         XX:XX:XX:XX:XX:XX (br0 の MAC と同じ)
    GENERAL.MTU:                            1500
    GENERAL.STATE:                          100 (connected)
    GENERAL.CONNECTION:                     bridge-slave-enp1s0
    GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
    WIRED-PROPERTIES.CARRIER:               on
    IP4.GATEWAY:                            --
    IP6.GATEWAY:                            --
    IP6.ROUTE[1]:                           dst = ff00::/8, nh = ::, mt = 256, table=255
    
    # nmcli con
    NAME                 UUID                                  TYPE      DEVICE
    bridge-br0           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  bridge    br0
    bridge-slave-enp1s0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp1s0
    virbr0               XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  bridge    virbr0
    vnet0                XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  tun       vnet0
  • TipsAndTricks/BridgeAndNmcli - CentOS Wiki

  • CentOS7.2でブリッジインタフェースを作る - hosiiのメモ帳

CentOS 6

  • /etc/sysconfig/network-scripts/ifcfg-eth0
    # Physical NIC 0
    DEVICE=eth0
    ONBOOT=yes
    HWADDR=xx:xx:xx:xx:xx:xx
    BOOTPROTO=none
    BRIDGE=br0
    NM_CONTROLLED=no
  • /etc/sysconfig/network-scripts/ifcfg-br0
    # Virtual Bridge 0
    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.0.10		# 物理マシンのIPアドレス
    PREFIX=24
    GATEWAY=192.168.0.1		# 物理マシン/仮想マシン共通のゲートウェイ
    DNS1=192.168.0.1
    DOMAIN=TakeAsh.net
    NM_CONTROLLED=no

仮想環境用ネットワーク設定

  • 設定ファイル
    /usr/share/libvirt/networks/default.xml
  • libvirt: Network XML format
  • ネットワーク一覧表示
    # virsh net-list --all
  • 設定内容表示
    # virsh net-dumpxml default
  • 自動起動を無効化
    # virsh net-autostart default --disable
  • 自動起動を有効化
    # virsh net-autostart default
  • 手動起動
    # virsh net-start default

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

  • root 権限が必要。
  • Gnome: アプリケーション - システムツール - 仮想マシンマネージャー
  • bash: virt-manager

インストールメディアおよび仮想マシンイメージファイルの場所

  • /var/lib/libvirt/images/
  • シンボリックリンクで別の場所に変更する場合、該当ディレクトリだけでなく上位のディレクトリも qemu ユーザでアクセスできないとエラーとなる。

    # chown root. /mnt/ExtDisk/
    # chown root. /mnt/ExtDisk/VirtImages/
    # chmod 755 /mnt/ExtDisk/
    # chmod 755 /mnt/ExtDisk/VirtImages/
    # mv /var/lib/libvirt/images/ /var/lib/libvirt/_images
    # ln -s /mnt/ExtDisk/VirtImages/ /var/lib/libvirt/images
  • symlink - Virt-install can't find image behind symbolic link - Stack Overflow

仮想マシン定義ファイルの場所

  • /etc/libvirt/qemu/

新規仮想マシン作成

詳細設定

  • ステップ5/5の「インストール前に設定をカスタマイズする」チェックボックスにチェックを入れておくと、下記項目の設定ができる。
  • 各項目毎に「適用」ボタンを押さないと、次の項目に変えた時にデフォルトに戻ってしまう。

CPU

  • クライアント版(非サーバ版) Windows では CPU を2ソケットまでしか認識しないため、2コア以上を割り当てるにはトポロジーの手動設定が必要。 > 例) 2 CPU 各 3 Core 設定 | CPU | 現在の割り当て | 6 | | --- | --- | --- | | トポロジー | ソケット数 | 2 | | | コア数 | 3 | | | スレッド数 | 1 | <
  • 「Configuration」は、「Copy host CPU configuration」ボタンをクリックすることで物理マシンの CPU 構成をコピーできる。

仮想 NIC のモデル

モデル名 スピード
e1000 10/100/1000 Mbps
rtl8139 10/100 Mbps
  • デフォルトは「rtl8139」になっている。

ディスプレイVNC

  • 種類: Spice
    • VNC だとサウンドが再生されない。

仮想マシンの操作(コマンドライン)

仮想マシンの一覧表示

# virsh list --all

仮想マシンを起動

# virsh start <仮想マシン名>

仮想マシンをシャットダウン

# virsh shutdown <仮想マシン名>

仮想マシンのディスクイメージファイルを変更

  • 対象の仮想マシンはシャットダウンしていること。
  • edit で、 を <新イメージファイル名> に修正, 保存する。
  • edit の操作は vi 。
    # virsh list --all
    # mv <元イメージファイル名> <新イメージファイル名>
    # virsh edit <仮想マシン名>

仮想マシンの定義ファイルの表示

# virsh dumpxml <仮想マシン名>

仮想マシンの削除

  • 仮想マシン定義ファイルは削除されるが、ディスクイメージファイルは削除されない。
    # virsh undefine <仮想マシン名>

仮想マシンの自動起動

  • ホスト起動時に自動起動させる
    # virsh autostart <仮想マシン名>
  • 自動起動設定確認
    # ls /etc/libvirt/qemu/autostart/
  • 自動起動の解除
    # virsh autostart --disable <仮想マシン名>

サウンド出力

  • Audio output
  • /etc/libvirt/qemu.conf
    vnc_allow_host_audio = 1
  • ディスプレイ表示に VNC ではなく Spice を使う。

エラー対応

virt-who を起動しようとして失敗する

  • 起動時に毎回エラーメッセージが表示される。
    Démarrage de virt-who : Traceback (most recent call last):
    File "/usr/share/virt-who/virt-who.py", line 33, in <module>
    from subscriptionmanager import SubscriptionManager, SubscriptionManagerError
    File "/usr/share/virt-who/subscriptionmanager.py", line 24, in <module>
    import rhsm.connection as rhsm_connection
    ImportError: No module named rhsm.connection
    [FAILED]
  • 原因: パッケージのミスで本来不要な virt-who がインストールされてしまう。
  • 対処: virt-who のアンインストール。
    yum erase virt-who
  • 0006342: service virt-who won't start without python-rhsm - CentOS Bug Tracker

リンク