Debian/UbuntuへのXen Hypervisorのインストールと設定:XL ToolstackとDom0によるType-1仮想化

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

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の後継だ。バックエンドにlibxlxenstoreを使用し、構文がシンプルで、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モードを使う際の二つの注意点:一つ目は、kernelramdiskのパスは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は週末一つ使って試す価値がある。

Share: