Chinaunix首页 | 论坛 | 博客
  • 博客访问: 624155
  • 博文数量: 104
  • 博客积分: 1968
  • 博客等级: 上尉
  • 技术积分: 1587
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-01 17:52
文章分类

全部博文(104)

文章存档

2013年(12)

2012年(50)

2011年(42)

分类: LINUX

2011-08-17 14:41:02

网上看到的一篇介绍xen比较全面的文章 


一、Xen的安装
源代码安装:
1、创建一个目录用于保存Xen源代码,并进入该目录。
mkdir ~/xen-source
cd ~/xen-source
2、Xen的源代码被保存在Mercurial版本修订控制库中,所以需要安装可以用于检查源代码的mercurial客户端。可以使用yum来安装mercurial。
yum install mercurial
然后使用mercurial客户端(hg)运行类似下面的命令来检验源代码:
hg clone
它将会在xen-source目录下面创建一个叫 xen-3.2-testing.hg 的目录并把源代码置于其中,现在我们就已经准备好编译Xen了。
在编译Xen前我们需要检查系统是否已经包含提供编译器、库文件和建立Xen开发环境需要的开发头文件包,下面是必须要安装的包:
gcc
glib-devel
libgomp
glibc-headers
ncurses-devel
openssl-devel
zlib-devel
xorg-X11-proto-devel
python-devel
tetex-latex
xen-devel
如果没有安装这些包,可以用yum安装:
yum install gcc glibc-devel xen-devel libgomp glibc-headers ncurses-devel openssl-devel zlib-devel xorg-X11-proto-devel python-devel tetex-latex
4、我们编译内核前的第一步是先配置它。我们一般使用缺省值,除非你要增加一些驱动或选项的支持,然后退出对话并保存修改。
make linux-2.6-xen0-config
5、编译内核和模块
make linux-2.6-xen0-build
6、上面的命令将会编译并生成大量的文件到dist/install目录
    在dist/install下的boot目录包含了用于Xen内核的配置文件、内核镜像文件和内核调试符号文件;
    在dist/install下的lib目录下包含了所有的内核模块和驱动;
7、使用root用户运行下面的命令来安装刚才生成的文件,它将安装内核模块并拷贝内核镜像和符号文件到/boot
make linux-2.6-xen0-install
8、运行depmod命令读取/lib/modules/2.6.**.**-xen0(用你所编译的内核版本替换**,下同)下的每个模块来创建一个模块依赖关系列表,并确定哪些符号是它输出的符号和哪些符号是必需的
depmod -a 2.6.**.**-xen0
9、在/boot目录创建启动的时候Xen内核需要用到的initrd文件,在xen-3.2-testing.hg目录下运行:
/sbin/mkinitrd  -v  -f  --with=sd_mod  --with=scsi_mod  /boot/initrd-2.6.**.**-xen0.img  2.6.**.**-xen0
编译并安装Xen工具、库文件和Python模块,但是在这样做之前必须确定没有Xen工具的二进制包已经安装
make install KERNELS="linux-2.6-xen0"
10、修改grub文件,增加启动新的Xen内核的入口
11、重启并进入新的Xen系统
12、确定所有的程序正常启动
13、检查网络接口以确定都已经启动并正常运行
到此你已经成功编译和安装开发版的Xen到你的机器上并正常运行了。
用yum安装xen:
相比源代码安装,yum使xen的安装变得轻而易举,步骤如下:
1、运行下面的命令安装xen内核和工具:
yum install kernel-xen xen
   这将下载并安装下面的包和它们的关联包:
kernel-xen:包含允许主机和客户机运行xen的内核,类似管理器
xen:包含与管理器交互的用户空间工具
bridge-untils:用于配置连接多个Ethernet设备的网桥
libvirt:提过使用Xen框架的API的C库
libvirt-python:包含一个让Python应用程序使用libvirt提供的xen框架的API的Python模块
python-virtinst:包含一个使用libvirt在虚拟机内部启动安装Fedora/Red Hat Enterprise Linux发布版本的Python模块
xen-libs:包含运行管理xen的应用程序所需的库
2、Xen内核在安装完后不会设置为缺省的启动项,需要修改/boot/grub/grub.conf,改变default=1为default=0
3、用xen内核重启系统
4、系统启动并运行后,检查正在运行的内核的版本以确定是否在运行Xen内核
5、xend-Xen控制daemon管理着域,可以用/etc/rc.d/init.d/xend脚本来启动和停止它,它在系统启动的时候默认是自动启动的。检查并确定xend是否正在运行,可以用下面的命令来搜索系统正在运行的进程的列表:
pidof xend
6、一旦xend运行,它将启动Domain0,这是个私有域。用xm命令检查domain0是否已经被创建并在运行。
xm list
7、检查网络接口是否已经起了,包括通常的网络接口如eth0和lo,分配给Xen的接口。在高于Fedora 7.0的版本中,名叫peth0的网络接口已经更名为eth0


二、Xen客户机的安装
<1>总体流程
1、选择存储介质--文件、分区、LVM等;
2、安装客户机操作系统文件到选择的存储介质,安装这些文件的机制可以是一个自举工具(例如debootstap),一个ISO镜像文件,一个cd-rom,甚至可以是一个包含了所有需要的文件的简单文件系统目录;
3、创建一个指定Xen创建子域时用到的参数的配置文件;
4、使用xm创建子域;
<2>物理地址扩展
   物理地址扩展(PAE)是一种为用户模式应用程序增加总体有效的物理或虚拟内存,使服务可以访问4GB以外的物理内存的技术。为达到此目的,PAE修改32位的寻址模式为64的寻址模式,因此操作系统或用户应用程序可以访问额外的物理内存。
   如果存在PAE的话那么linux内核和Xen管理器都将受益于它。能有效运行Xen的三张模式:
   *纯32位模式
   *带PAE的32位模式
   *纯64位模式
   在使用这些模式的时候有一些重点需要确定的:
   *当采用不完全虚拟时Xen管理器、dom0和domU必须运行在同一种模式下,混合使用不同的模式将导致错误;
   *当使用完全虚拟或硬件虚拟机(HVM)时上面的限制不会生效。但当前使用HVM需要Intel或AMD芯片支持这功能。
<3>编译一个domU内核
   我们使用上面下载的Xen源代码来创建domU内核
1、进入包含源代码的目录
   cd ~/xen-source
2、编译domU内核
   make linux-2.6-xenU-config
3、选择domU内核需要的选项,如果不确定,可以使用缺省选项,记得在退出时保存选项。
4、创建domU内核然后安装
   make linux-2.6-xenU-build
   make linux-2.6-xenU-install
5、为domU内核创建initrd
   mkinitrd -v -f --with=ide-disk --with=sd_mod --with=ide-generic --with=ext3 --with=scsi_mod /boot/initrd-2.6.**.**-xenU.img 2.6.**.**-xenU
