第8章 仮想マシンの設定

目次

8.1. シームレスなカーソル移動とカーソル移動の同期
8.2. Virtual Machine Manager を利用した CD/DVD-ROM デバイスの追加
8.3. Virtual Machine Manager を利用したフロッピィデバイスの追加
8.4. Virtual Machine Manager を利用したフロッピィディスクまたは CD/DVD-ROM メディアの取り出しと交換
8.5. Virtual Machine Manager を利用した PCI デバイスの追加
8.6. virsh を利用した PCI デバイスの追加
8.7. 時計の設定

概要

Virtual Machine Manager の 詳細 ビューでは、 VM ゲスト のすべての設定項目と ハードウエアの設定について、より詳しい情報が提供されています。このビューを 利用することでゲストの設定を変更することができるほか、仮想ハードウエアを 追加したり変更したりすることもできます。このビューにアクセスするには、 Virtual Machine Manager でゲストのコンソールを開いてメニューから ビュー+詳細 を選択するか、もしくはツールバー内の 青い情報アイコンを押します。

図8.1 VM ゲスト の 詳細 ビュー

VM ゲスト の 詳細 ビュー

8.1. シームレスなカーソル移動とカーソル移動の同期

マウスで VM ゲスト のコンソールを押すと、カーソルはコンソールウインドウ内に キャプチャされ (閉じこめられ)、明示的に解放 (Alt+Ctrl を押すと解放することができます) されるまで外側に移動できなくなります。キー入力とマウスの移動をキャプチャ されないようにし、ホストとゲストの間を自由に移動できるようにするには、 VM ゲスト にタブレットを追加してください。

タブレットを追加すると、ゲスト側でグラフィカル環境を使用している場合、 VM ホストサーバ と VM ゲスト の間でカーソルを同期することもできます。ゲスト側で タブレットを設定しない場合、ホストとゲストのカーソルが常に 1 つずつ 表示されます。

  1. Virtual Machine Manager 内で VM ゲスト の項目をダブルクリックしてコンソールを開き、 View+DetailsDetails ビューに切り替えます。

  2. ハードウエアの追加 を押してから 入力 を選択し、表示されたポップアップウインドウ から EvTouch USB Graphics Tablet を選択 します。選択したあとは Finish で続行します。

  3. タブレットの追加時にゲストが動作中であった場合は、次回の再起動で タブレットを有効化するかどうかの確認が表示されます。この場合は Yes で続行してください。

  4. VM ゲスト が動作中であった場合は再起動を行なうことで、動作中で なかった場合はそのまま起動することで、タブレットが利用できるように なります。

8.2. Virtual Machine Manager を利用した CD/DVD-ROM デバイスの追加

KVM では、 VM ゲスト 内から CD または DVD-ROM を利用することができます。 VM ゲスト から VM ホストサーバ 上にあるデバイスそのものに直接アクセスさせることが できるほか、 ISO イメージにアクセスさせることもできます。既存の CD や DVD から ISO イメージを作成したい場合は、 dd コマンドを利用して 下記のように実行します:

dd if=/dev/CD_または_DVD_デバイス of=my_distro.iso bs=2048

VM ゲスト に CD/DVD-ROM デバイスを追加するには、下記の手順で行ないます:

  1. Virtual Machine Manager 内から設定したい VM ゲスト を選択してダブルクリックし、 コンソールを開いてから View+Details を選択し、 Details 画面に移動します。

  2. Add Hardware を押し、表示されたポップアップ ウインドウから Storage を選択します。 表示された画面は Forward で先に進めます。

  3. Device Type では IDE CDROM を選択します。

  4. Select Managed or Other Existing Storage を選択します。

    1. VM ホストサーバ 上の実際のデバイスを割り当てる場合は、 Browse ボタンの隣にある項目に、 VM ホストサーバ の CD/DVD-ROM デバイスパス (たとえば /dev/cdrom) を入力します。この項目では Browse ボタンを利用することでファイルブラウザを開き、 Browse Local からデバイスを選択することもできます。 なお、 Virtual Machine Manager を VM ホストサーバ 上で起動した場合にのみ実際のデバイスを 割り当てることができます。

    2. 既存のイメージファイルをデバイスに割り当てる場合は、 Browse を押して表示される画面で、ストレージプールからイメージを選択します。 Virtual Machine Manager を VM ホストサーバ 上で起動している場合は、 Browse Local を押すことで、ファイルシステム内からイメージの場所を選択することも できます。イメージを選択してファイルブラウザを閉じるには、 Choose Volume を押します。

  5. Forward を押して先に進み、設定内容を確認します。 あとは Finish, Yes, Apply と押していくと、設定を適用することができます。

  6. 新しく作成したデバイスを利用できるようにするには、 VM ゲスト を再起動する 必要があります。さらに詳しい情報は、 8.4項 「Virtual Machine Manager を利用したフロッピィディスクまたは CD/DVD-ROM メディアの取り出しと交換」 をお読みください。

