Cài đặt và cấu hình Xen Hypervisor trên Debian/Ubuntu: Ảo hóa Type-1 với XL Toolstack và Dom0

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

Tại sao thử Xen khi đã có KVM và Proxmox?

Mình chạy homelab với Proxmox VE quản lý 12 VM và container — đây là playground để test mọi thứ trước khi đưa lên production. Proxmox ngon, web UI tiện, nhưng có lúc mình cần hiểu sâu hơn về kiến trúc ảo hóa “thực sự” — và đó là lúc Xen Hypervisor vào cuộc.

Về kiến trúc: Xen chạy thẳng trên phần cứng như một Type-1 hypervisor — không cần Linux kernel làm host. Linux kernel của bạn thay vào đó chạy trong Dom0, một domain đặc quyền có quyền truy cập hardware và điều phối các VM khác. AWS EC2 đã xây cả thế hệ đầu (2006–2017) trên nền Xen trước khi chuyển sang Nitro — nên isolation model này không chỉ là lý thuyết.

Khái niệm cốt lõi cần nắm trước

Dom0, DomU và Xen Hypervisor

  • Xen Hypervisor: Layer mỏng nằm giữa phần cứng và mọi domain — đây mới là “hypervisor thực sự”
  • Dom0 (Domain-0): VM đặc quyền, chạy Linux kernel có module xen, quản lý hardware driver và điều phối DomU
  • DomU (Domain-U): Máy ảo thông thường, chạy song song với Dom0, không có quyền truy cập trực tiếp hardware

PV, HVM và PVH

  • PV (Paravirtualization): Guest kernel được patch để giao tiếp trực tiếp với Xen — hiệu năng cao, nhưng cần kernel hỗ trợ
  • HVM (Hardware Virtual Machine): Dùng Intel VT-x/AMD-V như KVM, chạy được OS chưa được patch
  • PVH: Mode hiện đại nhất, kết hợp điểm tốt của cả hai — khuyến nghị dùng cho guest Linux mới

XL Toolstack

XL là toolstack mặc định từ Xen 4.x, thay thế xm cũ. Nó dùng libxlxenstore làm backend — cú pháp đơn giản, không cần daemon nền như xend.

Cài đặt Xen trên Debian/Ubuntu

Kiểm tra yêu cầu trước

Kiểm tra ba thứ trước khi bắt đầu: CPU có Intel VT-x hoặc AMD-V chưa, RAM có ít nhất 4GB không (8GB+ thoải mái hơn vì Dom0 cần ~2GB riêng), và distro đang chạy là Debian 11/12 hoặc Ubuntu 22.04/24.04 chưa.

# Kiểm tra CPU hỗ trợ virtualization
egrep -c '(vmx|svm)' /proc/cpuinfo
# Nếu ra số > 0 là CPU đủ điều kiện

Cài Xen Hypervisor và Dom0 kernel

sudo apt update && sudo apt upgrade -y

# Gói này cài đồng thời: hypervisor + Dom0 kernel + xl toolstack
sudo apt install -y xen-system-amd64

# Sau reboot, xác nhận Xen đang chạy
xl info | grep xen_version

Một lệnh kéo về đủ cả ba thứ: xen-hypervisor-* là hypervisor chính, linux-image-*-amd64-xen là kernel Dom0 đặc biệt, và xen-utils-* gộp xl toolstack cùng các công cụ đi kèm. Không cần cài thủ công từng gói.

Đảm bảo GRUB boot đúng vào Xen

# Kiểm tra entry Xen trong GRUB — ghi lại tên entry chính xác
grep -i xen /boot/grub/grub.cfg | grep menuentry

# Đặt Xen làm default (thay tên entry khớp với output ở trên)
sudo sed -i 's/GRUB_DEFAULT=.*/GRUB_DEFAULT="Xen 4.17-amd64"/' /etc/default/grub
sudo update-grub
sudo reboot

Cấu hình Dom0 và tạo máy ảo đầu tiên

Giới hạn RAM cho Dom0 — mẹo quan trọng

Đây là điểm nhiều người mới bỏ qua: Dom0 mặc định sẽ dùng hết RAM, không còn chỗ cho DomU. Phải giới hạn lại:

sudo nano /etc/default/grub
# Thêm dòng này vào file
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=2048M,max:2048M"
sudo update-grub
sudo reboot