6、现在我们已经有编译好的domU内核并且已经准备好,我们将使用它启动我们下一章将要创建的虚拟机。
<4>Xen域的内存
   在我们当前的配置中,dom0的内核处理所有在系统启动时候激活的内存,然后在domUs需要的时候分配给它们。当我们创建客户域的时候我们需要一种给我们创建的每个客户域提供内存的方法。Xen提供了一个在启动时侯简单指定dom0内核使用的内存值的参数。在你的基本系统里面修改/boot/grup/memu.lst,添加指定dom0内核可以使用的内存总值的参数。
   kernel /xen.gz noreboot dom0_mem=256M
<5>Pygrub
   在Xen里通常情况下我们都会在dom0的配置文件中指定内核和initrd,这也就意味着任何时候内核需要修改或改变的时候,你都需要有在dom0主机上的管理员权限来修改它。Redhat开发了一个类似grub的启动装载器叫Pygrub,它允许domU用户们使用grub一样的用户接口选取他们自己的内核。Xen在domUs启动前启动Pygrub,控制台用户可以在一个与grub--/grub/menu.lst在同一个配置文件中读取的菜单中选取一个内核启动,一旦用户选择了一个内核和initrd,控制权回到Xen上,Xen启动所选择的domU内核。

Time for Action--Bootstrapping an Ubuntu System
   
1、Ubuntu使用叫做debootstrap的debian工具来创建系统,当前它在Fedora中还未预置。我们将从Ubuntu Feisty下载最新版的debootstrap并安装到我们基于Fedora Core的系统中。由于它是deb格式的包,所以我们需要把它转换为适合安装在Fedora系统的格式。首先获取下面两个从属软件包并安装。
wget
wget
rpm –ivh –-nodeps deb-1.10.27-3.i586.rpm
rpm –ivh –-nodeps html2text-1.3.2a-3.i586.rpm
2、下载并安装用于把包从一种发布格式转换为另一种的alien。
wget
tar -zxvf alien_8.64.tar.gz
perl Makefile.PL
make PREFIX=/usr
make PREFIX=/usr install
3、从Ubuntu下载debootstrap,转换它为rpm格式并安装
wget
alien --to-rpm debootstrap_0.3.3.2ubuntu3_all.deb 
rpm -Uvh debootstrap-0.3.3.2-2.noarch.rpm
现在我们已经有了自举一个Ubuntu Feisty系统所需要的所有工具。
(当前debootstrap有源代码的版本,所以可以尝试用源代码编译,也就免去了前面的步骤中deb包到rpm包的转换了)
4、创建一个叫xen-images的目录,我们将把所有的客户镜像创建到这个目录。
mkdir ~/xen-images
你可以在本地文件、NFS系统、LVM组、或iSCSI存储里面创建虚拟机。
5、创建三个文件,一个用于存储根文件系统(/),一个用于/boot,另一个用于swap
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_domU.img bs=1G count=6
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_swap_domU.img bs=1G count=1
dd if=/dev/zero of=~/xen-images/ubuntu_feisty_boot_domU.img bs=1k count=1000
6、在根文件镜像上创建一个ext3的文件系统,这是/被挂载的镜像
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_domU.img
7、在启动文件镜像上创建一个ext3的文件系统并在swap文件上创建swap
/sbin/mkfs.ext3 ~/xen-images/ubuntu_feisty_boot_domU.img
/sbin/mkswap ~/xen-images/ubuntu_feisty_swap_domU.img
我们需要挂载这些文件到目录下面以对其进行读写操作
8、创建一个xen-mounts目录,我们将在里面创建挂载其他文件镜像的目录
mkdir -p ~/xen-mounts/ubuntu_feisty_domU
9、使用loop back挂载用于存储根文件系统的文件
 mount -o loop ~/xen-images/ubuntu_feisty_domU.img ~/xen-mounts/ubuntu_feisty_domU
10、运行debootstrap。他将下载并解压所有需要的到上面挂载的目录
/usr/sbin/debootstrap --arch i386 feisty ~/xen-mounts/ubuntu_feisty_domU  
11、我们将使用之前创建的domU内核来启动这个域,所以这个域将需要预编译了该内核需要的内核模块,从/lib/modules目录下面拷贝它们
mkdir -p ~/xen-mounts/ubuntu_feisty_domU/lib/modules
cp -dpR /lib/modules/2.6.**.**-xenU ~/xen-mounts/ubuntu_feisty_domU/lib/modules
12、chroot到新的系统并配置它
chroot ~/xen-mounts/ubuntu_feisty_domU
13、设置系统的主机名
echo "ubuntu_fesity_domU" > /etc/hostname
14、设置启动时候装载的文件
cat > /etc/fstab << "EOF"
# file system    mount point   type    options         dump pass
/dev/sda1         /             ext3    defaults         0    1
/dev/sda2         /boot         ext3    ro,nosuid,nodev  0    2
/dev/sda3         none          swap    sw               0    0
proc             /proc         proc    defaults          0    0
sys              /sys          sysfs   defaults          0    0
EOF
15、设置网络。我们将使用环回接口和eth0作为以太网的接口,eth0接口将使用DHCP自动设置。
cat > /etc/network/interfaces << "EOF"
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
EOF
16、增加一个用户,创建一个管理组,然后将新加的用户加入该组,同时设置root密码。
adduser kiro
addgroup --system admin
adduser kiro admin
passwd root
17、Ubuntu使用sudo来让用户执行管理函数,使用visudo编辑sudoers文件。
visudo
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
18、现在我们已经完成初始配置,退出chroot环境并卸载该文件系统。
exit
umount ~/xen-mounts/ubuntu_feisty-domU
19、创建一个dom0用来创建客户域的配置文件,MAC地址使用分配给Xen Source的MAC地址集中一个分支。这是一个组织唯一标识符,你可以查看专线的完整列表()
cat > ~/xen-images/ubuntu_feisty_domU.cfg << "EOF"
      kernel = "/boot/vmlinuz-2.6.**.**-xenU"
      memory = 256
      name = "ubuntu_feisty_domU"
      disk = ['tap:aio:/root/xen-images/ubuntu_feisty_domU.img,sda1,w','tap:aio:/root/xen-images/ubuntu_feisty_boot_domU.img,sda2,w','tap:aio:/root/xen-images/ubuntu_feisty_swap.img,sda3,w']
      vif = [ 'mac=00:16:3e:00:00:10, bridge=xenbr0' ]
      root = "/dev/sda1 ro"
   EOF
20、调用xm来创建一个虚拟机
xm create ~/xen-images/debian_etch_domU.cfg -c
这将打开一个控制台并启动我们全新的虚拟机。常见的linux启动信息将闪过然后你将看到Ubuntu Feisty的登录提示。欢迎来到你的第一个Xen domU。

Time for Action--Install NetBSD
NetBSD的发布提供了两种支持Xen的内核--一种用于运行安装,另一种用于运行NetBSD操作系统。
1、首先下载这些文件
wget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.1/i386/binary/kernel/netbsd-*XEN3_DOMU.gz
zcat netbsd-INSTALL_XEN3_DOMU.gz > /boot/netbsd-INSTALL_XEN3_DOMU
zcat netbsd-XEN3_DOMU.gz > /boot/netbsd-XEN3_DOMU
2、创建一个镜像文件用于存储我们的NetBSD客户域
 dd if=/dev/zero of=/home/pchaganti/xen-images/netbsd_domU.img bs=1M count=300
