在CentOS(dom0)安装debian/ubuntu domU有多种方式:

  1. debootstrap

  2. virt-manager

  3. cowboy

在这里给大家演示后两种

说明:dom0环境为:CentOS5.7,xen的版本是3.1.2,redhat在该版本中增加了对grub2的支持

一、virt-manager

通过 virt-manager安装linux(hvm)很简单,就像在平常在物理机上安装linux一样,准备好iso镜像文件,再根据安装程序的提示,一步步操作就可以了。在安装的过程中,硬盘选择file backend,文件名为deb6-template,后面的步骤需要用到该镜像文件。

从官方网站下载的iso文件名为:debian-6.0.2.1-amd64-xfce+lxde-cd-1.iso,文件名太长了,在virt-manager中无法识别,因此需要修改文件名,譬如debian6-amd64.iso

二、cowboy

cowboy这个词来自《the book of xen》,我估计是因为这种方式比较粗野,所以作者用了cowboy这个词。这种方式的思路是直接打包一台domU的系统文件,然后解压到另一台domU的硬盘中。虽说办法是糙了一点,但是非常适合于命令行下操作,可以实现大规模部署。

2.1 创建模版

上面我们已经使用virt-manager安装了一台debian 6.0.2的源domU,接下来通过这个源domU先创建模版

$ sudo mount -o loop deb6-template.img /tmp/deb6-template
$ sudo chroot /tmp/deb6-template
$ sudo tar -cvpzf deb6.0.2-template.tar.gz --exclude=/deb6.0.2-template.tar.gz --exclude=/tmp --exclude=/lost+found --exclude=/media / --exclude=/mnt  /

假如没有chroot的话,命令应该是:

$ sudo tar -cvpzf deb6.0.2-template.tar.gz --exclude=./deb6.0.2-template.tar.gz --exclude=./tmp --exclude=./lost+found --exclude=./media --exclude=./mnt  /
网上很多文档都说在创建模版的时候要exclude掉/sys/proc这两个目录,因为在系统运行的状态下,这两个目录含有一些临时文件,但是这些文档只说了一半,解压后到domU存储后,还要记得创建这两个目录,否则,系统运行会出错。另外,也可以将源domU关机,然后打包,因为关机后,domU中这两个目录是空的。

2.2 准备目标domU存储

在这里,我们选择镜像文件作为参考,读者也可以选择lvm作为目标domU的存储。

$ sudo dd if=/dev/zero of=/staff/domU/deb6-1.img bs=1000 count=2000K
$ sudo parted /staff/domU/deb6-1.img mklabel msdos
$ sudo parted /staff/domU/deb6-1.img mkpartfs primary ext2 0 1536
$ sudo parted /staff/domU/deb6-1.img mkpart extend 1537 2048
$ sudo parted /staff/domU/deb6-1.img mkpartfs logical linux-swap 1537 2048

以上命令是创建一个镜像文件,然后对其分区,先创建主分区,接着是扩展,然后是逻辑分区,swap分区位于逻辑分区。

$ sudo parted deb6-1.img
>set 1 boot on
>quit

这个步骤是为了将主分区置为boot,实际上这个步骤是多余的,即使primary不是boot flag也能启动。

2.3 转换分区文件系统

大家有没有注意到上面的步骤中,分区类型是ext2,这是因为CentOS5.7的parted版本为1.8.1,只支持ext2,最新的parted版本是3.03倒是支持ext3,然而没有for centos5.7的rpm,所以我们还需要将ext2手工转换成ext3。
$ sudo kpartx -p "" -av /staff/domU/deb6-1.img

将在/dev/mapper/下生成loopX1和loopX5两个device map,其中loopX1是primary分区,loopX5是swap分区

tune2fs -j /dev/mapper/loopX1

这样就将ext2转换成了ext3。

2.4 克隆

$ sudo mount /dev/mapper/loopX1 /tmp/deb6-1
$ sudo mount /dev/mapper/loopX1 /tmp/deb6-template
$ sudo cp -rfp /tmp/deb6-template/* /tmp/deb6-1/

将文件拷贝到新的domU中之后,要记得卸载分区

$ sudo umount /tmp/deb6-1
$ sudo umount /tmp/deb6-template
$ sudo kpartx -d /staff/domU/deb6-1.img
$ sudo kpartx -d /staff/domU/deb6-template.img

2.5 创建配置文件

$ sudo vim /etc/xen/deb6-hvm.cfg

import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'

kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
memory = 1024

# Should be at least 2KB per MB of domain memory, plus a few MB per vcpu.
shadow_memory = 8
name = 'deb6-hvm'
vif = [ 'type=ioemu, bridge=eth0' ]
#acpi = 1
#apic = 1
disk = [ 'file:/home/staff/vm.images/deb6-hvm.img,sda,w',
         'file:/home/chenr/software/debian-6.0.2.1-amd64.iso,ioemu:hdc:cdrom,r'
]

device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'

#-----------------------------------------------------------------------------
# boot on floppy (a), hard disk (c) or CD-ROM (d)
# default: hard disk, cd-rom, floppy
boot="c"
sdl=0
vnc=1
vncconsole=3
vncpasswd=''

serial='pty'
usbdevice='tablet'
#on_reboot="destroy"
#on_poweroff="destroy"
#on_shutdown="destroy"
on_crash="preserve"

需要注意的是,disk选项必须是:

disk = ["file:/staff/domU/deb6-hvm.img,sda,w"]

不能是

disk = ["tap:aio:/staff/domU/deb6-hvm.img,xvda,w"]

因为xen3.1.2不支持tap/xvda。

virt-manager是一种通用的安装方法,适合于安装全系列的linux/windows操作系统,不过不利于大规模部署,而cowboy的方式则适合于大规模、快速部署,跟virt-manager形成互补。