在 CentOS 上安装和配置 Xen

现在实验室 Masters 都配有1台 PC 和 1台笔记本,但是 Honours 只配有1台 PC,1台机器做项目很不方便,开发经常会用到多系统,比如有的人做的是手机 VoIP 的相关项目,手机客户端界面要在 Windows 平台上做,VoIP 服务器端要用到 Linux,所以要用虚拟机虚拟一个 Linux 出来,如果这些都跑在一台物理机器上会很慢。现在给 Honours 配置的 PC 只有 1G 的内存,如果运行 Windows + 手机模拟器 + Elipse IDE(需要 Java)+ VMware(VMware 上再跑个 Linux + Asterisk + MySQL),然后开个客户端收邮件、开几个浏览器看资料就会很困难。

所以 VPSee 打算把自己在用的1台 SUN 服务器捐出来做成 Xen 服务器,给每个 Honours 分一个虚拟系统,省下他们自己装虚拟机的时间和资源,VPSee 成了免费的 Xen VPS provider 了:)。SUN 服务器上同时运行16个 Xen 虚拟系统实例,每个配 256 MB 内存,4GB 硬盘,不开 GUI。下面的安装步骤和配置过程是基于 CentOS 5.3 版本,Ubuntu 版本可以参看:在 Ubuntu 上安装和配置 Xen,Debian 版本参看:在 Debian 上安装和配置 Xen,OpenSolaris 版本参看:在 OpenSolaris 上安装和配置 Xen,NetBSD 版本参看:在 NetBSD 上安装和配置 Xen. 对 OpenVZ 和 KVM 感兴趣的童鞋可以看:在 CentOS 上安装和配置 OpenVZ在 CentOS 上安装和配置 KVM.

安装 Xen

安装支持 Xen 的 Linux 内核 和 Xen:

# yum install kernel-xen xen

安装成功后,可以看到 xen.gz-2.6.18-128.2.1.el5 内核已经装好,修改 default 的值默认启动 Xen 内核。

# vi /etc/grub.conf 

default=0
timeout=2
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.2.1.el5xen)
	root (hd0,0)
	kernel /xen.gz-2.6.18-128.2.1.el5
	module /vmlinuz-2.6.18-128.2.1.el5xen ro root=/dev/VolGroup00/LogVol00
	module /initrd-2.6.18-128.2.1.el5xen.img
title CentOS (2.6.18-128.1.16.el5)
	root (hd0,0)
	kernel /vmlinuz-2.6.18-128.1.16.el5 ro root=/dev/VolGroup00/LogVol00
	initrd /initrd-2.6.18-128.1.16.el5.img


重启系统后检查一下是否是 Xen 的内核:

# uname -r
2.6.18-128.2.1.el5xen

再检查一下 Xen 是否已经启动:

# /usr/sbin/xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1220     2 r-----   3214.1

创建和安装 guest

如果把正在运行的 Xen 内核的操作系统看成 host 的话,那么运行在 host 上面的操作系统就可以看成 guest。先建一个目录用来存放所有的 guest 操作系统的 image,vm01.img,vm02.img,等等,1个 guest 对应1个 image。

# mkdir /vm
# cd /vm

# virt-install

What is the name of your virtual machine? <-- vm01
How much RAM should be allocated (in megabytes)? <-- 256
What would you like to use as the disk (path)? <-- /vm/vm01.img
How large would you like the disk (/vm/vm01.img) to be (in gigabytes)? <-- 4
Would you like to enable graphics support? (yes or no) <-- no
What is the install location? <-- http://127.0.0.1/centos

或者可以把上面简化成1条命令:

# virt-install -n vm01 -r 256 -f /vm/vm01.img -s 4 --nographics -p 
-l http://127.0.0.1/centos