3、创建Xen配置文件用于启动NetBSD domU
cat > /root/xen-images/netbsd_domU.cfg << "EOF"
kernel = "/boot/netbsd-INSTALL_XEN3_DOMU"
memory = 64
name = "netbsd_domU"
disk = ['tap:aio:/root/xen-images/netbsd_domU.img,sda1,w', 'tap:aio:/root/xen-images/netbsd_swap.img,sda2,w']
vif = [ 'mac=00:16:3e:00:00:12, bridge=xenbr0' ]
EOF
4、用xm创建domU
xm create /root/xen-images/netbsd_domU.cfg -c
这将启动一个NetBSD控制台安装,选择安装选项以把NetBSD安装到硬盘。
5、参考NetBSD提供的安装指南完成安装
6、选择最小安装模式安装,因为我们刚才创建的镜像文件只有300M的空间,如果需要安装更多的包,我们应该在之前创建镜像文件的时候把空间加大。
7、安装完成后还有一些相关的配置需要做,所以先别重启,选择Utility menu--a: Run /bin/sh
8、复制用于NetBSD的专用设备文件
mount /dev/xbd0a /mnt
cp -pR /dev/rxbd* /mnt/dev
cp -pR /dev/xbd* /mnt/dev
9、NetBSD只为客户提供一个控制台,编辑/etc/ttys,关闭除控制台(console)以外的所有终端
console "/usr/libexec/getty Pc"         vt100   on  secure
ttyE0   "/usr/libexec/getty Pc"         vt220   off secure
ttyE1   "/usr/libexec/getty Pc"         vt220   off secure
ttyE2   "/usr/libexec/getty Pc"         vt220   off secure
ttyE3   "/usr/libexec/getty Pc"         vt220   off secure
10、在/etc/wscons.conf中注释掉所有的屏幕 
 #screen 0       -       vt100
 #screen 1       -       vt100
 #screen 2       -       vt100
 #screen 3       -       vt100
 #screen 4       -       -
 #screen 4       80x25bf vt100
11、关闭安装
 halt -p
12、修改域配置文件使用标准的NetBSD domU内核替换安装内核
kernel = "/boot/netbsd-XEN3_DOMU"
13、使用domU内核重启客户域
xm create /root/xen-images/netbsd_domU.cfg -c
Time for Action--Using qemu to Create a CentOS Image
我们将使用CentOS 4.4 服务器版的ISO镜像来安装CentOS
1、从离你最近的镜像站点下载ISO镜像
另外我们将使用vnc来连接到qemu的安装屏幕,如果你的系统没有它,你需要先安装一个VNC viewer(),大多数的发布版本都提供VNC支持然后安装好虚拟客户机安装过程中需要用到的qemu()。
2、创建一个用于安装的qemu文件镜像
qemu-img create centos_domU.img 2G
3、用下面的参数启动qemu来让它从CentOS服务器版安装cd启动
qemu -no-kqemu -hda /root/xen-images/centos_domU.img -cdrom /root/CentOS-4.4.ServerCD-i386.iso -boot d -vnc :2
4、根据上一步提供给qemu的选项,使用vncviewer连接查看显示细节
vncviewer 192.168.10.51:2
5、CentOS的安装屏幕将会如我们通常见到的那样出现,参考下面的文档手册完成CentOS的安装
6、当安装完成后,选择Reboot。这将关闭你的qemu会话并让你回到命令行提示符。现在我们已经完成吧CentOS安装到qemu镜像里面。需要注意的是这种通过qemu来处理的方式可能会非常慢。在我们为domU创建配置文件之前,我们需要挂载创建在qemu镜像里面的分区,以让Xen能够访问它们。首先把qemu镜像挂载在一个loopback设备上。
losetup /dev/loop1 /root/xen-images/centos_domU.img
7、列出镜像里面的分区。在接下来我们 尝试挂载这镜像里面的每个独立分区到分离的目录以让Xen在需要的时候能够访问这个信息。
fdisk -lu /dev/loop1
8、从loopback设备上卸载该镜像
losetup -d /dev/loop1
9、创建我们用于挂载qemu文件镜像的分区的目录
mkdir –p /root/xen-mounts/centos_domU/boot_partition
mkdir –p /root/xen-mounts/centos_domU/root_partition
10、挂载分区到各个目录
lomount -t ext3 -diskimage /root/xen-images/centos_domU.img -partition=1  /root/xen-mounts/centos_domU/boot_partitionmounts
11、拷贝内核模块到domU
cp -dpR /lib/modules/2.6.**.**-xenU /root/xen-mounts/centos_domU/root_partition/lib/modules/
12、chroot到domU分区并重命名包含库文件的目录
chroot /root/xen-mounts/centos_domU/root_partition /bin/bash
mv /lib/tls /lib/tls.disabled
13、创建一个启动CentOS domU的配置文件
cat > /root/xen-images/centos_domU.cfg << "EOF"
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
ramdisk = "/boot/initrd-2.6.16.38-xenU.img" 
memory = 256
name = "centos-domU"
disk = ['tap:aio:/dev/loop1,hda1,w','tap:aio:/dev/loop2,hda3,w']
vif = [ 'mac=00:16:3e:00:00:16, bridge=xenbr0' ]
root = "/dev/hda3 ro"
EOF
14、创建CentOS domU
xm create /root/xen-images/centos_domU.cfg -c

Time for Action—Utilize Xen Images from jailtime.org
我们接下来将要下载并安装完整的Slackware Xen镜像
1、从jailtime下载该镜像
wget %3Aslackware%3Aslackware.11-0.20061220.img.tar.bz2
2、解压这个文件到我们xen-images目录
tar -c /root/xen-images -jxvf  slackware.11-0.20061220.ig.tar.bz2
3、创建一个挂载此镜像的目录
mkdir -p /root/xen-mounts/slackware_domU
4、挂载这个镜像并复制用于domU内核的内核模块,完成复制后卸载镜像
mount -o loop /root/xen-images/slackware.11-0.img  /root/xen-mounts/slackware_domU
cp -dpR /lib/modules/2.6.**.**-xenU  /root/xen-mounts/slackware_domU/lib/modules/
umount /root/xen-mounts/slackware_domU/
5、修改domU的配置文件以适合我们的安装
kernel = "/boot/vmlinuz-2.6.**.**-xenU"
memory = 128
name = "slackware.11-0"
vif = [ 'mac=00:16:3e:00:00:14, bridge=xenbr0' ]
disk = ['tap:aio:/root/xen-images/slackware.11-0.img,sda1,w','tap:aio:/root/xen-images/slackware.swap,sda2,w']
root = "/dev/sda1 ro"
6、创建Slackware客户域
xm create /root/xen-images/slackware.11-0.xen3.cfg  -c
 
 
补充:Time for Action--在RH5.*上用virt-install安装RH5.*系统
首先在本机或其他机器建立一个web应用服务器,然后挂载rh5.1的dvd镜像,并设置web应用允许用户访问dvd镜像内的文件。
(我们这里假设在192.168.20.9上架设了web服务器,并把指到dvd镜像挂载的目录)
在运行xen的系统上执行以下命令创建放置镜像的目录:
mkdir -p /data/xen
执行以下命令开始启动一个xen客户机的安装:
virt-install -n rh5 -r 256 -s 4 --vcpus=1 -f /data/xen/rh5  --nographics -p -d -l "" 
新建立一个基于文件的虚拟机,256M内存,4G硬盘,1个CPU。
基于文件的虚拟机效率相对低下,安装标准的系统(1G左右)用了35分钟左右。
在xen的系统上运行以下命令:
virt-install -n rh5 -r 256 --vcpus=1 -f /dev/sda7  --nographics -p -d -l "" 
新建立一个基于分区的虚拟机,256M内存,1个CPU。
基于分区的虚拟机效率比文件的高许多,安装标准的系统(1G左右)只用了8分钟左右,选择的分区必须没有被host系统使用,如果该分区已经被mount到系统中,必须先umount该分区后进行安装,否则会报错。
内核文件放在/var/lib/xen目录
上述方法尝试安装rh4u6,rh5u1,rh5u2成功