8.3. Virtual Machine Manager を利用したフロッピィデバイスの追加

現時点では KVM ではフロッピィディスクイメージのみをサポートし、実際の フロッピィディスクドライブを利用する機能には対応していません。既存の フロッピィディスクからディスクイメージを作成するには、 dd を使用して行ないます:

dd if=/dev/fd0 of=/var/lib/libvirt/images/floppy.img

中に何も入っていない空のフロッピィディスクイメージを作成するには、 以下を実行します:

# RAW イメージの作成
dd if=/dev/zero of=/var/lib/libvirt/images/floppy.img bs=512 count=2880

# FAT でフォーマットする
mkfs.msdos -C /var/lib/libvirt/images/floppy.img 1440

お使いの VM ゲスト にフロッピィデバイスを追加するには、 下記の手順で行ないます:

  1. Virtual Machine Manager 内から設定したい VM ゲスト を選択してダブルクリックし、 コンソールを開いてから View+Details を選択し、 Details 画面に移動します。

  2. Add Hardware を押し、表示されたポップアップ ウインドウから Storage を選択します。 表示された画面は Forward で先に進めます。

  3. Device Type では Floppy Disk を選択します。

  4. Select Managed or Other Existing Storage を選択して から Browse ボタンを押し、ストレージプールから既存の イメージを選択します。 Virtual Machine Manager を VM ホストサーバ 上で起動している場合は、 Browse Local を押すことで、ファイルシステム内から イメージの場所を選択することもできます。イメージを選択してファイル ブラウザを閉じるには、 Choose Volume を押します。

  5. Forward を押して先に進み、設定内容を確認します。 あとは Finish, Yes, Apply と押していくと、設定を適用することができます。

  6. 新しく作成したデバイスを利用できるようにするには、 VM ゲスト を再起動する 必要があります。さらに詳しい情報は、 8.4項 「Virtual Machine Manager を利用したフロッピィディスクまたは CD/DVD-ROM メディアの取り出しと交換」 をお読みください。

8.4. Virtual Machine Manager を利用したフロッピィディスクまたは CD/DVD-ROM メディアの取り出しと交換

VM ホストサーバ 側の実在する CD/DVD-ROM デバイスを利用するか、もしくは ISO イメージやフロッピィイメージを利用するかどうかに関わらず、 VM ゲスト 側では メディアやイメージの交換を行なうことができます。交換を行なう場合には、 ゲスト側であらかじめ disconnect (切断) をする必要があります。

  1. Virtual Machine Manager 内から設定したい VM ゲスト を選択してダブルクリックし、 コンソールを開いてから View+Details を選択し、 Details 画面に移動します。

  2. フロッピィまたは CD/DVD-ROM デバイスを選択し、 Disconnect を押してメディアの 取り出し を行ないます。

  3. 新しいメディアを 挿入 するには、 Connect を押します。

    1. VM ホストサーバ 側の実在する CD/DVD-ROM デバイスを利用している場合は、まず デバイス内のメディアを交換します (この場合、メディアを取り出す前に VM ホストサーバ 側でマウント解除が必要になります) 。その後 CD-ROM or DVD を選択して、表示されたドロップダウン リストからデバイスを選択します。

    2. ISO イメージを利用している場合は、 ISO image Location を押してから Browse を押し、イメージを選択します。 リモートから接続している場合は、既存のストレージプールからのみ選択する ことができます。

  4. 最後に OK を押して完了します。これで VM ゲスト から 新しいメディアにアクセスできるようになります。

8.5. Virtual Machine Manager を利用した PCI デバイスの追加

