本章では、 Xen の準仮想化ゲスト (仮想マシン) を Xen の完全仮想化マシンに変換する方法について説明しています。
ゲストを FV モードで起動できるようにするには、ゲスト内で下記の手順を実施する必要があります。
まずはゲストを変換する前に、全ての修正を適用してゲストを再起動してください。
FV の仮想マシンでは -default
カーネルを使用します。このカーネルをインストールしていない場合は、 PV モードで動作させている間に kernel-default
パッケージをインストールします。
PV の仮想マシンでは vda*
のようなデバイス名でディスクにアクセスしていますが、これらの名前を hd*
のような名前に変換する必要があります。この変更は、それぞれ下記に示すファイルに対して行います:
/etc/fstab
/boot/grub/menu.lst
(SLES 11 のみ)
/boot/grub*/device.map
/etc/sysconfig/bootloader
/etc/default/grub
(SLES 12, 15 および openSUSE)
/etc/fstab
ファイル内では、 UUID や論理ボリューム名での指定の使用をお勧めします。 UUID を指定することにより、ネットワークストレージやマルチパスデバイス、仮想化などの様々なメリットを享受することができます。ディスクの UUID を表示させたい場合は、 blkid
コマンドをお使いください。
また、必要なモジュールを含む initrd
の再生成にあたって発生するエラーを回避するため、 /dev/hda2
から /dev/xvda2
へのシンボリックリンクを作成することもできます。シンボリックリンクの作成は、 ln
コマンドで行います:
ln -sf /dev/xvda2 /dev/hda2 ln -sf /dev/xvda1 /dev/hda1 .....
PV のマシンと FV のマシンではそれぞれ異なるディスクドライバモジュールやネットワークドライバモジュールを使用します。これらの FV モジュールは initrd 内に手作業で追加する必要があります。必要なモジュールはそれぞれ xen-vbd
(ディスクデバイス用) および xen-vnif
(ネットワークデバイス用) です。これらは完全仮想化 (FV) モードの VM ゲスト 向けの PV ドライバであり、それ以外の ata_piix
, ata_generic
, libata
等のモジュールは自動的に追加されます。
SLES 11 では、 /etc/sysconfig/kernel
ファイル内の INITRD_MODULES
内に必要なモジュールを指定します。たとえば下記のようになります:
INITRD_MODULES="xen-vbd xen-vnif"
あとは dracut
を実行することで、必要なモジュールを含む新しい initrd を生成することができます。
SLES 12, 15 および openSUSE の場合は、 /etc/dracut.conf.d/10-virt.conf
という名前のファイルを開くか新規に作成して、下記のような行を記述して force_drivers
以下にドライバを追加していきます (なお、二重引用符の後ろにスペースがあることに注意してください):
force_drivers+=" xen-vbd xen-vnif"
あとは dracut -f --kver カーネルバージョン-default
のように入力して実行することで、必要なモジュールを含む新しい initrd を生成することができます。
カーネルバージョンの検出方法について: uname -r
コマンドを実行することで、お使いのシステムで現在動作中のカーネルのバージョンを調べることができます。
また、ゲストをシャットダウンする前に、 yast bootloader
を利用して -default
カーネルに対する既定の起動パラメータを設定してください。
openSUSE Leap 11 の環境で、ゲスト側で X サーバを動作させている場合、 X ドライバを変更する目的で /etc/X11/xorg.conf
ファイルを変更する必要があります。 fbdev
という行を検索して、値を cirrus
に変更してください。
Section "Device" Driver "cirrus" ...... EndSection
openSUSE Leap 12/15 では、 Xorg は必要なドライバを自動検出します。
ゲストをシャットダウンします。
下記では、ホスト側で実施すべき手順を説明しています。
ゲストを FV モードで起動できるようにするため、 VM の設定を FV 用に調整する必要があります。 VM の設定編集は virsh edit [ドメイン]
で行うのが簡単です。それぞれ下記の内容を編集してください:
OS セクション内のマシンの種類と loader
の項目をそれぞれ編集し、 xenpv
を xenfv
に変更します。変更後の OS セクションは下記のようになるはずです:
<os> <type arch='x86_64' machine='xenfv'>hvm</type> <loader>/usr/lib/xen/boot/hvmloader</loader> <boot dev='hd'/> </os>
OS セクション内にある PV ゲスト固有の設定を削除します:
<bootloader>pygrub</bootloader>
<kernel>/usr/lib/grub2/x86_64-xen/grub.xen</kernel>
<cmdline>xen-fbfront.video=4,1024,768</cmdline>
デバイスセクション内に qemu エミュレータを追加します:
<emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
ディスクの設定を FV 書式になるよう、ターゲットデバイスとバスをそれぞれ変更します。具体的には xen
ディスクバスを ide
に、 vda
ターゲットデバイスを hda
にそれぞれ変換します。変更後は下記のようになるはずです:
<target dev='hda' bus='ide'/>
キーボードやマウスの接続に使用するバスを、 xen
から ps2
に変更します。これに加えて、新しい USB タブレットデバイスを追加しておきます:
<input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <input type='tablet' bus='usb'/>
コンソールターゲットの種類を xen
から serial
に変更します:
<console type='pty'> <target type='serial' port='0'/> </console>
ビデオの設定を xen
から cirrus
に変更し、 VRAM に 8 MB 程度を割り当てます:
<video> <model type='cirrus' vram='8192' heads='1' primary='yes'/> </video>
また、必要であれば VM の機能に acpi
と apic
を追加します:
<features> <acpi/> <apic/> </features>
あとはゲストを起動する (virsh
もしくは virt-manager
を使用します) だけです。ゲストが kernel-default を利用して起動するようになったら (uname -a
で確認できます) 、完全仮想化モードへの変換は完了となります。
この処理を自動化したい場合やディスクイメージを直接編集したい場合は、 guestfs-tools スイート (詳しくは 20.3項 「guestfs ツール」 をお読みください) をお使いください。ここにはディスクイメージを修正するための様々なツールが用意されています。