三、Xen管理
* xm
Xen Domain Configuration Files
Xen域配置文件
Xen域的域配置文件指定管理域行为的多个参数。这些不同的配置Xen的文件放在/etc/xen目录下。以key=value格式保存着多个选项的配置文件是以python写的可执行文件,所以各选项必须是合法的python代码。/etc/xen/xend-config.sxp指定用于创建dom0的配置文件。
如果你在创建域的时候提供绝对路径的话你可以把创建domUs的配置文件放在任何地方。/etc/xen/auto是一个特殊目录,所有放置在里面的域配置文件对应的域都会在xend监听程序启动的时候被自动启动。
下面是一些在Xen域配置文件中要配置的常用的选项:
* kernel:用于域的内核镜像,提供到内核镜像文件的绝对路径
* ramdisk:指定给域的初始ramdisk。如果你的内核有用于你的根文件系统和硬盘的内置驱动,可能你不需要创建和指定ramdisk。此配置提供到initrd文件位置的完整路径
* memory:指定分配给域的总体内存容量,以MB为单位。如果分配的内存不足将阻止域的启动。你还必须确定Xen管理的总内存--包含dom0和所有的domUs--必须少于或等于安装在你的机器上面的物理内存总量。
* name:提供一个识别域的唯一的名称。这名称将会在你列出系统里正在运行的域的时候被显示。
* root:指定用于域的根设备
* disk:指定输出到域的块设备列表。它以如下格式提供:
  disk = [ "backend device", "frontend device", "mode" ]
  “backend device”指定输出到客户域的设备的格式和名称。格式可以是一个简单的文件镜像或一个实际的物理磁盘。Xen把输出到客户域的文件镜像认作是基于文件的VBD。因为这是开始Xen最简单而且快捷的方式,所以我们这章将选用此格式。
     file://path_to_the_file_image:文件镜像以loopback设备的形式输出。loopback设备的设置将由Xen管理。
     tap:aio:/path_to_the_file_image:文件镜像以能够被Xen的blktap驱动访问的tap设备的形式输出。在Xen文档中推荐以这种方式输出文件镜像到客户域。
     phy:device:/name_of_the_device:输出到客户域的特定物理设备。此设备可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定--0x301
   “frontend device”指定输出的backend device如何出现在客户域中。它可以用通常的/dev/sda1的形式或使用该设备的16进制主要/次要号码(hex major/minor number)来指定--0x301
   “mode”指定设备是以只读还是可读写的形式输出。两个合法的选项是:
 r -- read-only
 rw -- read and write
* vif:指定域的虚拟网络接口配置。以如下的格式指定:
 vif = [ "key1 = value1", "key2 = value2" ]
  配置该指令的常用的选项是:
 bridge:指定用于此接口的网桥
 mac:指定此虚拟接口的MAC地址。如果有没有提供一个MAC地址,它将在Xen启动的时候随机配置一个MAC地址。此随机的地址是从IEEE分配给XenSource的(00-16-3E)的范围内选取的。你也可以用此指令定义一个静态的MAC地址,使你能够从DHCP服务器上分配到一个静态的IP地址。
* on_reboot:指定域重启过程中发生的动作。重启时候的合法状态有:
 destroy:完全关闭域
 preserve:域不会被清除,可得到域的调试信息以帮助调试崩溃
 rename-restart:旧的域不被清除。替代的是它被重命名同时启动一个新的域替换旧的域
* on_crash:指定domU崩溃后所执行的动作。此指令的合法状态与on_boot选项一样
* vcpus:虚拟CPUs的数量
Xen Management User Interface—xm
xm是通过xend(Xen的监听进程)与Xen管理器通信的一个管理工具。由于它需要有使用xend和管理器之间的信道的特权,所以运行xm的命令需要有系统管理员的权限。
   执行一个xm命令将马上会返回给访问者,但是实际的操作可能还没完成,某些域的命令可能会运行相当长的一段时间才能完成。确定命令是否成功执行完毕的唯一方法就是定期打印列表并检查。
   域列表中某个域的状态栏的状态可能是下面五个中的一个:
* r--running:当前正在使用CPU的域
* b--blocked:中断的域。这种情况一般出现在当vcpu等待一个外部事件在该域发生。
* p--paused:挂起的域。暂停的域仍然会消耗分配的资源(例如内存),but is not eligible for scheduling by the Xen hypervisor
* s--shutdown:正在进行关机操作的域。
* c-crashed:列出崩溃的域。
通常的域列表是一个不容易被其他工具分析的表的格式,因此xm也提供了一个“-long”选项以S-Expression格式列出容易被其他工具分析的域信息。
Time for Action—Xen Manager
现在我们论证让xm完成一些普通任务
1、打印当前Xen环境下正在运行的域
xm list
2、打印当前Xen环境中dom0的详细信息
xm list Domain-0 --long
3、打印当前Xen环境下关于一个域的详细信息
xm list --long domain-name
4、暂停当前Xen环境下正在运行的一个domU
xm pause domain-name
5、解除之前暂停的domU的暂时状态
xm unpause domain-name
6、保存当前Xen环境下面正在运行的domU的状态到指定文件,接下来状态将会被保存为磁盘上的文件并把此域从运行域列表里面移除
xm save domain-name file-name
7、从保存的状态恢复一个域。它将从保存着状态信息的文件恢复域并把域恢复为运行状态。
xm restore file-name
8、检查Xen内核缓冲信息
xm demsg
9、打印当前Xen环境的主机信息
xm info
10、打印Xen日志
xm log
11、类似Unix的top一样实时监测Xen的域
xm top
12、列出某个域所使用的所有块设备
xm block-list domain-name
13、列出某个域使用的所有的网络接口
xm network-list domain-name
15、列出某个域使用的所有的网络接口的详细信息
xm network-list domain-name --long
16、显示你的Xen环境里所有域的正常运行时间
xm uptime
17、重启一个域。它不会重新读取该域的Xen配置文件。如果你想重载该域的配置,你需要使用halt命令然后再执行create命令。
xm reboot domain-name
18、挂起一个域
xm suspend domain-name
19、恢复一个挂起的域
xm resume domain-name
20、重命名一个正在运行的域
xm rename domain-name-old domain-name-new
21、连接到域的控制台
xm console domain-name
22、关闭域
xm shutdown domain-name_of_the_device




