「Xen」の版間の差分
(→ブートローダーの修正: 情報を更新) |
(他言語へのリンクを修正) |
||
3行目: | 3行目: | ||
[[de:Xen]] |
[[de:Xen]] |
||
[[en:Xen]] |
[[en:Xen]] |
||
− | [[es:Xen]] |
||
− | [[ru:Xen]] |
||
[[zh-hans:Xen]] |
[[zh-hans:Xen]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related| |
+ | {{Related|ハイパーバイザ}} |
− | {{Related|QEMU}} |
||
− | {{Related|VirtualBox}} |
||
− | {{Related|VMware}} |
||
{{Related|既存環境を仮想マシンに (から) 移動}} |
{{Related|既存環境を仮想マシンに (から) 移動}} |
||
{{Related articles end}} |
{{Related articles end}} |
2024年1月11日 (木) 01:36時点における最新版
Xen Overview より:
- Xen は、オープンソースの type-1 またはベアメタルハイパーバイザーであり、オペレーティングシステムの多数のインスタンス、または実際には異なるオペレーティングシステムを単一のマシン (またはホスト) 上で並行して実行できるようにします。 Xen は、オープンソースとして利用できる唯一の type-1 ハイパーバイザーです。
Xen ハイパーバイザは同時に複数のオペレーティングシステムを動作できるようにコンピュータアーキテクチャをエミュレートする薄いソフトウェアレイヤーです。ハイパーバイザはインストールされているコンピュータのブートローダーによって起動します。ハイパーバイザがロードされると、dom0 ("domain 0" の略で、ホストまたは特権ドメインとも呼ばれます) が起動して Arch Linux が走ります。dom0 が起動したら、dom0 から一つまたは複数の domU (ユーザードメインの略で、VM またはゲストとも呼ばれます) を起動・制御することができます。Xen は準仮想化 (PV) とハードウェア仮想化 (HVM) 両方の domU をサポートしています。詳しくは Xen.org を見て下さい。
Xen ハイパーバイザーは、基本オペレーティングシステムのフルインストールに依存しています。Xen ハイパーバイザーをインストールする前に、ホストマシンに完全に動作する最新の Arch Linux がインストールされている必要があります。このインストールは、基本パッケージのみを使用した最小限のインストールであり、デスクトップ環境 や Xorg さえも必要としません。
新しいホストを最初から構築する場合は、Arch Linux のインストール手順について インストールガイド を参照してください。
目次
インストール
システム要件
Xen ハイパーバイザは最新の Linux カーネルに含まれている、カーネルレベルのサポートを必要としており、Arch のカーネルパッケージである linux と linux-lts にも組み込まれています。HVM の domU を動かすには、Intel VT-x または AMD-V (SVM) どちらかの仮想化サポートが搭載された物理ハードウェアが必要です。これを確認するために、Xen ハイパーバイザが動作していないときに次のコマンドを実行してください:
$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo
上のコマンドで何も出力がされない場合、ハードウェア仮想化のサポートが利用できません。あなたのハードウェアでは HVM domU を実行することは不可能です (または Xen ハイパーバイザが実行中です)。CPU がハードウェア仮想化の機能をサポートしているという自信がある場合はブートプロセスの間にホストシステムの BIOS 設定メニューにアクセスして、仮想化サポートに関連するオプションが無効になっていないか確認してください。そのようなオプションが存在していて無効になっていたときは、有効にして、システムを再起動してからもう一度上のコマンドを実行してください。Xen ハイパーバイザは PCI パススルーもサポートしており、デバイスが dom0 をサポートしていないときでも PCI デバイスを直接 domU に引き渡すことができます。PCI パススルーを使用するには、CPU が IOMMU/VT-d をサポートしていなければなりません。
Xen ハイパーバイザのインストール
Xen ハイパーバイザをインストールするには xenAUR パッケージをインストールしてください。どちらのパッケージにも Xen ハイパーバイザ、最新の xl インターフェイスと設定・サポートファイル、systemd サービスが含まれています。Xen をコンパイル・インストールするには multilib リポジトリを有効にして multilib-devel パッケージグループをインストールする必要があります。man ページやドキュメントが必要なときは xen-docsAUR パッケージをインストールしてください。
BIOS や UEFI を使って仮想マシンを起動するにはそれぞれ seabios または ovmf[リンク切れ: 置換パッケージ: edk2-ovmf] パッケージをインストールする必要があります。
Xen をビルド
xen とそのコンポーネントは、VM または chroot のクリーンな環境にビルドすることをお勧めします。Xen をビルドする場合、makepkg に渡すことができる環境変数があります。
- build_stubdom -- Xen スタブドムを実行するためのコンポーネントをビルドします。主に dom0 disaggregation 用です。 ビルドする stubdom 用のコンポーネントは xen-stubdom に分割されます。デフォルトは false です。
- boot_dir -- ブートディレクトリです。デフォルトは /boot です。
- efi_dir, efi_mountpoint -- EFI ディレクトリとマウントポイント。デフォルトは /boot です。
これらの引数を変数として makepkg に渡します:
$ build_stubdom=true efi_dir="/boot/EFI" makepkg
xen-docsAUR もマニュアルページとドキュメント用にビルドされます。スタブダムサポートをビルドすることを選択した場合、xen-stubdom パッケージがビルドされます。
ブートローダーの修正
通常のカーネルを起動するのに使われているブートローダーを、特殊な Xen カーネル (xen.gz
または UEFI の場合 xen.efi
) をロードするように修正しなくてはなりません。このために新しいブートローダーエントリが必要になります。
UEFI
Xen は、Xen EFI システム で指定されている UEFI からのブートをサポートしています。efibootmgr を使用してブート順序やその他のパラメーターを設定する必要がある場合もあります。
まず、xen.efi
ファイルがカーネルファイルおよび RAM ディスク ファイルとともに EFI システムパーティション に存在することを確認します。
次に、Xen には、どのカーネルを dom0 として起動するかを指定する ASCII (UTF-8、UTC-16 などは不可) 設定ファイルが必要です。このファイルは、バイナリと同じ EFI システムパーティション に配置する必要があります。Xen はいくつかの設定ファイルを検索し、最初に見つかった設定ファイルを使用します。検索順序は、バイナリ名の拡張子 .efi
が .cfg
に置き換えられることから始まり、一致するものが見つかるまで、末尾の名前コンポーネント .
、-
および _
が削除されます。通常、xen.cfg
という名前の単一ファイルが、次のようなシステム要件とともに使用されます。
xen.cfg
[global] default=xen [xen] options=console=vga iommu=force:true,qinval:true,debug:true loglvl=all noreboot=true reboot=no vga=ask ucode=scan kernel=vmlinuz-linux root=/dev/sdaX rw add_efi_memmap #earlyprintk=xen ramdisk=initramfs-linux.img
systemd-boot
新しい EFI タイプのローダーエントリを追加します。詳細については、systemd-boot#EFI シェルや他の EFI アプリ を参照してください。例えば:
/boot/loader/entries/10-xen.conf
title Xen Hypervisor efi /xen.efi
EFISTUB
EFISTUB を使用して、UEFI から直接 EFI カーネルをブートすることができます。
ビルドインの UEFI シェル にドロップし、EFIファイルを直接呼び出します。例えば:
Shell> fs0: FS0:\> xen.efi
上で概説したように、EFI システムパーティション 内の xen.cfg
構成ファイルが依然として必要であることに注意してください。さらに、-cfg=file.cfg
パラメータを使用して別の構成ファイルを指定することもできます。例えば:
Shell> fs0: FS0:\> xen.efi -cfg=xen-rescue.cfg
これらの追加設定ファイルは、Xen EFI バイナリファイルおよび Linux スタブファイルと同じディレクトリに存在する必要があります。
BIOS
Xen は、BIOS として設定されたシステムファームウェアからの起動をサポートしています。
GRUB
GRUB ユーザーの場合は、dom0 の起動と PvGrub2 イメージのビルドのために grub-xen-gitAUR パッケージをインストールしますユーザードメインを起動するため。
ファイル /etc/default/grub
を編集して、Xen ブートコマンドをカスタマイズできます。たとえば、起動時に 512 MiB の RAM を dom0 に割り当てるには、次の行を置き換えて /etc/default/grub
を変更します:
#GRUB_CMDLINE_XEN_DEFAULT=""
それと
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M"
Xen の GRUB 設定キーの詳細については、GRUB ドキュメント を参照してください。
オプションをカスタマイズした後、次のコマンドを使用してブートローダー設定を更新します:
# grub-mkconfig -o /boot/grub/grub.cfg
GRUB ブートローダーの使用方法の詳細については、GRUB を参照してください。
ゲストを起動するための GRUB イメージの構築
通常のプラットフォームターゲットに加えて、grub-xen-gitAUR パッケージは、Xen ゲストの起動に使用できる 3 つの追加ターゲット用の GRUB をビルドします: i386-xen、i386-xen_pvh、および x86_64-xen これらのターゲットのいずれかからブートイメージを作成するには、まず GRUB 設定ファイルを作成します。好みに応じて、このファイルはゲスト内の GRUB 設定ファイルを見つけてロードすることも、dom0 からのブートプロセスの詳細を管理することもできます。必要なのはゲスト内の設定ファイルを見つけてロードすることだけであると仮定して、次のコードをファイルに追加します。
grub.cfg
search -s root -f /boot/grub/grub.cfg configfile /boot/grub/grub.cfg
次に、そのファイルを組み込む GRUB スタンドアロン イメージを作成します。
# grub-mkstandalone -O x86_64-xen -o /usr/lib/xen/boot/pv-grub2-x86_64-xen "/boot/grub/grub.cfg=./grub.cfg"
最後に、そのイメージを domU 設定ファイル内のカーネルの値として追加します (この例では 64 ビットゲストの場合):
kernel = "/usr/lib/xen/boot/pv-grub2-x86_64-xen"
GRUB ゲスト用に GRUB イメージを設定するその他の例は、Xen プロジェクトの PvGrub2 ドキュメント にあります。
Syslinux
Syslinux を使っている場合、以下のような記述を /boot/syslinux/syslinux.cfg
に追加してください:
LABEL xen MENU LABEL Xen KERNEL mboot.c32 APPEND ../xen-X.Y.Z.gz --- ../vmlinuz-linux console=tty0 root=/dev/sdaX ro --- ../initramfs-linux.img
X.Y.Z
は使用している xen のバージョンに、/dev/sdaX
は root パーティションに置き換えて下さい。
また、syslinux.cfg
と同じディレクトリに mboot.c32
(と libcom32.c32
) が必要です。/boot/syslinux
に mboot.c32
がない場合はコピーしてください:
# cp /usr/lib/syslinux/bios/mboot.c32 /boot/syslinux
ネットワークブリッジの作成
Xen では、domU と dom0 (およびそれ以降) の間のネットワーク通信を手動で設定する必要があります。DHCP と静的アドレス指定の両方を使用できますが、どちらを選択するかはネットワークトポロジによって決定されます。複雑なセットアップが可能です。詳細については Xen Wiki の Networking の記事を参照し、さまざまなネットワーク構成のスクリプトについては /etc/xen/scripts
を参照してください。すべての domU が接続されている dom0 に仮想スイッチが作成される基本的なブリッジネットワークは、xenbr0
という名前の ネットワークブリッジ を作成することで設定できます。
詳細については、ネットワークブリッジ#ブリッジの作成 を参照してください。
Systemd-networkd
詳細については、Systemd-networkd#ブリッジインターフェイス を参照してください。
Network Manager
Gnome の Network Manager は、面倒な場合があります。Wiki の ブリッジ セクションに概要が記載されているブリッジ作成セクションに従うことが不明瞭である場合、または機能しない場合は、次の手順で機能する可能性があります。
"ネットワーク設定" を開き、ブリッジで使用するインターフェイス (例: enp5s0) を無効にします。設定をオフに編集し、"自動的に接続する" のチェックを外します。
ネットワーク設定の左下にある「+」記号をクリックして、新しいブリッジ接続プロファイルを作成します。必要に応じて、以下を実行します。
# nm-connection-editor
すぐにウィンドウを表示します。ウィンドウが開いたら、ブリッジを選択します。
"ブリッジ接続" の横にある "追加" をクリックし、ブリッジで使用するインターフェイス (例: イーサネット) を選択します。使用するインターフェイスに対応するデバイスの MAC アドレスを選択し、設定を保存します。
ブリッジが DHCP 経由で IP アドレスを受信する場合は、IPv4/IPv6 セクションをそのままにしておきます。この特定の接続に対して DHCP が実行されていない場合は、必ずブリッジに IP アドレスを与えてください。言うまでもなく、IP アドレスがブリッジに割り当てられていない場合、すべての接続は失敗します。最初にブリッジを作成するときに IP アドレスを追加するのを忘れた場合でも、後でいつでも編集できます。
次に、root として次を実行します:
# nmcli con show
作成したブリッジの名前と一致する接続が表示されるはずです。その接続上の UUID を強調表示してコピーし、(再度 root として) 実行します:
# nmcli con up <UUID OF CONNECTION>
新しい接続がネットワーク設定の下に表示されます。30 秒から 1 分ほどかかる場合があります。稼働していることを確認するには、次のコマンドを実行します:
# brctl show
アクティブなブリッジのリストを表示します。
再起動します、その後すべてが正常に動作する (つまり、ブリッジが自動的に開始する) 場合は、準備は完了です。
<オプション> ネットワーク設定で、ブリッジに接続しないブリッジインターフェイスの接続プロファイルを削除します。これにより、後で混乱が生じるのを防ぐことができます。
Xen の systemd サービスのインストール
Xen dom0 は xenstored
, xenconsoled
, xendomains
, xen-init-dom0
サービスの起動と有効化を必要とします。
インストールが成功したか確認
dom0 ホストを再起動して Xen カーネルが正しく起動するか確認して、再起動を行っても全ての設定が消えないことを確認してください。dom0 を正しく設定できていれば、root で xl list
を実行すると以下のように表示されます:
# xl list
Name ID Mem VCPUs State Time(s) Domain-0 0 511 2 r----- 41652.9
もちろん Mem, VCPUs, Time カラムの値はマシンの設定や稼働時間によって変わってきます。重要なのは dom0 が記載されていることです。
上記の必須の手順に加えて、Xen を動かすときのベストプラクティス にはメモリ使用量を一定に固定したり dom0 が使用する CPU コアを指定する方法などの情報が書かれています。また、xenfs ファイルシステムのマウントポイントを /etc/fstab
に記述して作成するのも有益です:
none /proc/xen xenfs defaults 0 0
ベストプラクティス設定
Xen を使用する前に、Xen プロジェクトのベストプラクティス を確認してください。
Xen を使う
Xen は準仮想化 (PV) とハードウェア仮想化 (HVM) 両方の domU をサポートしています。以下のセクションでは HVM と PV の domU を作成して Arch Linux を走らせる手順を説明します。一般的には、HVM domU を作成する手順は domU OS とは関係なく、HVM domU は Microsoft Windows を含む幅広いオペレーティングシステムをサポートしています。HVM domU を使用するには dom0 のハードウェアが仮想化をサポートしている必要があります。準仮想化の domU では仮想化のサポートは必須ではありませんが、代わりに、オペレーティングシステムによって異なるインストール方法で、ゲストオペレーティングシステムに修正を加えなくてはなりません (Xen の wiki にある Guest Install のページを見て下さい)。オペレーティングシステムによっては PV domU としてインストールすることは不可能になっています (例: Microsoft Windows)。基本的に、HVM domU はエミュレートされたハードウェア上で動作するため PV domU よりも動作が遅いのが普通です。PV と HVM の domU のセットアップには共通しているところもありますが、ほとんどの部分で差異があります。どちらにしても、domU ごとに、"ハードディスク"を作成して設定ファイルを書き込まなければなりません。さらに、インストールのために domU は dom0 に保存されたインストール ISO のコピーにアクセスする必要があります (Arch Linux の ISO の入手方法についてはダウンロードページを参照)。
domU "ハードディスク"の作成
Xen は論理ボリューム、パーティション、イメージファイルなどを含む様々なタイプの"ハードディスク"をサポートしています。最大で 10GiB まで膨らむスパースファイルを作成するには、次のコマンドを使います:
$ truncate -s 10G domU.img
ドメインの可搬性よりもファイル IO の速度が重要な場合は、論理ボリュームやパーティションを利用すると良いでしょう。
Xen はホストマシンから利用できるパーティションやディスクを別の形でドメインで表示する場合があります。例えば、ホストの LVM パーティションがドメインでは (複数のパーティションが含まれた) ハードドライブとして認識されたりします。パーティションにサブパーティションを作成するとホストマシンのパーティションにアクセスするのが難しくなるので注意してください。パーティションの中のパーティションを区画する方法は kpartx の man ページを参照。
domU 設定の作成
各 domU には設定ファイルが必要で、それを使って仮想マシンが作られます。設定ファイルに関する詳細は Xen Wiki や xl.cfg
の man ページを見て下さい。設定ファイルのいくつかの要素は HVM と PV の両方の domU で共通しています。共通している設定は:
name = "domU" memory = 256 disk = [ "file:/path/to/ISO,sdb,r", "phy:/path/to/partition,sda1,w" ] vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
name=
は xl ツールが domU を管理するのに使用する名前で、全ての domU と被らないような名前にする必要があります。disk=
にはインストールメディア (file:
) と domU のために作成したパーティション (phy:
) の情報を記入します。物理パーティションではなくイメージファイルを使用する場合は、phy:
を file:
に変える必要があります。vif=
はネットワークコントローラを定義します。00:16:3e
MAC ブロックが Xen ドメインのために予約されており、mac=
の最後の3桁はランダムに埋める必要があります (0-9 と a-f の16進数)。
domU の管理
domU をブート時に起動させるには、/etc/xen/auto
に設定ファイルのシンボリックリンクを作成して xendomains
サービスを正しく立ち上がるようにする必要があります。domU の管理で役立つコマンド:
# xl top # xl list # xl console domUname # xl shutdown domUname # xl destroy domUname
ハードウェア仮想化 (HVM) Arch domU の設定
HVM domU を使用するには mesa と bluez-libs パッケージをインストールしてください。
HVM Arch domU の必要最小限の設定ファイルは:
name = 'HVM_domU' builder = 'hvm' memory = 256 vcpus = 2 disk = [ 'phy:/dev/mapper/vg0-hvm_arch,xvda,w', 'file:/path/to/ISO,hdc:cdrom,r' ] vif = [ 'mac=00:16:3e:00:00:00,bridge=xenbr0' ] vnc = 1 vnclisten = '0.0.0.0' vncdisplay = 1
HVM マシンにはコンソールは存在しないため、接続するには vncviewer を使います。上記の設定ファイルは domU vncserver の未認証のリモートアクセスを許可するため、セキュアでないネットワークで使うのには適していません。vncserver はポート 590X
から使うことができます。X は dom0 の vncdisplay
の値に置き換えて下さい。domU は次のコマンドで作成できます:
# xl create /path/to/config/file
次のコマンドで状態を確認できます:
# xl list
domU を作成したら、vncserver で接続してインストールガイドに従って Arch Linux をインストールしてください。
準仮想化 (PV) Arch domU の設定
PV Arch domU の必要最小限の設定ファイルは:
name = "PV_domU" kernel = "/mnt/arch/boot/x86_64/vmlinuz" ramdisk = "/mnt/arch/boot/x86_64/archiso.img" extra = "archisobasedir=arch archisolabel=ARCH_201301" memory = 256 disk = [ "phy:/path/to/partition,sda1,w", "file:/path/to/ISO,sdb,r" ] vif = [ 'mac=00:16:3e:XX:XX:XX,bridge=xenbr0' ]
使用方法にあわせてファイルを修正する必要があります。一番重要なのは、archisolabel=ARCH_201301
行を編集して使用する ISO のリリース年/月を使うようにすることです。32ビットの Arch をインストールしたい場合、kernel と ramdisk のパスを x86_64
から i686
に変えてください。
domU を作成する前に、インストール ISO をループマウントさせる必要があります。それには、/mnt
ディレクトリが存在して空であることを確認してから、以下のコマンドを実行してください (適当な ISO パスを入力してください):
# mount -o loop /path/to/iso /mnt
ISO をマウントしたら、次のコマンドで domU を作成することができます:
# xl create -c /path/to/config/file
"-c" オプションは作成が完了したら domU のコンソールを起動します。インストールガイドの指示に従って Arch Linux をインストールできますが、多少修正が必要です。cfg ファイルの disks 行に記載されたブロックデバイスは /dev/xvd*
のように表示されます。domU をパーティショニングするときはそれらのデバイスを使って下さい。インストールが完了したら domU を再起動する前に mkinitcpio に xen-blkfront
, xen-fbfront
, xen-netfront
, xen-kbdfront
モジュールを追加する必要があります。モジュールが存在しないと、domU は正しく起動しません。起動するのに、Grub のインストールは必要ありません。Xen には Python ベースの grub エミュレータが付いているため、起動するのに必要なのは grub.cfg
ファイルだけです (/boot/grub
ディレクトリを作成する必要はあります):
/boot/grub/grub.cfg
menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-__UUID__' { insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 __UUID__ else search --no-floppy --fs-uuid --set=root __UUID__ fi echo 'Loading Linux core repo kernel ...' linux /boot/vmlinuz-linux root=UUID=__UUID__ ro echo 'Loading initial ramdisk ...' initrd /boot/initramfs-linux.img }
ファイルを編集して root パーティションの UUID に合わせる必要があります。domU の中から、次のコマンドを実行:
# blkid
__UUID__
の例を全て root パーティション (/
にマウントされるパーティション) の実際の UUID に置き換えて下さい:
# sed -i 's/__UUID__/12345678-1234-1234-1234-123456789abcd/g' /boot/grub/grub.cfg
poweroff
コマンドで domU をシャットダウンしてください。ドメインが完全にシャットダウンされるとコンソールはハイパーバイザに戻ります。それで xl のドメインリストにドメインが表示されなくなります。次に ISO ファイルをアンマウントします:
# umount /mnt
domU の cfg ファイルを編集してください。kernel =
, ramdisk =
, extra =
行を削除して以下の行で置き換えます:
bootloader = "pygrub"
disk =
行から ISO ディスクも削除してください。
これで Arch domU がセットアップされました。先と同じコマンドで起動できます:
# xl create -c /etc/xen/archdomu.cfg
トラブルシューティング
"xl list" で libxl に関するエラーメッセージが表示される
Xen システムに起動できていないか、あるいは xencommons
スクリプトに記載されている xen モジュールがインストールされていません。
"xl create" が失敗する
ゲストのカーネルが正しいことを確認してください。pv-xxx.cfg
ファイルにスペルのミスがないか確認してください (例えば ramdisk
ではなく initrd
が使われている)。
HVM の作成に失敗する
HVM の作成が次のエラーで失敗する場合:
libxl: error: libxl_dm.c:3131:device_model_spawn_outcome: Domain 33:domain 33 device model: spawn failed (rc=-3) libxl: error: libxl_dm.c:3351:device_model_postconfig_done: Domain 33:Post DM startup configs failed, rc=-3 libxl: error: libxl_create.c:1837:domcreate_devmodel_started: Domain 33:device model did not start: -3 libxl: error: libxl_aoutils.c:646:libxl__kill_xs_path: Device Model already exited
numactl をインストールしていません。
Arch Linux ゲストが ctrl-d メッセージでフリーズする
プロンプトに戻るまで ctrl-d
を押して、initramfs を再生成してください。
エラーメッセージ "failed to execute '/usr/lib/udev/socket:/org/xen/xend/udev_event' 'socket:/org/xen/xend/udev_event': No such file or directory"
/etc/udev/rules.d/xend.rules
が原因です。Xend はすでに廃止され使われていないため、このファイルは削除しても問題ありません。