グラフィカルなツールである virt-manager を利用することで、 ゲストに PCI デバイスを追加することができます。 PCI デバイスを特定の VM ゲスト に割り当てると、再割り当てを行なわない限り、他の VM ゲスト では利用できなく なります。下記の手順では、 USB コントローラを仮想化ゲストに割り当てるための 手順を説明しています。

  1. Virtual Machine Manager で対象の VM ゲスト をダブルクリックしてコンソールを開き、 View+Details を選択して Details ビューを表示させます。

  2. Add Hardware を選択して、左側のペインで PCI Host Device の分類を選択します。すると、ウインドウの 右側に、ホスト側の PCI デバイスの一覧が表示されます。

  3. 利用可能な PCI デバイスの一覧から、 VM ゲスト に割り当てる USB コントローラ を選択します。たとえば USB2 Enhanced Host Controller のような名前で掲載されているはずです。選択を行なったら Finish を押します。

    [Tip]

    VM ゲスト が動作中の場合は、 PCI デバイスを割り当てることはできません。 動作中のマシンに対して PCI デバイスを割り当てようとすると、 Virtual Machine Manager は 次回の VM ゲスト のシャットダウン時に、対象のデバイスを追加するかどうかを 尋ねます。ここで Yes (はい) を選択すると、次回の VM ゲスト の再起動時にデバイスが割り当てられるようになります。

8.6. virsh を利用した PCI デバイスの追加

virsh を利用して VM ゲスト に対し、 PCI デバイスを 占有させて割り当てるには、下記の手順を実施します:

  1. まずは PCI デバイスを識別します。

    VM ゲスト に提供する PCI デバイスを、 virsh nodedev-list コマンドまたは lspci -n コマンドで識別します。

    下記のコマンドを実行すると、利用可能な PCI デバイスのみを表示します:

    virsh nodedev-list | grep pci

    なお、 PCI デバイスは下記のような文字列形式で区別されます (下記の例で、 8086 は Intel アーキテクチャであることを 示す値で、 **** は各デバイスに割り当てられる 4 桁の 16 進数値です):

    pci_8086_****

    表示された PCI のデバイス番号を覚えておきます。この番号は、下記の手順で 必要となります。

  2. ドメイン、バス、機能に対する情報収集を行ないます:

    # virsh nodedev-dumpxml pci_8086_1d26
    <device>
      <name>pci_8086_1d26</name>
      <parent>computer</parent>
      <driver>
        <name>ehci_hcd</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>0</bus>
        <slot>29</slot>
        <function>0</function>
        <product id='0x1d26'>Patsburg USB2 Enhanced Host Controller #1</product>
        <vendor id='0x8086'>Intel Corporation</vendor>
        <capability type='virt_functions'>
        </capability>
      </capability>
    </device>
  3. VM ゲスト に割り当てる前に、ホストシステム側でデバイスの切り離しを 行ないます:

    # virsh nodedev-detach pci_8086_1d26 
      Device pci_8086_1d26 detached
  4. domain, bus, slot, function の値をそれぞれ 10 進数から 16 進数に変換します。 このとき、 '0x' という文字列を頭に付けて、 16 進数である旨を表します。 下記は bus = 0, slot = 29, function = 0 の場合での例です。それぞれの 16 進数値は、下記のようになります:

    # printf %x 0
    0
    # printf %x 29
    1d

    上記の手順で判明した通り、 bus と function の値は '0x00', slot の値は '0x1d' になります。

  5. 対象の VM ゲスト に対して virsh edit を実行し、 下記のデバイス項目を <devices> セクション内に 追記します:

    <hostdev mode='subsystem' type='pci' managed='no'>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x1d' function='0x00'/>
      </source>
    </hostdev>
    [Tip]'managed' と 'unmanaged' の違いについて

    libvirt は PCI デバイスを扱うにあたって、 2 つの モード (それぞれ 'managed' or 'unmanaged' と呼ばれます) が用意されています。 'managed' では、必要に応じて libvirt 側で、 ドメインの起動時などに既存のドライバからの切り離しとデバイスのリセット、 そして pci-stub への割り当てを行ないます。 ドメインが停止した場合やドメインからデバイスが切り離された際、 libvirtpci-stub からの切り離しと元のドライバへの再割り当てを行ないます。それに対して 'unmanaged' では、ドメインへの割り当て前に実施すべきすべての作業から、 割り当て完了後の作業までを、ユーザ側で実施しなければなりません。

    今回の例では managed='no' オプションが設定されて いますが、これは 'unmanaged' と同じ意味になります。つまり、自分自身で virsh nodedev-detachvirsh nodedev-attach コマンドを実行して、関連する ドライバの状態を制御する必要があります。デバイスを 'managed' に切り替える には、上記の例を managed='yes' にして、残りの手順 (VM ゲスト の起動以外のすべて) を実施しないようにしてください。

  6. VM ゲスト システム側で PCI デバイスを利用できるようになったら、ホストに 対して利用を停止させます。まずはホスト側のシステムで、どのドライバが PCI デバイスを利用しているのかを調べます。

    # readlink /sys/bus/pci/devices/0000\:00\:1d.0/driver
    ../../../bus/pci/drivers/pci-stub
  7. 上記の例では、 pci-stub ドライバが読み込まれています。 このように表示されていれば、 VM ゲスト を起動できることになります。 これで PCI デバイスが VM ゲスト に割り当てられます。

    # virsh start sles11
    [Tip]

    FLR (function level reset; 機能レベルリセット) や PM (power management; 電源管理) リセットに対応していない多機能型の PCI デバイスを利用している 場合は、 VM ホストサーバ 側ですべての機能を切り離す必要があります。また、 FLR や PM リセットに対応していない場合、セキュリティ上の理由でデバイス 全体をリセットしなければなりません。 libvirt では、 VM ホストサーバ やその他の VM ゲスト でデバイスの機能が利用されている 場合、処理を拒否するようになっています。

    VM ゲスト からデバイスの機能を安全に切り離すには、 virsh nodedev-detach コマンドを利用します。

    [Tip]

    お使いの PCI デバイスが 'managed' ではなく、 PCI デバイスを制御している ドライバが pci-stub ではない場合、まずはデバイスから 切り離さなければなりません:

    virsh nodedev-detach pci_8086_1d26
    [Tip]

    また、お使いのホストで SELinux を動作させている場合、下記のように実行して 無効化する必要があります:

    # setsebool -P virt_use_sysfs 1

    処理が完了したら、仮想マシンを起動してください。