四、Xen网络
* 桥接网络
* 路由网络
* 包含NAT的虚拟局域网
桥接网络
Time for Action—Using Bridged Networking
1、xen里面缺省的网络设置是桥接,这可以通过查看Xen在配置文件(/etc/xen/xend-config.sxp)来进一步确认,它应该有非注释的下面两行。
(network-script network-bridge) 
(vif-script vif-bridge)
2、为domU创建一个新的配置文件,你可以使用在之前章节创建的任何一个镜像或你自己拥有的其他镜像。根据你选择的镜像替换文件中的配置:
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "bridged_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w']
vif = [ 'bridge=xenbr0' ]
root = "/dev/hda1 ro"
3、用xm启动domU
xm create /root/xenimages/ttylinux_domU.cfg –c
4、检查以确定domU已启动并正常运行
xm list
下面是启动Xen服务和xend时发生的事件队列:
1、执行/etc/xen/scripts/network-bridge脚本
2、这将创建一个叫xenbr0的新网桥
3、从物理网卡eth0复制MAC和IP地址
4、停止物理网卡eth0
5、创建一对新的已连接的虚拟网络接口--veth0和vif0.0
6、将之前复制的MAC和IP地址指派到veth0
7、重命名物理网卡eth0为peth0
8、重命名虚拟网卡veth0为eth0
9、连接peth0和vif0.0到xenbr0
10、启动网桥xenbr0和网卡peth0、eth0、vif0.0

使用brctl show命令可以查看连接到各个网桥上的网络接口情况
路由网络
Time for Action—Using Routed Networking
1、因为我们需要修改xend的配置文件,所以我们首先要停止xend
service xend stop
2、修改xen配置文件/etc/xen/xend-config.sxp使我们能够使用路由网络。注释关联桥接网络的两行并取消注释关联路由网络的两行。如果在配置文件中没发现配置路由网络的行,那么加上他们:
(network-script network-route)
(vif-script     vif-route)
3、重新启动xend让它用新的配置起动
xend start
4、修改我们之前使用的domU的配置文件使它能使用路由网络
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "routed_domU"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w']
vif = [ 'ip=192.168.1.165' ]
root = "/dev/hda1 ro"
5、起动domU
xm create /root/xen-images/ttylinux_domU.cfg -c
6、检查domU已经起动并正常运行
xm list
下面是xend用路由网络配置起动的事件队列
1、允许dom0进行IP转发
2、当domU起动的时候,xen从eth0复制IP地址到虚拟网络接口vif.0。虚拟接口的ID是自动分配给xen起动的每个客户域的。被分配的id在单个会话里面永远不会被重用,因此如果你停止并重启一个域,它将重新分配到一个新的ID。
3、启动虚拟接口vif.0。
4、为domU的配置文件中指向虚拟接口vif.0分配的IP地址增加静态路由
 
Virtual Local Network with Network Address Translation
Time for Action—Using VLAN with NAT
我们将在192.168.2.0上创建一个虚拟网络并且此网络保护一个web服务器和一个数据库,所有在此网络的虚拟机的IP地址都将在此范围内。我们将在此网络创建两个虚拟机并从一个公网IP地址去访问他们。端口将被dom0转发到各个虚拟机上。
1、第一个网络接口被dom0使用了,我们需要创建一个新的网络接口用于我们的VLAN。这个接口使用dummy网络去掉创建并命名为dummy0。创建一个新的名为/etc/sysconfig/network-scripts/ifcfg-dummy0的文件:
A DEVICE=dummy0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
IPV6INIT=no
PEERDNS=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=x.x.x.x
ARP=yes
2、分配一个IP地址到这个接口并把它加到网络接口文件-/etc/network/interfaces:
   auto dummy0
   iface dummy0 inet static
          address 192.168.2.1
          netmask 255.255.255.0