需要注意的是上面如果是 -p(paravirtualized)的话就不能直接从 iso 文件安装,必须把 iso 文件解出来后放到一个 http/ftp 服务器上安装,只有 fully virtualized 的才可以从 iso 文件、CD-ROM 等安装。还要注意的是,paravirtualized 需要修改过的操作系统内核,所以不能安装 Windows, fully virtualized 可以用来安装 Windows 只要 CPU 支持 Virtualization(Intel VT or AMD V)。所以这里需要先安装和配置一个 web 服务器,然后把 iso 文件解压到 web 服务器能访问的目录下(http://127.0.0.1/centos)。如果网速够快,可以从 Internet 上直接安装,把 http://127.0.0.1/centos 换成 http://mirrors.kernel.org/centos/5.3/os/i386

按照 CentOS 的安装程序完成 CentOS 操作系统(guest)的安装后,看看 guest 的配置文件:

# cat /etc/xen/vm01 
name = "vm01"
uuid = "b4910b6d-b205-6f86-c145-3c0895cb20c5"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [  ]
disk = [ "tap:aio:/vm/vm01.img,xvda,w" ]
vif = [ "mac=00:16:d2:0a:66:6d,bridge=xenbr0" ]

看看 guest 是否启动:

# /usr/sbin/xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1220     2 r-----   4691.3
vm01                                       9      255     1 -b----      16.9

进入 guest

安装成功后就可以登录 guest 了,

# /usr/sbin/xm console vm01

如果要退出 guest 的话,用 Ctrl + ],就会回到 host。

如果想每次启动 host 时自动启动 guest 的话:

# ln -s /etc/xen/vm01 /etc/xen/auto

更懒的办法

如果觉得安装 guest 操作系统太麻烦,可以到 http://stacklet.com/ 下载一个已经装好的镜像文件,然后在 host 下启动 guest 镜像就可以了。下载和启动 Ubuntu 9.04 的镜像:

# wget http://stacklet.com/sites/default/files/ubuntu/
ubuntu.9-04.x86.20090514.img.tar.bz2

# tar jxvf ubuntu.9-04.x86.20090514.img.tar.bz2
# mv ubuntu.9-04.x86.xen3.pygrub.cfg /etc/xen/ubuntu.9-04.cfg
# mv ubuntu.9-04.x86.img /vm/ubuntu.9-04.img

# /usr/sbin/xm create -f ubuntu.9-04.cfg
# /usr/sbin/xm list
# /usr/sbin/xm console ubuntu.9-04

从 http://stacklet.com/ 下载的镜像文件的初始用户名和密码为:root/password

增加 swap

如果是从 http://stacklet.com/ 下载的操作系统镜像,可能没有设置 swap,需要自己添加 swap 分区,可以做个 swap 镜像文件当作 swap 分区用。Xen 与 OpenVZ 相比有个好处就是 Xen 可以有自己的 swap 分区,甚至 guest 可以自己设置 swap. 先建个 512MB(524288B,1GB = 1048576B)大小的文件,转化成 swap 格式:

# dd if=/dev/zero of=ubuntu.9-04.swap bs=1024 count=524288

# /sbin/mkswap ubuntu.9-04.swap

修改 /etc/xen/ubuntu.9-04,修改 disk 这一行:

# vi /etc/xen/ubuntu.9-04.cfg
disk = ['file:/vm/ubuntu.9-04.img,sda1,w','file:/vm/ubuntu.9-04.swap,sda2,w']

启动 guest 系统,登录后修改 /etc/fstab,重启后用 top 看看 Swap 分区有没有被激活:

# vi /etc/fstab
/dev/sda2            swap          swap     defaults,noatime           0 0

# shutdown -r now

# top
...
Mem:    262284k total,    46480k used,   215804k free,     3176k buffers
Swap:   524280k total,        0k used,   524280k free,    17196k cached

常用 Xen 命令

xm create -c /path/to/config - Start a virtual machine.
xm shutdown - Stop a virtual machine.
xm destroy - Stop a virtual machine immediately without shutting it down. It's as if you switch off the power button.
xm list - List all running systems.
xm console - Log in on a virtual machine.
xm help - List of all commands.

