KVMとProxmoxがあるのに、なぜXenを試すのか?
自分のhomelabはProxmox VEで12台のVMとコンテナを管理している——本番環境に持っていく前に何でもテストできるplaygroundだ。Proxmoxは素晴らしく、Web UIも便利だが、「本物の」仮想化アーキテクチャをより深く理解したいと感じることがある——そんなときにXen Hypervisorの出番だ。
アーキテクチャの面では、XenはType-1 hypervisorとしてハードウェア上で直接動作する——Linuxカーネルをホストとして必要としない。代わりに、あなたのLinuxカーネルはDom0という特権ドメイン内で動作し、ハードウェアドライバへのアクセス権を持ち、他のVMを調整する役割を担う。AWS EC2はNitroに移行する前(2006〜2017年)の初期世代全体をXen上に構築していた——つまりこのisolationモデルは単なる理論ではない。
事前に押さえておくべき基本概念
Dom0、DomU、Xen Hypervisor
- Xen Hypervisor:ハードウェアとすべてのドメインの間に位置する薄いレイヤー——これこそが「本物のhypervisor」
- Dom0(Domain-0):特権VM。xenモジュールを持つLinuxカーネルが動作し、ハードウェアドライバを管理してDomUを調整する
- DomU(Domain-U):通常の仮想マシン。Dom0と並行して動作し、ハードウェアへの直接アクセス権を持たない
PV、HVM、PVH
- PV(準仮想化):ゲストカーネルにパッチを当てて、Xenと直接通信する——パフォーマンスは高いが、カーネルのサポートが必要
- HVM(ハードウェア仮想マシン):KVMと同様にIntel VT-x/AMD-Vを使用し、パッチ未適用のOSも動作可能
- PVH:最も現代的なモード。両者の利点を組み合わせている——新しいLinuxゲストへの使用を推奨
XL Toolstack
XLはXen 4.xからのデフォルトtoolstackで、古いxmの後継だ。バックエンドにlibxlとxenstoreを使用し、構文がシンプルで、xendのようなバックグラウンドデーモンも不要。
Debian/UbuntuへのXenのインストール
事前要件の確認
開始前に三つのことを確認しておく:CPUがIntel VT-xまたはAMD-Vに対応しているか、RAMが少なくとも4GB以上あるか(Dom0が約2GB必要なため8GB以上が快適)、そして使用中のディストリビューションがDebian 11/12またはUbuntu 22.04/24.04かどうかだ。
# 仮想化対応CPUの確認
egrep -c '(vmx|svm)' /proc/cpuinfo
# 0より大きい数値が出ればCPUは条件を満たしている
Xen HypervisorとDom0カーネルのインストール
sudo apt update && sudo apt upgrade -y
# このパッケージ一つで:hypervisor + Dom0カーネル + xl toolstackが一括インストールされる
sudo apt install -y xen-system-amd64
# reboot後、Xenが起動していることを確認
xl info | grep xen_version
コマンド一つで三つすべてが揃う:xen-hypervisor-*がメインhypervisor、linux-image-*-amd64-xenが特別なDom0カーネル、そしてxen-utils-*がxl toolstackと付属ツールをまとめたものだ。個別に手動でインストールする必要はない。
GRUBが正しくXenを起動するよう設定する
# GRUBのXenエントリを確認——正確なエントリ名を控えておく
grep -i xen /boot/grub/grub.cfg | grep menuentry
# Xenをデフォルトに設定(上の出力に合わせてエントリ名を変更)
sudo sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT="Xen 4.17-amd64"/' /etc/default/grub
sudo update-grub
sudo reboot
Dom0の設定と最初の仮想マシン作成
Dom0のRAM制限——重要なポイント
これは初心者がよく見落とすポイントだ:Dom0はデフォルトでRAMをすべて使用してしまい、DomU用の空きがなくなる。制限が必要だ:
sudo nano /etc/default/grub
# このファイルにこの行を追加する
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=2048M,max:2048M"
sudo update-grub
sudo reboot
# Dom0が2GBのみ使用していることを確認
xl info | grep free_memory
DomU用のネットワークブリッジ設定
sudo apt install -y bridge-utils
sudo nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
sudo systemctl restart networking
brctl show # bridge xenbr0が作成されたことを確認
XL設定ファイルで最初のDomUを作成する
sudo mkdir -p /etc/xen/vms /var/lib/xen/images
# 20GBのディスクイメージを作成(sparse形式で実際の容量を節約)
sudo apt install -y qemu-utils
sudo qemu-img create -f raw /var/lib/xen/images/debian-test.img 20G
# DomUの設定ファイルを作成する
sudo nano /etc/xen/vms/debian-test.cfg
# /etc/xen/vms/debian-test.cfg
name = "debian-test"
type = "pvh" # PVHモード——最も現代的で効率的
memory = 1024 # MB
vcpus = 2
disk = ['file:/var/lib/xen/images/debian-test.img,xvda,w']
vif = ['bridge=xenbr0']
kernel = "/boot/vmlinuz"
ramdisk = "/boot/initrd.img"
extra = "root=/dev/xvda1 ro console=hvc0"
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
PVH/PVモードを使う際の二つの注意点:一つ目は、kernelとramdiskのパスはDom0上のファイルを指しており、ゲストイメージの内部ではない点だ。初回はこのバグのデバッグに1時間以上かかった。二つ目は、ディスクイメージには事前にOSをインストールしておく必要がある(debootstrapを使うか、既存のイメージからコピーする)——この.cfgファイルはインストール済みのゲストを起動するためのものであり、新規インストール用ではない。
XLを使った日常的なVM管理
# 設定ファイルからDomUを起動
xl create /etc/xen/vms/debian-test.cfg
# 実行中のすべてのドメインを表示(Dom0は常にdomain 0)
xl list
# DomUのコンソールに接続——Ctrl+]で終了
xl console debian-test
# リアルタイム統計(topコマンドのXenドメイン版)
xl top
# グレースフルシャットダウン(ACPIシグナルを送信)
xl shutdown debian-test
# 即時強制終了
xl destroy debian-test
CPUとメモリのホットプラグ——Xenの面白い機能
実行中のDomUのリソースをrebootなしで変更できる——これがXenで一番気に入っている機能だ:
# 実行中のドメインのvCPUを2から4に増やす
xl vcpu-set debian-test 4
# メモリを2GBに増やす(ゲストにballoon driverのインストールが必要)
xl mem-set debian-test 2048
# 現在のvCPU割り当てを表示
xl vcpu-list
raw imageの代わりにLVMを使う——本番環境でのベストプラクティス
raw imageはラボには便利だ。しかしsnapshotが必要な場合——本番環境では常に必要——LVMに切り替えるべきだ:
# DomU用の20GBのLogical Volumeを作成
sudo lvcreate -L 20G -n debian-test vg0
# .cfgのdisk行を変更する
# disk = ['phy:/dev/vg0/debian-test,xvda,w']
# システム更新前にLVのスナップショットを作成
sudo lvcreate -L 2G -s -n debian-test-snap /dev/vg0/debian-test
基本的なトラブルシューティング
# Xen hypervisorのログを表示
sudo xl dmesg | tail -50
# xenstoreを確認
sudo xenstore-ls /local/domain/
# DomU用の空きメモリを表示
xl info | grep free_memory
# xendomains serviceのsystemdログ
sudo journalctl -u xendomains --since "1 hour ago"
まとめ:Xenは学ぶ価値があるか?
正直なところ、自分は今でも毎日Proxmoxを使っている。12台のVMを管理するなら、そのWeb UIに代わるものはない。しかし、Xenと向き合った一週間は、Proxmoxのダッシュボードを何ヶ月もクリックし続けるよりも多くのことを教えてくれた。Xenが明らかに優れているユースケースもある:
- セキュリティリサーチと厳格なisolation:Dom0/DomUの分離は多くのセキュリティ研究の標準だ
- クラウドインフラ:Xenを理解することで、クラウドプロバイダーがどのようにインフラを構築するかを理解できる
- 確定的レイテンシ:Linuxカーネルよりも薄いhypervisorレイヤー——レイテンシに敏感なワークロードで重要
Debian 12でゼロからDomUを動かせるまで約30〜60分かかる。XL toolstackはほとんどの用途に十分対応できる。LVM snapshotと組み合わせれば本番環境でも使える。ツールを使うだけでなく、アーキテクチャの観点から仮想化を学んでいるなら——Xenは週末一つ使って試す価値がある。