3、修改xend配置(/etc/xen/xend-config.sxp)增加下面的行,使我们在新的dummy网络接口dummy0上监听桥接:
(network-script 'network-bridge netdev=dummy0')
4、确定IP转发被允许
echo "1" > /proc/sys/net/ipv4/ip_forward
5、重启sysctl使修改被live kernel获取
/sbin/sysctl -p
6、在我们的VLAN上创建第一个虚拟机。修改它的配置文件使它看起来像下面这样:
# assume this is the webserver vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_1"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w']
vif = [ 'ip=192.168.2.2' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1"
7、在我们的VLAN上创建第二个虚拟机,修改他的配置文件使它看起来像下面这样:
# assume this is the mysql vm
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 32
name = "vlan_domU_2"
disk = ['tap:aio:/root/xen-images/ttylinux_domU.img,hda,w']
vif = [ 'ip=192.168.2.3' ]
root = "/dev/hda1 ro"
gateway="192.168.2.1"
8、通知dom0必须为特定的端口转发请求到这个VLAN。为此我们需要首先在dom0允许NAT:
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
9、现在我们可以配置规则转发端口到正确的虚拟机,首先我们转发80端口:
iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.2.2:80
10、然后转发mysql的端口3306:
iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.2.3:3306
重启xend然后创建虚拟机,现在我们已经有一个简单的网络配置使dom0转发基于端口的请求到VLAN里面的一个客户域。



五、存储
使用xen可选的高级存储选项
* 文件存储
* 网络文件系统(NFS)存储
* 逻辑卷管理(LVM)存储
文件存储
普通的文件可以用作虚拟块设备来容纳Xen域,这是开始使用Xen最快速的方法。
虽然文件是存储VM最简单快捷的方式,但是他们存在一些不利因素:
* 它们不适于I/O密集型的应用,因为它们在沉重的I/O负载下效率会降低,在dom0上的loopback块设备在用于支持file-backed VBD时对I/O的处理上表现得非常差。
* Linux在缺省情况下在所有的域上最多支持8个file-backed VBD。如果CONFIG_BLK_DEV_LOOP命令被编译进来作为dom0内核的一个模块,那么这个限制能够通过修改max_loop内核参数来增加。
NFS
Network File System(NFS)是一个允许用户通过网络访问文件并像本地文件目录一样处理它们的C/S系统。
NFS是允许一个系统在一个网络上与其他系统共享目录和文件的伟大方法。它允许远程系统上的用户像访问文件就如它们访问它们本地的文件。NFS的有力因素如下:
* 通过把常用和访问的数据存储在一个通过网络可以访问到单一的机器上,减少了本地磁盘空间的使用率
* 单个用户的家目录可以建立并存储在远程的NFS服务器上而且遍及整个网络都有效
* 存储设备能够被安装在一个远程的NFS服务器上,通过NFS对该设备的访问减少了企业硬件需求
* 通过网络经由NFS根文件系统远程启动linux机器
Xen允许我们利用NFS的功能,用NFS上的一个根文件系统来启动一个客户域。
Time for Action—Using NFS
要使用NFS,我们首先需要有一个支持NFS的Xen domU内核。
1、大多数的内核都支持NFS,但我们假设你的不支持,你需要编译内核以支持NFS,为domU的内核运行linux内核配置
make linux-2.6-xenU-config CONFIGMODE=menuconfig
2、选择File systems--Network file systems选项,然后选择“NFS File system support”和“Root file system on NFS”。选择它们编译进内核,也可以选择转换它们为模块,如果你转换它们作为模块,那么需要确定在你的initrd镜像里面要包含它们,否则你将不能通过NFS根文件系统启动你的客户域
3、编译内核并安装:
make linux-2.6-xen0-build
make linux-2.6-xen0-install
4、重启以获取新的修改。现在我们需要一个可以被我们使用的NFS服务,可以使用已有的可以访问的。在这里我们在一个新的服务器上建立一个新的NFS服务。这个服务器上运行着Ubuntu Feisty Fawn,某些安装包的命令类似debain,你可以用特定发布版本的包管理命令替换它们
5、安装NFS服务和portmap包。portmap和NFS服务监控将在安装完成后自动启动。仔细检查以确定你的发布版本是相同的
apt-get install nfs-user-server portmap
6、创建一个包含我们客户安装的目录,这将是我们从这个服务器上经由NFS输出的目录。
mkdir /mnt/feisty
7、修改/etc/exports文件以添加这个目录到我们需要导出的目录
/mnt/feisty 192.168.1.86(rw,sync,no_root_squash)
8、使用debootstrap让Ubuntu Feisty居于此目录,这将下载并释放所有必需的文件到上面挂载的目录:
/usr/sbin/debootstrap --arch i386 feisty /mnt/feisty  
9、我们将使用Xen服务器系统的domU内核模块,从/lib/modules目录拷贝它们到此目录:
scp -r root@192.168.1.86:/lib/modules/2.6.**.**-xenU  /mnt/feisty/lib/modules/
10、chroot到新的系统并配置它
chroot /mnt/feisty /bin/bash
11、添加我们需要的包:
apt-get install nfs-common portmap
12、为系统配置主机名
echo "ubuntu_feisty_nfs_domU" > /etc/hostname
13、配置在启动时候载入的文件系统
  cat > /etc/fstab << "EOF"
  # file system    mount point   type    options      dump pass
  192.168.1.67:/mnt/feisty         nfs    rw           0    0
  proc             /proc         proc    defaults      0    0
  sys              /sys          sysfs   defaults      0    0
  EOF
14、配置网络。我们将用loopback接口和eth0连接Ethernet。eth0接口使用DHCP自动配置:
cat > /etc/network/interfaces << "EOF"
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
EOF
15、增加一个用户,创建一个管理组,将新加的用户放入该组,然后设置root密码:
adduser user
addgroup --system admin
adduser user admin
passwd root
16、Ubuntu使用sudo来让用户拥有管理员权限,使用visudo修改sudoers文件:
visudo
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
17、为这个domU创建xen配置文件
 cat > /root/xen-images/ubuntu_feisty_nfs_domU.cfg <<  "EOF"
 kernel = "/boot/vmlinuz-2.6.16.38-xenU"
 memory = 256
 name = "ubuntu_feisty_nfs_domU"
 vif = [ 'ip=192.168.1.111' ]
 nfs_server = '192.168.1.67'
 nfs_root   = '/mnt/feisty'
 root       = '/dev/nfs'
 EOF
18、用xm启动ubuntu feisy域
xm create ubuntu_feisty_nfs_domU.cfg –c
在设置输出的目录的限制的时候必需非常小心,以确保访问权限只提供给正确的服务器。
NFS虽然很快,但是他仍然需要经常建立和断开网络连接以及在网络上传输数据,如果速率对你的xen域来说是最为重要的,NFS不是一种合适的方法。
NFS还有两种不同的版本--NFSv3和NFSv4,所以需要仔细检查它们的功能来决定应该使用哪种。
NFS how to:  
Understanding NFS:
Logical Volume Management
Time for Action—Using LVM
1、在一个磁盘分区上创建一个物理卷,创建后可以用pvdisplay显示创建的结果。
pvcreate /dev/hda6
2、在物理卷上以Volume00为名创建一个卷组,可以用vgdisplay查看创建结果
vgcreate Volume00 /dev/hda6
3、创建一个逻辑卷用于存储我们的镜像并命名此卷为feisty,逻辑卷的细节可以用lvdisplay显示。
lvcreate -L 4096M -n feisty Volume00
4、lvscan命令用于扫描所有的逻辑卷和它们当前的状态。
5、在我们新建的逻辑卷上建立ext3文件系统
mkfs.ext3 /dev/Volume00/feisty
6、创建一个目录并把逻辑卷挂在上去
mkdir /mnt/feisty
mount /dev/Volume00/feisty /mnt/feisty
7、运行debootstrap,它将下载并释放所有必需的文件到上面挂载的目录
/usr/sbin/debootstrap --arch i386 feisty /mnt/feisty
8、我们将使用之前创建的domU的内核来启动这个域,所有这个域的内核将需要已编译的内核模块,从/lib/modules目录拷贝它们。
cp -dpR /lib/modules/2.6.**.**-xenU /mnt/feisty/lib/modules
9、chroot到新的系统并进行配置
chroot /mnt/feisty /bin/sh
10、为系统设置主机名
echo "ubuntu_feisty_domU" > /etc/hostname
11、配置启动时候载入的文件系统
cat > /etc/fstab << "EOF"
# file system    mount point   type    options      dump  pass
/dev/sda1        /             ext3    defaults       0     1
proc             /proc         proc    defaults       0     0
sys              /sys          sysfs   defaults       0     0
EOF
12、配置网络。我们使用loopback接口和eth0进行网络连接,eth0接口使用DHCP来自动配置。
cat > /etc/network/interfaces << "EOF"
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
EOF
13、增加一个用户,创建一个管理组,将新加的用户放入该组,然后设置root密码:
adduser user
addgroup --system admin
adduser user admin
passwd root
14、Ubuntu使用sudo来让用户拥有管理员权限,使用visudo修改sudoers文件:
visudo
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
15、完成初始配置后,退出chroot环境
exit
umount /mnt/feisty
16、创建dom0用于创建域的配置文件
cat > /root/xen-images/ubuntu_feisty_domU.cfg << "EOF"
kernel = "/boot/vmlinuz-2.6.16.38-xenU"
memory = 256
name = "ubuntu_feisty_domU"
disk = ['phy:Volume00/feisty']
vif = [ 'mac=00:16:3e:00:00:10, bridge=xenbr0' ]
root = "/dev/sda1 ro"
EOF
17、调用xm创建虚拟机
 xm create /root/xen-images/ubuntu_feisty_domU .cfg -c
我们鼓励使用LVM来存储xen域,它是建立和管理域最理想的一种方法,但是,必需注意的是在LVM上建立的客户机里面使用LVM可能导致客户机内部看到错误的LVM信息。LVM使企业在处理一个只要可配置和可适应的虚拟环境的存储需求时非常容易。
LVM How to:
Learning Linux LVM: http://www.ibm.com/developerworks/linux/library/l-lvm/  
Managing disk space with LVM: http://www.linuxdevcenter.com/lpt/a/6553 
高级存储选项
Redundant Array of Independent/Inexpensive Drives (RAID)
RAID的三个主要概念:
镜像:拷贝数据到多个磁盘
条带:分离数据到多个磁盘并在读取连续数据时从多个磁盘读取
容错:通过增加一些冗余数据来提高系统可靠性,因此故障可被检测并快速修复
使用RAIDzuida的好处就说系统能够被设计成在有错误的时候还能保持工作--在系统保持运行运行的情况下进行磁盘热交换和数据自动修复。
Setting up Xen with LVM and RAID:  
LVM on a RAID mirror for Xen:  
~bart/blog/20060410220525
Global Network Block Device  (GNBD)
GNBD提高通过局域网访问存储,因此允许你通过网络共享和访问逻辑块设备,GNBD的一个通常用法是从LVM输出逻辑块设备,这是类似存储区域网络(SAN)的一个简单廉价的替代品。但是需要注意的是使用GNBD可能是因为网络而降低速率,除非有一个非常快速的网络,否则速率将不如直接从磁盘读取那么快。
下面是对配置GNBD有用的一些资源:
How to build, install, and run GNBD:  
Xen with DRBD, GNBD and OCFS2 Howto:  


六、加密
我们将使用下面的文件系统加密方法:
Plain device mapper-based encryption.
Key based-device mapper encryption using LUKS.
Device Mapper-Based Encryption
dm-crypt是一个用于使用内核的cryptoAPI来达到透明地加密块设备的目的的包,它只包含在Linux 2.6系列的内核中,较旧的内核使用cryptoloop来提供相似的功能,但那个包已经不推荐使用了。
Time for Action—Encrypting Block Devices
首先我们需要为内核内核准备所需的模块和支持加密的选项,然后创建file backed虚拟块设备用于存放我们的客户域和安装unbuntu到里面。
1、选择内核选项“Device Drivers--Multi-device support (RAID and LVM)--Device mapper support and Crypt target support”,可以选择把它们编译进内核或编译成模块,但是编译成模块的话要确保你已经将它们包含到initrd镜像。
2、在内核选项中选择“Cryptographic options--AES cipher algorithms”,这些算法是用dm-crypt加密时使用的。
3、保存对配置的修改,编译内核并安装
 make linux-2.6-xen0-build
 make linux-2.6-xen0-install
4、重启系统使修改生效,检查以确定系统已经支持AES
cat /proc/crypto
5、安装使用dm-crypt的用户空间工具
apt-get install cryptsetup dmsetup
6、我们可以使用dmsetup来显示当前存在targets的名称
dmsetup targets
7、选用一个loopback文件来存储我们加密的文件系统,创建一个用于存放Ubuntu Feisty安装的根文件系统
dd if=/dev/urandom of=/root/xen-images/ubuntu_feisty_domU.img bs=1G count=6
8、设置上面创建的loopback文件作为loop设备
losetup –f /root/xen-images/ubuntu_feisty_domU.img
9、使用loop设备创建一个逻辑卷,这将会请求输入一个密码,打开此功能后,任何时候你挂载这个加密文件,你都需要提供这个密码。
cryptsetup -y create encrypted_feisty /dev/loop0
10、使用dmsetup检查以确定该卷被正确创建
dmsetup ls
11、在加密的文件上创建ext3文件系统
mkfs.ext3 /dev/mapper/encrypted_feisty
12、挂载加密文件系统
mount /dev/mapper/encrypted_feisty /mnt/feisty
13、现在可以安装Ubuntu到这个挂载的文件系统里面,安装完成Ubuntu后,卸载这个文件系统
14、增加这个加密文件系统的定义到/etc/crypttab:
encrypted_feisty /dev/mapper/encrypted_feisty  none  check=ext3,retry=5
15、在/etc/fstab中加入这个设备使系统启动后立刻挂载此文件系统
/dev/mapper/encrypted-feisty /mnt/feisty  ext3 defaults 0 2
16、当你重启的时候,你将被在该文件系统挂载前请求输入密码,输入正确密码后文件系统将被挂载。现在你可以用一域配置文件来启动你的Ubuntu客户域了

Device Mapper-Based Encryption Using LUKS
Linux Unified Key Setup(LUKS)提供一种标准的加密分区的格式和允许使用多个用户名/密码。它同时提供有效的密码废除和对低级加密的攻击的保障。
Time for Action—by Extending dm-crypt
1、像之前描述的那样,确定你已经将所有需要的模块编译进了内核,同时安装了dmsetup和crptsetup包,为了要使用LUKS,内核需要支持SHA-256算法,在内核中选择这个选项作为模块或编译进内核你可以将模块插入正在运行的内核或如果你把它编译进内核的话,重启系统是修改生效。
2、我们仍然使用一个loopback文件来存储我们的加密文件系统,创建一个用于存放Ubuntu Feisty安装的的根文件系统:
dd if=/dev/urandom of=/root/xen-images/ubuntu_feisty_domU.img bs=1G count=6
3、将上面创建的loopback文件配置为一个loop设备
losetup –f /root/xen-images/ubuntu_feisty_domU.img
4、使用loop设备创建一个逻辑卷,这将会请求输入一个密码,打开此功能后,任何时候你挂载这个加密文件,你都需要提供这个密码。
cryptsetup luksFormat /dev/loop0
5、为loopback设备创建一个设备探测器
cryptsetup luksOpen /dev/loop0 encrypted_feisty_luks
6、在加密文件上创建一个ext3文件系统
mkfs.ext3 /dev/mapper/encrypted_feisty_luks
7、挂载新的虚拟设备
mount /dev/mapper/Ubuntu_feisty_luks /mnt/feisty_luks
8、我们之前已经配置一个访问此加密文件的密码,LUKS提供用户输入8个不同密码来访问此文件系统的支持,这功能可以让你提供多个用户访问,你可以使用luksAddKey来增加新的密码:
cryptsetup luksAddKey /dev/loop0
9、你可以从LUKS头获取状态信息,它将显示open slots、使用的加密算法和其他的状态信息。
10、你可以在任何时候删除或废除键,你将从slot 1删除键
cryptsetup luksDelKey /dev/loop0 1
11、现在可以安装Ubuntu到这个已挂载的文件系统,安装完成后卸载文件系统
12、增加已加密文件系统的定义到/etc/crypttab,retry参数指定如果你输入一个错误密码后要求你重新输入密码的最大重试次数,check参数指定要挂载的文件系统的类型。
encrypted_feisty /dev/mapper/encrypted_feisty_luks  none  luks,check=ext3,retry=5
13、在/etc/fstab中加入这个设备使系统启动后立刻挂载此文件系统
/dev/mapper/encrypted_feisty_luks /mnt/feisty_luks ext3 defaults 0 2
14、当你重启的时候,你将被在该文件系统挂载前请求输入密码,输入正确密码后文件系统将被挂载。现在你可以用一域配置文件来启动你的Ubuntu客户域了


七、迁移
有两种方法可以把一个域从一台服务器迁移到另一台服务器上:
1、保存一份域的拷贝并在不同的服务器上还原这个域
2、在一个域运行过程中迁移,使用最小的服务中断时间(在线迁移)
迁移需求
下面是迁移建立和网络的需求:
* 源主机和目标主机都必须运行Xen和xend daemon
* 目标主机必须有足够的空间、内存和资源用于运行迁移后的域
* 源主机和目标主机必须有相同的架构和虚拟扩展,比如,如果源主机运行在X86-64扩展架构,那么也就必须确定目标主机也相同。这是在内核和用户库指引集下使你不会出现运行错误的规定。
* 源主机和目标主机必须在相同的2层子网网络内。如果在一个不同的子网,当一个域迁移后,此迁移将不完全成功,因为MAC和IP地址也是一起迁移的。
* 迁移处理会导致xend daemon停止源主机上运行的域,复制域到目标主机,然后重新启动域。xend daemon默认接受本地的迁移请求。要允许一个远程主机的迁移请求,必须修改目标主机/etc/xend-config.sxp上的xen-relocation-hosts-allow参数,由于没有提供验证,所以为了安全你系严格限制允许迁移的主机。
* 如果有运行防火墙,必须创建明确的iptables规则允许接入的迁移连接
* 典型的迁移一般会出现大概60-300ms的中断
* 已存在的控制台连接不会跟随迁移连到目标主机,必须在新的目标主机上重新连接该域的控制台
保存和还原一个域
运行中的域的当前状态保存在磁盘上的一个文件中,Xend使用这个文件来还原域的状态,这类似于笔记本电脑的休眠功能的概念。
Time for Action—Migrate Domains on your Xen Server
我们将创建一个Debian域并保存它的状态到一个将用于还原域的文件里
1、创建Debian客户域
xm create debian_etch_domU.cfg –c
2、检查并确定域已经启动并正常运行后,保存域的当前状态到/xen-saved-images或其他自选目录;
xm save 1 /xen-saved-images/etch.save
3、保存的域将会从当前运行域列表里面删除,可以用xm命令打印当前域信息来检查。
4、从文件还原已保存的域
xm restore /xen-saved-images/etch.save
5、重新运行xm命令,我们将看到还原的域重新回到当前运行域列表
下面一些东西是在使用保存和还原功能的时候必须记住的:
* 还原后的域的ID将于该域在保存前的ID不一样
* 域将被还原到它保存之前的状态,但是你不会自动连接到与的控制台
* 这是迁移域的一个简单容易的方法,但是必须注意这个域在保存的时候已经从激活的域里面移除,运行在域里面的服务已经不再存在或可访问。
在线迁移
Time for Action—Relocation of an Active Running domain
我们将要用于在线迁移的服务配置如下:
* palantir:使用一个NFS输出目录运行一个Ubuntu Feisty客户域的Xen主机
* boromir:从palantir服务器迁移的Ubuntu Feisty客户域的目标Xen主机
* frodo:Linux NFS服务器,通过网络为xen域提供存储
 
1、在线迁移需要共享的存储,实际的最小网络需求为100MB网络,其他迁移想关联的需求在之前已经提过。我们先在第一个Xen主机建立一个NFS服务用于共享存储,我们要迁移的域就运行在NFS服务的共享存储空间里。
2、编译/etc/exports并加入下面的行来导出存储目录:
/xen-storage *(r,sync,no_root_squash)
3、保存文件并重启NFS服务,在服务器上添加NFS服务到系统服务并配置他在重启后启动。
service nfs startchkconfig nfs on
4、配置两台Xen服务器使它们能使用NFS服务输出作为存储,在两台Xen服务器上添加挂载点来挂载输出目录:
mount palantir:/xen-storage
mount boromir:/xen-storage
5、修改xend配置文件允许在线迁移,修改/etc/xen/xend-config.sxp文件并确认下面的两行不被注释:
(xend-relocation-port 8002)
(xend-relocation-address '')
这就允许了xen daemon监听和响应在线迁移的请求
6、根据之前章节的步骤使xen于运行在一个NFS服务存储上,启动palantir上的客户域,使用下面的客户域配置:
 cat > /root/xen-images/ubuntu_feisty_nfs_domU.cfg <<   "EOF"
 kernel = "/boot/vmlinuz-2.6.16.38-xenU"
 memory = 256
 name = "ubuntu_feisty_nfs_domU"
 vif = [ 'ip=192.168.1.111' ]
 nfs_server = '192.168.1.67'
 nfs_root   = '/xen-storage'
 root       = '/dev/nfs'
 EOF
7、现在palantir上已经运行着一个使用NFS输出目录作为存储的客户域,我们将在线迁移这个域到boromir服务器,在完成之前将会花几分钟的时间,如果迁移没有成功完成,一个指示错误的信息会被显示在控制台。
xm migrate --live ubuntu_feisty_nfs_domU boromir
8、这就是迁移一个在线运行的域到另一个xen服务器的全部,如果你使用xm命令在palantir和boromir服务器上列出正在运行的域,你会发现迁移的域出现在boromir服务器同时不再显示在palantir服务器的运行域列表中。
配置的一些参数说明:
xend-relocation-server:允许/禁止本机接受远程的迁移请求,在迁移过程中,域虚拟内存是在无加密状态下以raw格式进行交换的,所有在一个不可信网络里面允许此项的时候要格外注意。
xend-relocation-port:xend daemon用于重新安置的端口,缺省值是8002
xend-relocation-address:限制域的迁移到一个指定接口的标识,指定的地址用于监听接入的重新安置套接,此标识只有在允许了xend-relocation-server参数的时候有效
xend-relocation-hosts-allow:定义允许与本机的重新安置接口通信的主机的标识。值是用空格分开的一串正则表达式,如果此值为空,那么所有的接入连接都被允许,这个值可以匹配一个IP地址或一个完整的域名。
从palantir到boromir的迁移可以分成一系列的步骤:
1、预迁移:Feisty域在palantir运行,它是一个激活的域
2、预定(Reservation):一个迁移请求分发palantir,用于检查并确认boromir上有足够的资源,然后xend预定一个请求的大小的VM容器,如果在boromir上xend不能获取所需的资源,接下来将什么都不会发生。域将在palantir上不进行任何改变得运行,重新安置被取消。
3、反复预拷贝:内存分页从palantir到boromir传输所有的页然后只传输在初始传输后有改变的页
4、停止然后拷贝:palantir上运行的与被挂起同时所有的网络传输重定向到doromir,在此阶段的最后,在boromir上额外会有一个挂起的拷贝到palantir上挂起的域,因在此时palantir上挂起的域仍然是主拷贝,万一此阶段有任何失败,它在palantir上将会继续运行。
5、通信:在此阶段如果没有任何的错误或失败,roromir将发生一个指示到palantir表明它已经有了一个与palantir相同的域的镜像,palantir将从它的xen服务里面抛弃这个域,从现在起,boromir变成了这个域的主要主机。
6、激活:已迁移的域在boromir上被激活,在域里面的所有设备驱动现在重新连接到新的机器。



原文出处:
http://blogold.chinaunix.net/u3/106900/article.php?frmid=125853


阅读(7038) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:rpm打包整理

给主人留下些什么吧!~~