评论 (65 Comments)

  1. 如果在有一个模板img文件的情况下,如何批量创建虚拟机呢?指点我一下或者告诉我点技术关键词也可以。

  2. @李保银
    如何快速创建 Xen 虚拟机镜像

  3. 我想请问下博主,为什么我使用virt-install -n vm1 -r 512 –vcpus=1 -f /data/vm/centos.img -s 10 -p -l http://mirrors.163.com/centos/5.8/os/i386 –nographics这条命令,老是报Unable to retrieve:http://mirrors.163.com/centos/5.8/os/i386/images/stage2.img呢? 谢谢了

  4. @rocdk890 163已经米有5.8的安装源了

  5. 博主,按照您的方法安装了,但是安装完后guest没启动,怎么办呢

  6. xen虚机是否支持qcow2的文件镜像呢?如果不能xen虚机如何做快照等?

  7. @李保银
    支持 qcow2. 快照可以用 lvm snapshot.

  8. 您好,我在CentOS下源码安装xen-4.1.2,一切正常,但是virt-manager用不了。我看了网上的帖子后,重新编译virt-manager源码,但是总是在
    rpmbuild -bb libvirt.spec 时
    出现这个错误:
    error: Failed build dependencies:
    /usr/sbin/qcow-create is needed by libvirt-0.8.1-27.el6.i686

    请问如何解决~谢谢!

  9. 我最近遇到了一个问题,我需要定制domU的内核。目前我已经成功的在centos5.5(64位)上用源码安装了xen-3.4.2,并且在上面启动了centos5.5(32位)的虚拟机,目前由于实验的关系,我需要改动domU的内核,就涉及到重新编译domU内核的问题。我在官网上下载了linux-2.6.18-xen-3.4.0.tar.gz,并且利用该文件夹里面/buildconfigs里面提供的linux-defconfig_xenU_x86_32文件成功的在虚拟机里面编译和安装了domU的内核,并修改了grub文件,但是在启动的时候就无法启动,而且virt-manager上面只提供了一行提示:Guest not running,我不明白是为什么,更想知道如何实现我的目的?谢谢您。
    补充:而且我利用virt-manager安装了虚拟机之后(例如名字叫vm01),在/etc/xen下面也没有看到 vm01.cfg文件,我看到网上也提到了xen里面的pygrub引导工具,也不知道如何使用,对我想达到的目的有没有帮助。

  10. @Bill
    不要用 virt-manater,用 xm create 试试,然后看看日志的出错信息是什么。。。

  11. 有个奇怪的问题,在rhel5和centos5上安装了xen虚拟化环境,但是不知道为什么启用了xen内核之后物理机网络就不通了,与5楼的那位现象相似,但是我这边eth0网卡的mac地址正确,peth0和xenbr0的mac地址是FE:FF:FF:FF:FF:FF。重启使用原来的内核网络就没有问题了。
    我是在vmware workstation 10上面进行安装测试的,没有物理服务器。
    不知道会是什么原因导致的呢?

  12. @demo_guan
    是正常的,xend 启动后会重新配置网络接口,请看8楼的解释。

  13. 感谢你抽时间回复我!
    如果按照8楼所说的话,实际上和外部通讯还是使用看到的eth0网卡,但是这张网卡实际上又只是veth0网卡来的?
    但是在virtualbox上面装一台rhel5再安装xen就没有出现网络不通的情况,eth0的ip、gateway、dns情况都和在VMware workstation上装的机器一样。
    就是说,在virtualbox和workstation上面安装出来的效果一样,但是virtualbox的xen机器网络能通而workstation的xen机器网络不通。

  14. 博主你好,按照你的方法,我在centOS6.3下yum安装kvm一直都是任何源都找不到包啊

  15. @czman
    # yum update
    # yum groupinstall “Virtualisation Tools” “Virtualization Platform”

发表评论