「Xen」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(カテゴリ変更)
(他言語へのリンクを修正)
 
(3人の利用者による、間の10版が非表示)
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|KVM}}
+
{{Related|ハイパーバイザ}}
{{Related|QEMU}}
 
{{Related|VirtualBox}}
 
{{Related|VMware}}
 
 
{{Related|既存環境を仮想マシンに (から) 移動}}
 
{{Related|既存環境を仮想マシンに (から) 移動}}
 
{{Related articles end}}
 
{{Related articles end}}
16行目: 11行目:
 
[http://wiki.xen.org/wiki/Xen_Overview Xen Overview] より:
 
[http://wiki.xen.org/wiki/Xen_Overview Xen Overview] より:
   
:''Xen はオープンソースの type-1 またはベアメタルハイパーバイザであり、単一のマシン (ホスト) でオペレーティングシステムのインスタンス実際の様々なオペレーティングシステムを多数同時に実行することができます。Xen はオープンソースで提供される唯一の type-1 ハイパーバイザです。Xen は多くの商用そしてオープンソースアプリケーションの基盤として使われています、例えば: サーバー仮想化, Infrastructure as a Service (IaaS), デスクトップ仮想化, セキュリティアプリケーション, 組み込み・ハードウェアアプライアンス。''
+
:Xen はオープンソースの type-1 またはベアメタルハイパーバイザであり、オペレーティングシステムの多数のインスタンス、または実際には異オペレーティングシステムを単一のマシン (またはホスト) 上で並行して実行できるようにします。 Xen はオープンソースとし利用できる唯一の type-1 ハイパーバイザです。
  +
  +
Xen ハイパーバイザは同時に複数のオペレーティングシステムを動作できるようにコンピュータアーキテクチャをエミュレートする薄いソフトウェアレイヤーです。ハイパーバイザはインストールされているコンピュータのブートローダーによって起動します。ハイパーバイザがロードされると、[http://wiki.xen.org/wiki/Dom0 dom0] ("domain 0" の略で、ホストまたは特権ドメインとも呼ばれます) が起動して Arch Linux が走ります。''dom0'' が起動したら、''dom0'' から一つまたは複数の [http://wiki.xen.org/wiki/DomU domU] (ユーザードメインの略で、VM またはゲストとも呼ばれます) を起動・制御することができます。Xen は準仮想化 (PV) とハードウェア仮想化 (HVM) 両方の ''domU'' をサポートしています。詳しくは [http://wiki.xen.org/wiki/Xen_Overview Xen.org] を見て下さい。
  +
  +
Xen ハイパーバイザーは、基本オペレーティングシステムのフルインストールに依存しています。Xen ハイパーバイザーをインストールする前に、ホストマシンに完全に動作する最新の Arch Linux がインストールされている必要があります。このインストールは、基本パッケージのみを使用した最小限のインストールであり、[[デスクトップ環境]] や [[Xorg]] さえも必要としません。
  +
  +
新しいホストを最初から構築する場合は、Arch Linux のインストール手順について [[インストールガイド]] を参照してください。
   
 
{{Warning|Xen ハイパーバイザを実行しているときに [[VirtualBox]] など他の仮想化ソフトウェアを実行しないで下さい。システムがフリーズする可能性があります。こちらの[https://www.virtualbox.org/ticket/12146 バグレポート (wontfix)] を参照。}}
 
{{Warning|Xen ハイパーバイザを実行しているときに [[VirtualBox]] など他の仮想化ソフトウェアを実行しないで下さい。システムがフリーズする可能性があります。こちらの[https://www.virtualbox.org/ticket/12146 バグレポート (wontfix)] を参照。}}
   
== イントロダクション ==
+
== インール ==
   
  +
=== システム要件 ===
Xen ハイパーバイザは同時に複数のオペレーティングシステムを動作できるようにコンピュータアーキテクチャをエミュレートする薄いソフトウェアレイヤーです。ハイパーバイザはインストールされているコンピュータのブートローダーによって起動します。ハイパーバイザがロードされると、[http://wiki.xen.org/wiki/Dom0 dom0] ("domain 0" の略で、ホストまたは特権ドメインとも呼ばれます) が起動して Arch Linux が走ります。''dom0'' が起動したら、''dom0'' から一つまたは複数の [http://wiki.xen.org/wiki/DomU domU] (ユーザードメインの略で、VM またはゲストとも呼ばれます) を起動・制御することができます。Xen は準仮想化 (PV) とハードウェア仮想化 (HVM) 両方の ''domU'' をサポートしています。詳しくは [http://wiki.xen.org/wiki/Xen_Overview Xen.org] を見て下さい。
 
   
== システム要件 ==
 
 
Xen ハイパーバイザは最新の Linux カーネルに含まれている、カーネルレベルのサポートを必要としており、Arch のカーネルパッケージである {{Pkg|linux}} と {{Pkg|linux-lts}} にも組み込まれています。HVM の ''domU'' を動かすには、Intel VT-x または AMD-V (SVM) どちらかの仮想化サポートが搭載された物理ハードウェアが必要です。これを確認するために、Xen ハイパーバイザが動作していないときに次のコマンドを実行してください:
 
Xen ハイパーバイザは最新の Linux カーネルに含まれている、カーネルレベルのサポートを必要としており、Arch のカーネルパッケージである {{Pkg|linux}} と {{Pkg|linux-lts}} にも組み込まれています。HVM の ''domU'' を動かすには、Intel VT-x または AMD-V (SVM) どちらかの仮想化サポートが搭載された物理ハードウェアが必要です。これを確認するために、Xen ハイパーバイザが動作していないときに次のコマンドを実行してください:
 
$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo
 
$ grep -E "(vmx|svm)" --color=always /proc/cpuinfo
 
上のコマンドで何も出力がされない場合、ハードウェア仮想化のサポートが利用できません。あなたのハードウェアでは HVM ''domU'' を実行することは不可能です (または Xen ハイパーバイザが実行中です)。CPU がハードウェア仮想化の機能をサポートしているという自信がある場合はブートプロセスの間にホストシステムの BIOS 設定メニューにアクセスして、仮想化サポートに関連するオプションが無効になっていないか確認してください。そのようなオプションが存在していて無効になっていたときは、有効にして、システムを再起動してからもう一度上のコマンドを実行してください。Xen ハイパーバイザは PCI パススルーもサポートしており、デバイスが ''dom0'' をサポートしていないときでも PCI デバイスを直接 ''domU'' に引き渡すことができます。PCI パススルーを使用するには、CPU が IOMMU/VT-d をサポートしていなければなりません。
 
上のコマンドで何も出力がされない場合、ハードウェア仮想化のサポートが利用できません。あなたのハードウェアでは HVM ''domU'' を実行することは不可能です (または Xen ハイパーバイザが実行中です)。CPU がハードウェア仮想化の機能をサポートしているという自信がある場合はブートプロセスの間にホストシステムの BIOS 設定メニューにアクセスして、仮想化サポートに関連するオプションが無効になっていないか確認してください。そのようなオプションが存在していて無効になっていたときは、有効にして、システムを再起動してからもう一度上のコマンドを実行してください。Xen ハイパーバイザは PCI パススルーもサポートしており、デバイスが ''dom0'' をサポートしていないときでも PCI デバイスを直接 ''domU'' に引き渡すことができます。PCI パススルーを使用するには、CPU が IOMMU/VT-d をサポートしていなければなりません。
 
== dom0 の設定 ==
 
Xen ハイパーバイザはベースのオペレーティングシステムのフルインストールを必要とします。Xen ハイパーバイザをインストールしようとする前に、ホストマシンに完全な最新の Arch Linux をインストールする必要があります。このインストールは base パッケージだけの最小インストールでもかまわなく、[[デスクトップ環境]]や [[Xorg]] は必要とされません。新しいホストをスクラッチから作成する場合は、[[インストールガイド]]を見て Arch Linux をインストールしてください。通常のインストールを Xen ハイパーバイザの上で動作する ''dom0'' に転換するには以下の設定手順が必要です:
 
 
# Xen ハイパーバイザのインストール
 
# Xen ハイパーバイザを起動するようにブートローダーを設定
 
# ネットワークブリッジの作成
 
# Xen の systemd サービスのインストール
 
   
 
=== Xen ハイパーバイザのインストール ===
 
=== Xen ハイパーバイザのインストール ===
  +
 
Xen ハイパーバイザをインストールするには {{AUR|xen}} パッケージを[[インストール]]してください。どちらのパッケージにも Xen ハイパーバイザ、最新の xl インターフェイスと設定・サポートファイル、systemd サービスが含まれています。Xen をコンパイル・インストールするには [[multilib]] リポジトリを有効にして {{Grp|multilib-devel}} パッケージグループをインストールする必要があります。man ページやドキュメントが必要なときは {{AUR|xen-docs}} パッケージをインストールしてください。
 
Xen ハイパーバイザをインストールするには {{AUR|xen}} パッケージを[[インストール]]してください。どちらのパッケージにも Xen ハイパーバイザ、最新の xl インターフェイスと設定・サポートファイル、systemd サービスが含まれています。Xen をコンパイル・インストールするには [[multilib]] リポジトリを有効にして {{Grp|multilib-devel}} パッケージグループをインストールする必要があります。man ページやドキュメントが必要なときは {{AUR|xen-docs}} パッケージをインストールしてください。
   
  +
BIOS や UEFI を使って仮想マシンを起動するにはそれぞれ {{Pkg|seabios}} または {{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}} パッケージをインストールする必要があります。
==== UEFI のサポート ====
 
  +
最近のコンピュータに搭載されている UEFI システムを通して Xen ハイパーバイザを起動することもできますが、binutils をリコンパイルして x86_64-pep のエミュレーションのサポートを追加する必要があります。archway でやるなら [[Arch Build System]] を使って binutils の PKGBUILD ファイルのビルドオプションに {{ic|1=--enable-targets=x86_64-pep}} を加えます:
 
  +
==== Xen をビルド ====
--disable-werror --disable-gdb '''--enable-targets=x86_64-pep'''
 
  +
  +
xen とそのコンポーネントは、VM または chroot のクリーンな環境にビルドすることをお勧めします。Xen をビルドする場合、''makepkg'' に渡すことができる環境変数があります。
  +
  +
# ''build_stubdom'' -- Xen スタブドムを実行するためのコンポーネントをビルドします。主に [https://wiki.xenproject.org/wiki/Dom0_Disaggregation dom0 disaggregation] 用です。 ビルドする stubdom 用のコンポーネントは ''xen-stubdom'' に分割されます。デフォルトは false です。
  +
# ''boot_dir'' -- ブートディレクトリです。デフォルトは ''/boot'' です。
  +
# ''efi_dir'', ''efi_mountpoint'' -- EFI ディレクトリとマウントポイント。デフォルトは ''/boot'' です。
   
  +
これらの引数を変数として makepkg に渡します:
{{warning|1=最新バージョンの bintuils では動作しないので svn から古いバージョンにダウングレードしてコンパイル・インストールする必要があります:
 
$ svn checkout --depth empty svn://svn.archlinux.org/packages
 
$ cd packages
 
$ svn update -r 215066 binutils
 
svn の扱い方は [https://nims11.wordpress.com/2013/02/17/downgrading-packages-in-arch-linux-the-worst-case-scenario/] に載っています。}}
 
   
  +
$ build_stubdom=true efi_dir="/boot/EFI" makepkg
システムの binutils がアップデートされると公式バージョンによって上書きされてしまいますが、同じ変更をして UEFI に対応するように Xen ハイパーバイザを (再) コンパイルすれば大丈夫です。起動する度、または実行時に行う必要はありません。
 
   
  +
{{AUR|xen-docs}} もマニュアルページとドキュメント用にビルドされます。スタブダムサポートをビルドすることを選択した場合、''xen-stubdom'' パッケージがビルドされます。
x86_64-pep 対応の binutils を使って Xen をコンパイルすると、UEFI カーネルがデフォルトでビルドされインストールされます。UEFI カーネルは {{ic|/usr/lib/efi/xen-?.?.?.efi}} に保存されます ("?" はバージョン番号)。"xen" で始まる他のファイルはただのシンボリックリンクであり無視してかまいません。ただし、efi バイナリを手動で {{ic|/boot}} にコピーする必要があります、例:
 
   
  +
{{Note|Arch Linux 上の Xen の計画は、最終的には PVH ドメインを優先して stubdom を段階的に廃止することです。}}
# cp /usr/lib/efi/xen-4.4.0.efi /boot
 
   
 
=== ブートローダーの修正 ===
 
=== ブートローダーの修正 ===
63行目: 58行目:
   
 
==== UEFI ====
 
==== UEFI ====
Xen の起動に UEFI を関わらせる方法は複数存在しますが、このセクションでは EFI スタブを使って Xen を起動する、最もシンプルな方法を説明します。
 
   
[[#UEFI サポート]] に記述されていることにしたがって UEFI サポートを有効にして Xenコンパイルしてる必要があります。
+
Xen は、[https://xenbits.xen.org/docs/unstable/misc/efi.html Xen EFI システム] で指定されている UEFI からのブートをサポートしています。[[UEFI#efibootmgr|efibootmgr]]使用してブート順序やその他のパラメーターを設定する必要がある場合もあります。
   
  +
まず、{{ic|xen.efi}} ファイルがカーネルファイルおよび RAM ディスク ファイルとともに [[EFI システムパーティション]] に存在することを確認します。
EFI パーティションにカーネルを配置することで UEFI からカーネルを起動することが可能ですが、Xen は少なくともどのカーネルを dom0 として起動するのか知っておかなければならないため、最低限の設定ファイルが必要になります。システム要件にあわせて {{ic|/boot/xen.cfg}} ファイルを作成・編集してください、例:
 
   
  +
次に、Xen には、どのカーネルを [https://wiki.xen.org/wiki/Dom0 dom0] として起動するかを指定する ASCII (UTF-8、UTC-16 などは不可) 設定ファイルが必要です。このファイルは、バイナリと同じ [[EFI システムパーティション]] に配置する必要があります。Xen はいくつかの設定ファイルを検索し、最初に見つかった設定ファイルを使用します。検索順序は、バイナリ名の拡張子 {{ic|.efi}} が {{ic|.cfg}} に置き換えられることから始まり、一致するものが見つかるまで、末尾の名前コンポーネント {{ic|.}}、{{ic|-}} および {{ic|_}} が削除されます。通常、{{ic|xen.cfg}} という名前の単一ファイルが、次のようなシステム要件とともに使用されます。
{{hc|/boot/xen.cfg|<nowiki>
 
  +
  +
{{hc|xen.cfg|<nowiki>
 
[global]
 
[global]
 
default=xen
 
default=xen
   
 
[xen]
 
[xen]
options=console=vga loglvl=all noreboot
+
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/sda2 rw ignore_loglevel #earlyprintk=xen
+
kernel=vmlinuz-linux root=/dev/sdaX rw add_efi_memmap #earlyprintk=xen
 
ramdisk=initramfs-linux.img
 
ramdisk=initramfs-linux.img
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{Tip|このファイルの追加パラメータについては、[https://xenbits.xen.org/docs/unstable/misc/efi.html Xen efi.cfg] を参照してください。オプション行については、シリアルコンソール、dom0 vCPU の制限など、使用可能なオプションの完全なリストについては、[https://xenbits.xen.org/docs/unstable/misc/xen-command-line.html Xen コマンドラインオプション] を参照してください。メモリ、スケジューリング、Intel および AMD のマイクロコードなど。たとえば、[https://wiki.xen.org/wiki/Xen_Project_Best_Practices Xen プロジェクトのベストプラクティス] では、dom0 のメモリ バルーニングを無効にすることが指示されています。これを行うには、{{ic|xen.cfg}} の {{ic|options}} 行を編集して追加のパラメータを指定します。}}
ブートの順序やその他のパラメータを設定するには [[UEFI#efibootmgr|efibootmgr]] を使う必要があります。ブートが失敗する場合は、内蔵の [[UEFI#UEFI シェルの起動|UEFI シェル]]を使って手動で起動してみてください。例えば:
 
  +
  +
===== systemd-boot =====
  +
  +
{{Tip|Xen をインストールして設定した後でも、[https://wiki.xen.org/wiki/Dom0 dom0] カーネルを直接起動し続けることができます。これは、Xen インストールが起動できなくなったり、設定が間違ったりした場合に役立ちます。したがって、システム上でレスキューブートオプションとして設定されている元の systemd-boot ローダーエントリを保持し、Xen 用の追加エントリのみを追加することをお勧めします。}}
  +
  +
{{Note|システムの [[systemd-boot]] インストール時に、ESP パーティションは {{ic|/boot}} にマウントされているはずです。これは、{{AUR|Xen}} パッケージと EFI バイナリが構成されている場所であるためです。{{ic|/boot/efi}} 用に構築されたものではありません。}}
  +
  +
新しい EFI タイプのローダーエントリを追加します。詳細については、[[systemd-boot#EFI シェルや他の EFI アプリ]] を参照してください。例えば:
  +
  +
{{hc|/boot/loader/entries/10-xen.conf|<nowiki>
  +
title Xen Hypervisor
  +
efi /xen.efi
  +
</nowiki>}}
  +
  +
{{Note|現在の [[systemd-boot]] と Xen efi バイナリの組み合わせでは、ローダーエントリの {{ic|efi}} 行でパラメータを渡すことはできません。ただし、Xen のドキュメントには、{{ic|1=-cfg=file.cfg}} を UEFI シェルパラメータとして使用できると記載されています、しかしこれは efi line オプションには当てはまりません。現時点では、Xen EFI エントリは 1 つだけ持つことができるため、設定ファイルは 1 つだけに制限されます。}}
  +
  +
===== EFISTUB =====
  +
  +
[[EFISTUB]] を使用して、UEFI から直接 EFI カーネルをブートすることができます。
  +
  +
ビルドインの [[Unified Extensible Firmware Interface#UEFI シェルの起動|UEFI シェル]] にドロップし、EFIファイルを直接呼び出します。例えば:
  +
 
Shell> fs0:
 
Shell> fs0:
FS0:\> xen-4.4.0.efi
+
FS0:\> xen.efi
   
  +
上で概説したように、[[EFI システムパーティション]] 内の {{ic|xen.cfg}} 構成ファイルが依然として必要であることに注意してください。さらに、{{ic|1=-cfg=file.cfg}} パラメータを使用して別の構成ファイルを指定することもできます。例えば:
==== GRUB ====
 
[[GRUB]] ユーザーのために、Xen パッケージには {{ic|/etc/grub.d/09_xen}} 生成ファイルが入っています。{{ic|/etc/xen/grub.conf}} ファイルを編集して Xen の起動コマンドをカスタマイズすることが可能です。例えば、起動時に ''dom0'' に 512 MiB のメモリを割り当てるには、{{ic|/etc/xen/grub.conf}} を編集して次の行を:
 
#XEN_HYPERVISOR_CMDLINE="xsave=1"
 
   
  +
Shell> fs0:
以下のように置き換えます:
 
  +
FS0:\> xen.efi -cfg=xen-rescue.cfg
XEN_HYPERVISOR_CMDLINE="dom0_mem=512M xsave=1"
 
  +
  +
これらの追加設定ファイルは、Xen EFI バイナリファイルおよび Linux スタブファイルと同じディレクトリに存在する必要があります。
  +
  +
==== BIOS ====
  +
  +
Xen は、BIOS として設定されたシステムファームウェアからの起動をサポートしています。
  +
  +
===== GRUB =====
  +
  +
[[GRUB]] ユーザーの場合は、''dom0'' の起動と [https://wiki.xenproject.org/wiki/PvGrub2 PvGrub2] イメージのビルドのために {{AUR|grub-xen-git}} パッケージをインストールしますユーザードメインを起動するため。
  +
  +
ファイル {{ic|/etc/default/grub}} を編集して、Xen ブートコマンドをカスタマイズできます。たとえば、起動時に 512 MiB の RAM を ''dom0'' に割り当てるには、次の行を置き換えて {{ic|/etc/default/grub}} を変更します:
  +
  +
#GRUB_CMDLINE_XEN_DEFAULT=""
  +
  +
それと
  +
  +
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M"
  +
  +
Xen の GRUB 設定キーの詳細については、[https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html#Simple-configuration GRUB ドキュメント] を参照してください。
  +
  +
オプションをカスタマイズした後、次のコマンドを使用してブートローダー設定を更新します:
   
オプションをカスタマイズしたら、次のコマンドでブートローダーの設定を更新してください:
 
 
# grub-mkconfig -o /boot/grub/grub.cfg
 
# grub-mkconfig -o /boot/grub/grub.cfg
   
GRUB ブートローダーの使用方法に関しては [[GRUB]] に詳細が載っています
+
GRUB ブートローダーの使用方法の詳細ついては[[GRUB]] を参照しください。
  +
  +
====== ゲストを起動するための GRUB イメージの構築 ======
  +
  +
通常のプラットフォームターゲットに加えて、{{AUR|grub-xen-git}} パッケージは、Xen ゲストの起動に使用できる 3 つの追加ターゲット用の GRUB をビルドします: ''i386-xen''、''i386-xen_pvh''、および ''x86_64-xen'' これらのターゲットのいずれかからブートイメージを作成するには、まず GRUB 設定ファイルを作成します。好みに応じて、このファイルはゲスト内の GRUB 設定ファイルを見つけてロードすることも、''dom0'' からのブートプロセスの詳細を管理することもできます。必要なのはゲスト内の設定ファイルを見つけてロードすることだけであると仮定して、次のコードをファイルに追加します。
  +
  +
{{hc|grub.cfg|<nowiki>
  +
search -s root -f /boot/grub/grub.cfg
  +
configfile /boot/grub/grub.cfg
  +
</nowiki>}}
  +
  +
次に、そのファイルを組み込む [[GRUB/ヒントとテクニック#GRUBスタンドアロン|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 プロジェクトの [https://wiki.xenproject.org/wiki/PvGrub2 PvGrub2 ドキュメント] にあります。
  +
  +
===== Syslinux =====
   
==== Syslinux ====
 
 
[[Syslinux]] を使っている場合、以下のような記述を {{ic|/boot/syslinux/syslinux.cfg}} に追加してください:
 
[[Syslinux]] を使っている場合、以下のような記述を {{ic|/boot/syslinux/syslinux.cfg}} に追加してください:
  +
 
LABEL xen
 
LABEL xen
 
MENU LABEL Xen
 
MENU LABEL Xen
105行目: 163行目:
   
 
また、{{ic|syslinux.cfg}} と同じディレクトリに {{ic|mboot.c32}} (と {{ic|libcom32.c32}}) が必要です。{{ic|/boot/syslinux}} に {{ic|mboot.c32}} がない場合はコピーしてください:
 
また、{{ic|syslinux.cfg}} と同じディレクトリに {{ic|mboot.c32}} (と {{ic|libcom32.c32}}) が必要です。{{ic|/boot/syslinux}} に {{ic|mboot.c32}} がない場合はコピーしてください:
  +
 
# cp /usr/lib/syslinux/bios/mboot.c32 /boot/syslinux
 
# cp /usr/lib/syslinux/bios/mboot.c32 /boot/syslinux
   
 
=== ネットワークブリッジの作成 ===
 
=== ネットワークブリッジの作成 ===
   
Xen は ''domU'' と ''dom0'' の間ネットワーク接続必要とし、手動で設定しなくてはなりません。DHCP と静的アドレスの両方使えるので、ネットワークの接続形態あわせ選択してくだ。複雑なセットアップ可能で詳細は Xen wiki の [http://wiki.xen.org/wiki/Xen_Networking Networking] 記事を見たり様々なネットワーク設定のスクリプトがある {{ic|/etc/xen/scripts}} をさい。初歩的なブリッジネットワークは [[netctl]] に入っている {{ic|etc/netctl/examples}} のサンプル設定ファイルを修正ることで設定できます。全ての ''domU'' が所属する ''dom0'' に仮想スイッチ作成します。デフォルトでは、Xen はブリッジの名前を {{ic|xenbr0}} と定めてます。netctl ブリッジを設定するには、以下を実行してください:
+
Xen ''domU'' と ''dom0'' (およびそれ以降) の間ネットワーク通信を手動で設定する必要がありま。DHCP と静的アドレス指定の両方使きますがどちらを選択するかはネットワークトポロジよっ決定れます。複雑なセットアップ可能です。詳細については Xen Wiki の [https://wiki.xen.org/wiki/Xen_Networking Networking] 記事を参照しさまざまなネットワーク構成のスクリプトについては {{ic|/etc/xen/scripts}} を参照しください。すての ''domU'' が接続されている ''dom0'' に仮想スイッチ作成される基本的なブリッジネットワークは、{{ic|xenbr0}} という名前の [[ネットワークブリッジ]] 作成することで設定できま
   
  +
詳細については、[[ネットワークブリッジ#ブリッジの作成]] を参照してください。
# cd /etc/netctl
 
# cp examples/bridge xenbridge-dhcp
 
   
  +
==== Systemd-networkd ====
{{ic|/etc/netctl/xenbridge-dhcp}} に以下の変更を施して下さい (既存のネットワーク接続の名前が {{ic|eth0}} の場合):
 
Description="Xen bridge connection"
 
Interface=xenbr0
 
Connection=bridge
 
BindsToInterfaces=(eth0) # Use the name of the external interface found with the 'ip link' command
 
IP=dhcp
 
   
  +
詳細については、[[Systemd-networkd#ブリッジインターフェイス]] を参照してください。
次のコマンドでネットワークブリッジを起動します:
 
# netctl start xenbridge-dhcp
 
   
  +
==== Network Manager ====
プロンプトが戻ってきたら、全てが問題ないか確認してください:
 
{{hc|# brctl show|
 
bridge name bridge id STP enabled interfaces
 
xenbr0 8000.001a9206c0c0 no eth0
 
}}
 
   
  +
Gnome の Network Manager は、面倒な場合があります。Wiki の [[ネットワークブリッジ|ブリッジ]] セクションに概要が記載されているブリッジ作成セクションに従うことが不明瞭である場合、または機能しない場合は、次の手順で機能する可能性があります。
ブリッジに問題がないようでしたら、次のコマンドでブート時に自動的に起動するように設定することができます:
 
  +
# netctl enable xenbridge-dhcp
 
  +
"ネットワーク設定" を開き、ブリッジで使用するインターフェイス (例: 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 の systemd サービスのインストール ===
  +
 
Xen ''dom0'' は {{ic|xenstored}}, {{ic|xenconsoled}}, {{ic|xendomains}}, {{ic|xen-init-dom0}} [[systemd#ユニットを使う|サービス]]の起動と有効化を必要とします。
 
Xen ''dom0'' は {{ic|xenstored}}, {{ic|xenconsoled}}, {{ic|xendomains}}, {{ic|xen-init-dom0}} [[systemd#ユニットを使う|サービス]]の起動と有効化を必要とします。
   
 
=== インストールが成功したか確認 ===
 
=== インストールが成功したか確認 ===
  +
 
''dom0'' ホストを再起動して Xen カーネルが正しく起動するか確認して、再起動を行っても全ての設定が消えないことを確認してください。''dom0'' を正しく設定できていれば、root で {{ic|xl list}} を実行すると以下のように表示されます:
 
''dom0'' ホストを再起動して Xen カーネルが正しく起動するか確認して、再起動を行っても全ての設定が消えないことを確認してください。''dom0'' を正しく設定できていれば、root で {{ic|xl list}} を実行すると以下のように表示されます:
 
{{hc|# xl list|
 
{{hc|# xl list|
145行目: 224行目:
 
上記の必須の手順に加えて、[http://wiki.xen.org/wiki/Xen_Best_Practices Xen を動かすときのベストプラクティス] にはメモリ使用量を一定に固定したり ''dom0'' が使用する CPU コアを指定する方法などの情報が書かれています。また、xenfs ファイルシステムのマウントポイントを {{ic|/etc/fstab}} に記述して作成するのも有益です:
 
上記の必須の手順に加えて、[http://wiki.xen.org/wiki/Xen_Best_Practices Xen を動かすときのベストプラクティス] にはメモリ使用量を一定に固定したり ''dom0'' が使用する CPU コアを指定する方法などの情報が書かれています。また、xenfs ファイルシステムのマウントポイントを {{ic|/etc/fstab}} に記述して作成するのも有益です:
 
none /proc/xen xenfs defaults 0 0
 
none /proc/xen xenfs defaults 0 0
  +
  +
=== ベストプラクティス設定 ===
  +
  +
Xen を使用する前に、[https://wiki.xen.org/wiki/Xen_Project_Best_Practices Xen プロジェクトのベストプラクティス] を確認してください。
   
 
== Xen を使う ==
 
== Xen を使う ==
250行目: 333行目:
   
 
=== "xl list" で libxl に関するエラーメッセージが表示される ===
 
=== "xl list" で libxl に関するエラーメッセージが表示される ===
  +
 
Xen システムに起動できていないか、あるいは {{ic|xencommons}} スクリプトに記載されている xen モジュールがインストールされていません。
 
Xen システムに起動できていないか、あるいは {{ic|xencommons}} スクリプトに記載されている xen モジュールがインストールされていません。
   
 
=== "xl create" が失敗する ===
 
=== "xl create" が失敗する ===
  +
 
ゲストのカーネルが正しいことを確認してください。{{ic|pv-xxx.cfg}} ファイルにスペルのミスがないか確認してください (例えば {{ic|ramdisk}} ではなく {{ic|initrd}} が使われている)。
 
ゲストのカーネルが正しいことを確認してください。{{ic|pv-xxx.cfg}} ファイルにスペルのミスがないか確認してください (例えば {{ic|ramdisk}} ではなく {{ic|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
  +
  +
{{Pkg|numactl}} をインストールしていません。
   
 
=== Arch Linux ゲストが ctrl-d メッセージでフリーズする ===
 
=== Arch Linux ゲストが ctrl-d メッセージでフリーズする ===
  +
 
プロンプトに戻るまで {{ic|ctrl-d}} を押して、initramfs を再生成してください。
 
プロンプトに戻るまで {{ic|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" ===
 
=== エラーメッセージ "failed to execute '/usr/lib/udev/socket:/org/xen/xend/udev_event' 'socket:/org/xen/xend/udev_event': No such file or directory" ===
  +
 
{{ic|/etc/udev/rules.d/xend.rules}} が原因です。Xend はすでに廃止され使われていないため、このファイルは削除しても問題ありません。
 
{{ic|/etc/udev/rules.d/xend.rules}} が原因です。Xend はすでに廃止され使われていないため、このファイルは削除しても問題ありません。
   

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 ハイパーバイザを実行しているときに VirtualBox など他の仮想化ソフトウェアを実行しないで下さい。システムがフリーズする可能性があります。こちらのバグレポート (wontfix) を参照。

インストール

システム要件

Xen ハイパーバイザは最新の Linux カーネルに含まれている、カーネルレベルのサポートを必要としており、Arch のカーネルパッケージである linuxlinux-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 に渡すことができる環境変数があります。

  1. build_stubdom -- Xen スタブドムを実行するためのコンポーネントをビルドします。主に dom0 disaggregation 用です。 ビルドする stubdom 用のコンポーネントは xen-stubdom に分割されます。デフォルトは false です。
  2. boot_dir -- ブートディレクトリです。デフォルトは /boot です。
  3. efi_dir, efi_mountpoint -- EFI ディレクトリとマウントポイント。デフォルトは /boot です。

これらの引数を変数として makepkg に渡します:

$ build_stubdom=true efi_dir="/boot/EFI" makepkg

xen-docsAUR もマニュアルページとドキュメント用にビルドされます。スタブダムサポートをビルドすることを選択した場合、xen-stubdom パッケージがビルドされます。

ノート: Arch Linux 上の Xen の計画は、最終的には PVH ドメインを優先して stubdom を段階的に廃止することです。

ブートローダーの修正

警告: ブートシステムに変更を加えた後、システムが起動するという思い込みは厳禁です。新人ユーザーだけでなく使い慣れているユーザーもよく犯す間違いになります。ブートシステムに変更を加える前に、USB スティックやその他のライブメディアなど、システムを起動する何らかの手段を確保しておいてください。

通常のカーネルを起動するのに使われているブートローダーを、特殊な 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
ヒント: このファイルの追加パラメータについては、Xen efi.cfg を参照してください。オプション行については、シリアルコンソール、dom0 vCPU の制限など、使用可能なオプションの完全なリストについては、Xen コマンドラインオプション を参照してください。メモリ、スケジューリング、Intel および AMD のマイクロコードなど。たとえば、Xen プロジェクトのベストプラクティス では、dom0 のメモリ バルーニングを無効にすることが指示されています。これを行うには、xen.cfgoptions 行を編集して追加のパラメータを指定します。
systemd-boot
ヒント: Xen をインストールして設定した後でも、dom0 カーネルを直接起動し続けることができます。これは、Xen インストールが起動できなくなったり、設定が間違ったりした場合に役立ちます。したがって、システム上でレスキューブートオプションとして設定されている元の systemd-boot ローダーエントリを保持し、Xen 用の追加エントリのみを追加することをお勧めします。
ノート: システムの systemd-boot インストール時に、ESP パーティションは /boot にマウントされているはずです。これは、XenAUR パッケージと EFI バイナリが構成されている場所であるためです。/boot/efi 用に構築されたものではありません。

新しい EFI タイプのローダーエントリを追加します。詳細については、systemd-boot#EFI シェルや他の EFI アプリ を参照してください。例えば:

/boot/loader/entries/10-xen.conf
title   Xen Hypervisor
efi     /xen.efi
ノート: 現在の systemd-boot と Xen efi バイナリの組み合わせでは、ローダーエントリの efi 行でパラメータを渡すことはできません。ただし、Xen のドキュメントには、-cfg=file.cfg を UEFI シェルパラメータとして使用できると記載されています、しかしこれは efi line オプションには当てはまりません。現時点では、Xen EFI エントリは 1 つだけ持つことができるため、設定ファイルは 1 つだけに制限されます。
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-xeni386-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/sdaXroot パーティションに置き換えて下さい。

また、syslinux.cfg と同じディレクトリに mboot.c32 (と libcom32.c32) が必要です。/boot/syslinuxmboot.c32 がない場合はコピーしてください:

# cp /usr/lib/syslinux/bios/mboot.c32 /boot/syslinux

ネットワークブリッジの作成

Xen では、domUdom0 (およびそれ以降) の間のネットワーク通信を手動で設定する必要があります。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 dom0xenstored, 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 ごとに、"ハードディスク"を作成して設定ファイルを書き込まなければなりません。さらに、インストールのために domUdom0 に保存されたインストール ISO のコピーにアクセスする必要があります (Arch Linux の ISO の入手方法についてはダウンロードページを参照)。

domU "ハードディスク"の作成

Xen は論理ボリュームパーティション、イメージファイルなどを含む様々なタイプの"ハードディスク"をサポートしています。最大で 10GiB まで膨らむスパースファイルを作成するには、次のコマンドを使います:

$ truncate -s 10G domU.img

ドメインの可搬性よりもファイル IO の速度が重要な場合は、論理ボリュームパーティションを利用すると良いでしょう。

Xen はホストマシンから利用できるパーティションやディスクを別の形でドメインで表示する場合があります。例えば、ホストの LVM パーティションがドメインでは (複数のパーティションが含まれた) ハードドライブとして認識されたりします。パーティションにサブパーティションを作成するとホストマシンのパーティションにアクセスするのが難しくなるので注意してください。パーティションの中のパーティションを区画する方法は kpartx の man ページを参照。

domU 設定の作成

domU には設定ファイルが必要で、それを使って仮想マシンが作られます。設定ファイルに関する詳細は Xen Wikixl.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 を使用するには mesabluez-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 は dom0vncdisplay の値に置き換えて下さい。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 を再起動する前に mkinitcpioxen-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 はすでに廃止され使われていないため、このファイルは削除しても問題ありません。

参照