Ubuntu 交换空间在 Xen 环境中的使用方式
在 Xen 环境中,Ubuntu 客户机的交换空间(swap)与物理机一样由客户机内核管理,但交换设备的来源可以是 Dom0 提供的虚拟磁盘、LVM 逻辑卷,或客户机内部磁盘分区。常见做法是在创建客户机时为 swap 单独准备一块磁盘镜像或 LVM 卷,并在客户机内将其格式化为 swap 并启用。Xen 负责管理这些虚拟磁盘的呈现与连接,客户机看到的只是普通的块设备(如 /dev/sda2)。
配置与使用步骤
- 准备交换设备
- 基于镜像文件:在 Dom0 创建交换镜像
- dd if=/dev/zero of=/var/lib/xen/images/ubuntu-swap.img bs=1M count=2048
- mkswap /var/lib/xen/images/ubuntu-swap.img
- 基于 LVM:在 Dom0 创建逻辑卷
- lvcreate -L 2G -n ubuntu-swap vg0
- 编辑客户机配置(xl.cfg 示例)
- 使用文件镜像:
- disk = [ ‘file:/var/lib/xen/images/ubuntu-root.img,xvda,w’, ‘file:/var/lib/xen/images/ubuntu-swap.img,xvdb,w’ ]
- 使用 LVM:
- disk = [ ‘phy:/dev/vg0/ubuntu-root,xvda,w’, ‘phy:/dev/vg0/ubuntu-swap,xvdb,w’ ]
- 说明:xvda/xvdb 为客户机内看到的虚拟磁盘名,交换分区通常映射为 xvdb(也可为 sda/sdb,取决于配置)。内存参数(如 memory=1024)在 xl.cfg 中设置,交换大小不受此值限制。
- 在客户机内启用交换
- 获取交换分区设备名(示例为 /dev/xvdb;如为 sda2 则替换为 /dev/sda2)
- mkswap /dev/xvdb
- swapon /dev/xvdb
- 持久化:在 /etc/fstab 添加
- /dev/xvdb none swap sw 0 0
- 启动与验证
- xl create -c ubuntu.cfg
- 在客户机内执行:swapon --show 或 free -m,确认 swap 已启用且大小符合预期。
不同存储后端的要点
- 镜像文件:部署简单、迁移方便;适合测试与中小规模部署。
- LVM:性能好、易于在线扩容;适合生产环境。
- 物理分区:性能最佳,但灵活性差,扩容不便。
- 以上三种方式在 Xen 配置中都通过 disk= 指定,客户机内统一作为块设备使用,无感知差异。
常见问题与排查
- 客户机看不到交换设备:检查 xl.cfg 中 disk= 的顺序与总线类型(xvda/xvdb),启动后用 lsblk/fdisk -l 确认设备名,再执行 mkswap/swapon。
- 已启用但 swapon 失败:确认镜像或 LV 未同时被挂载为文件系统;必要时用 swapoff、重新 mkswap 后再 swapon。
- 性能与稳定性:避免将 swap 放在 Dom0 的 NFS 上;优先使用本地磁盘、LVM 或高速镜像后端。
- 动态扩容思路:对镜像/LV 扩容后,需在客户机内扩展分区(如 parted/resize2fs 对根分区),对 swap 则重建(mkswap 新大小后 swapon)。
关于 Dom0 的 swap
Dom0 自身也需要适量 swap(通常 1–2 GB 起步,视内存与工作负载而定),其配置与普通 Linux 相同(/etc/fstab + swapon),与 Xen 无关。Xen 管理工具(如 xl)仅负责客户机生命周期与虚拟设备,不参与 Dom0 的 swap 管理。