# Xác nhận Dom0 chỉ dùng 2GB
xl info | grep free_memory

Cấu hình network bridge cho 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    # Xác nhận bridge xenbr0 đã tạo

Tạo DomU đầu tiên với file cấu hình XL

sudo mkdir -p /etc/xen/vms /var/lib/xen/images

# Tạo disk image 20GB (sparse, tiết kiệm dung lượng thực)
sudo apt install -y qemu-utils
sudo qemu-img create -f raw /var/lib/xen/images/debian-test.img 20G

# Viết file cấu hình cho DomU
sudo nano /etc/xen/vms/debian-test.cfg
# /etc/xen/vms/debian-test.cfg
name        = "debian-test"
type        = "pvh"           # PVH mode — hiện đại và hiệu quả nhất
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'

Hai lưu ý khi dùng PVH/PV mode: Thứ nhất, đường dẫn kernelramdisk trỏ tới file trên Dom0, không phải bên trong guest image. Mình đã mất hơn tiếng debug lỗi này lần đầu. Thứ hai, disk image cần được cài OS trước (dùng debootstrap hoặc copy từ image có sẵn) — file .cfg này dùng để boot guest đã cài xong, không phải để cài mới.

Quản lý VM hàng ngày với XL

# Boot DomU từ file cấu hình
xl create /etc/xen/vms/debian-test.cfg

# Xem tất cả domain đang chạy (Dom0 luôn là domain 0)
xl list

# Kết nối console vào DomU — thoát bằng Ctrl+]
xl console debian-test

# Thống kê realtime (giống top nhưng cho Xen domain)
xl top

# Graceful shutdown (gửi ACPI signal)
xl shutdown debian-test

# Force kill ngay lập tức
xl destroy debian-test

Hot-plug CPU và Memory — tính năng thú vị của Xen

Thay đổi tài nguyên cho DomU đang chạy mà không cần reboot — đây là thứ mình thích nhất ở Xen:

# Tăng vCPU từ 2 lên 4 cho domain đang chạy
xl vcpu-set debian-test 4

# Tăng memory lên 2GB (guest cần cài balloon driver)
xl mem-set debian-test 2048

# Xem phân bổ vCPU hiện tại
xl vcpu-list

Dùng LVM thay raw image — best practice cho production

Raw image tiện cho lab. Nhưng nếu cần snapshot — và trong production thì luôn cần — chuyển sang LVM:

# Tạo Logical Volume 20GB cho DomU
sudo lvcreate -L 20G -n debian-test vg0

# Sửa dòng disk trong .cfg
# disk = ['phy:/dev/vg0/debian-test,xvda,w']

# Snapshot LV trước khi update hệ thống
sudo lvcreate -L 2G -s -n debian-test-snap /dev/vg0/debian-test

Troubleshooting cơ bản

# Xem log Xen hypervisor
sudo xl dmesg | tail -50

# Kiểm tra xenstore
sudo xenstore-ls /local/domain/

# Xem memory còn trống cho DomU
xl info | grep free_memory

# Log systemd cho xendomains service
sudo journalctl -u xendomains --since "1 hour ago"

Kết luận: Xen có đáng học không?

Honest take: mình vẫn dùng Proxmox hàng ngày. Khi quản lý 12 VM thì web UI của nó không gì thay thế được. Nhưng một tuần ngồi với Xen dạy mình nhiều hơn nhiều tháng click-click trên Proxmox dashboard. Có những use case Xen vẫn thắng rõ:

  • Security research và isolation nghiêm ngặt: Dom0/DomU separation là tiêu chuẩn trong nhiều nghiên cứu bảo mật
  • Cloud infrastructure: Hiểu Xen giúp bạn hiểu cách các cloud provider xây dựng hạ tầng
  • Deterministic latency: Hypervisor layer mỏng hơn Linux kernel — quan trọng với workload nhạy cảm về thời gian

Từ zero đến có DomU chạy được mất khoảng 30–60 phút trên Debian 12. XL toolstack đủ dùng cho hầu hết việc. Kết hợp LVM snapshot thì production-ready. Nếu bạn đang học ảo hóa từ góc nhìn kiến trúc — không phải chỉ dùng tool — Xen là thứ đáng bỏ một cuối tuần ra để thử.

Share: