本章では、 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"
......
EndSectionopenSUSE 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 ツール」 をお読みください) をお使いください。ここにはディスクイメージを修正するための様々なツールが用意されています。