8.7. 時計の設定

VM ゲスト で正しい時刻を設定することは、仮想化を利用する際の難題の 1 つ です。正しい時刻の設定は、ネットワークアプリケーションを利用する際、 特に要求されるもので、 VM ゲスト に対してライブマイグレーションを行なう 際にも、事前に行なっておかなければならない項目です。

[Tip]VM ホストサーバ における時刻同期

VM ホストサーバ 側でも、たとえば NTP などを使用 (詳しくは 第17章 NTP を利用した時刻同期 (↑リファレンス)) をお読みください) して、正しい時刻への同期を強くお勧めします。

8.7.1. kvm_clock の使用

KVM では擬似仮想化クロックが提供されています。これは kvm_clock と呼ばれるドライバで、 openSUSE のほか、 SUSE Linux Enterprise Server 10 SP3 またはそれ以降のバージョン、もしくは RedHat Enterprise Linux 5.4 またはそれ以降の バージョンでサポートされています。可能であれば kvm_clock を使っておくことを強くお勧めします。

実行中の VM ゲスト で kvm_clock ドライバが 読み込まれているかどうか、VM ゲスト 内から確認を行なうには下記の コマンドを実行します:

~ # dmesg | grep kvm-clock
[    0.000000] kvm-clock: cpu 0, msr 0:7d3a81, boot clock
[    0.000000] kvm-clock: cpu 0, msr 0:1206a81, primary cpu clock
[    0.012000] kvm-clock: cpu 1, msr 0:1306a81, secondary cpu clock
[    0.160082] Switching to clocksource kvm-clock

現在使用されている時刻源を確認するには、 VM ゲスト 内で下記のコマンドを 実行します。 kvm-clock と入力されるべき項目です:

echo /sys/devices/system/clocksource/clocksource0/current_clocksource
[Important]kvm-clock と NTP について

VM ゲスト 内で kvm-clock を使用している場合は、 NTP による時刻同期を併用することはお勧めできません。 VM ホストサーバ 側での NTP は、 VM ゲスト 内での kvm-clock の使用に 関わらず、使用をお勧めします。

8.7.2. その他の時刻維持方法

擬似仮想化 kvm-clock ドライバは、 SUSE Linux Enterprise Server 9 や Windows オペレーティングシステムに対しては提供されていません。 Windows の場合は Windows 時刻サービスツール を利用して同期を行なって ください (詳しくは http://technet.microsoft.com/ja-jp/library/cc773263%28WS.10%29.aspx をお読みください) 。

SUSE Linux Enterprise Server 9 SP4 で時刻維持を行ないたい場合は、システムの起動時に特殊な 起動パラメータを設定することで実現できます:

32 ビットカーネルの場合:clock=pmtmr
64 ビットカーネルの場合:ignore_lost_ticks

openSUSE KVM を利用した仮想化 13.1