ubuntu9.04 (Server版) 配置Xen虚拟机

转载自:http://wells.osall.com/blog/index.php?uid=1&m=content&p=1434#article_conte
nt.php%3Fid%3D1434%26uid%3D1%26dt%3DY:pane:N;

BITimE // 咀嚼时光

前两天买了个Seagate的320G的2.5寸SATA硬盘,真便宜,300多元,差不多每G一元钱了。于是就把原来移动硬盘里的160G的硬盘装在那台ATOM小
PC上了。如果大家还没忘记的话,应该还记得 我的那个ATOM小PC里面是用的8G的CF转IDE作为硬盘

的。现在突然存储设备容量大了20倍,那就让它干更多的活吧。兔子老是跟我说他在他的服务器上装了 n多虚拟机
,充分利用硬件资源,那我也来试一下吧。

Linux上有很多虚拟机软件, XEN 、 [ KVM ](http://www.linux-
kvm.org/page/Main_Page) 、 VMWare VirtualBox

,从开源角度和性能角度来考量,当然选XEN啦。XEN性能非常优异,虚拟的主机的性能几乎和原生主机一致,如果主机硬件支持 VT (intel)
或者 [ SVM (AMD) ](http://www
.amd.com/us/products/technologies/virtualization/Pages/virtualization.aspx)
的技术的话,则可以虚拟任何能在x86架构上运行的操作系统。可惜我的ATOM 330
CPU不支持VT技术,因此只能玩半虚拟模式,虚拟出内核支持XEN的操作系统了。

换上新硬盘,首先就是安装新的操作系统。我一直用惯了Ubuntu,因此就安装了 Ubuntu 9.04 Server Edition 64位

版本。安装OS的过程就不多说了,直接说XEN的安装配置吧。

在XEN虚拟机环境上第一个被启动的操作系统被称为Domain-0,而之后启动的其他虚拟操作系统则被称为Domain-U,每一个Domain 就是一台虚拟机
。Domain-0除了可以运行应用程序外,还担负着XEN的控制功能,所以也被称为XEN Hypervisor。在Domain-
0上启动了XEN服务后,最重要的一个进程就是xend,这就是XEN的服务进程。

我们新安装的操作系统如果没有安装XEN软件,则就相当于普通的一个单机使用。如果安装了XEN软件,并且以XEN化的内核启动,则这个操作系统环
境就变成了Domain-0,而后在这个环境下安装的其他操作系统则就是Domain-U了,都可以通过Domain-0来进行控制。

![虚拟机架构](http://p.blog.csdn.net/images/p_blog_csdn_net/cctt_1/EntryImages/2009
1109/hypervisor_01.png)

要安装并使用XEN,首先更新软件源的信息。

sudo apt-get update

然后安装xen服务器软件和工具。

sudo apt-get install ubuntu-xen-server # sudo apt-get install ubuntu-xen-

desktop
这时候我们去/boot目录看,可以看到一个xen3.3.gz文件,但是没有供操作系统使用的XEN化的内核,因此此时的操作系统还不是Doamin-0。我找了好
久都没找到现成的XEN化内核,于是就只能根据XEN手册自己编译一个内核了。

下载安装最新的kernel文件。

sudo apt-get install linux-image-server linux-server

安装编译所需要的一些工具包。

sudo apt-get install build-essential libncurses5-dev gawk mercurial

接下来下载XEN所提供的XEN化的内核的源代码。

mkdir -p ~/build/linux-2.6.27-xen # cd /usr/src/ # sudo hg clone

http://xenbits.xensource.com/ext/linux-2.6.27-xen.hg
配置内核选项。

cd /usr/src/linux-2.6.27-xen.hg # sudo make O=~/build/linux-2.6.27-xen/

menuconfig
出现内核参数的配置菜单后,根据如下的选项修改配置。

1。General setup —> Choose SLAB allocator (SLUB (Unqueued Allocator)) —>
(X) SLAB

2。Processor type and features —> Subarchitecture Type (PC-compatible) —>
(X) Enable Xen compatible kernel

3。

Bus options (PCI etc.) —> [] PCI support [] Xen PCI Frontend [ ] Xen PCI
Frontend Debugging (NEW)
4。将 802.1d Ethernet Bridging 修改为 <*> 802.1d Ethernet Bridging:

Networking support —> Networking options —> <*> 802.1d Ethernet Bridging

5。关闭 10000 Mbit Ethernet 支持(否则可能编译失败):

Device Drivers —> [*] Network device support —> [ ] Ethernet (10000 Mbit)
—>

6。在 XEN 选项区中,按照下面选择选项(确认选择 Xen version compatibility (3.0.4 and later) 来取代原来的
Xen version compatibility (3.0.2 and later)):
Device Drivers —> XEN —> [] Privileged Guest (domain 0) <> Backend
driver support (NEW) <> Block-device backend driver (NEW) <> Block-device
tap backend driver (NEW) <> Network-device backend driver (NEW) (8) Maximum
simultaneous transmit requests (as a power of 2) (NEW) [ ] Pipelined
transmitter (DANGEROUS) (NEW) < > Network-device loopback driver (NEW) <
>
PCI-device backend driver (NEW) PCI Backend Mode (Virtual PCI) —> [ ] PCI
Backend Debugging (NEW) < > TPM-device backend driver (NEW) SCSI backend
driver (NEW) Block-device frontend driver Network-device frontend
driver Network-device frontend driver acceleration for Solarflare NICs
(NEW) SCSI frontend driver (NEW) <> User-space granted page access driver
(NEW) <
> Framebuffer-device frontend driver (NEW) <> Keyboard-device
frontend driver (NEW) [
] Disable serial port drivers (NEW) <*> Export Xen
attributes in sysfs (NEW) (256) Number of guest devices (NEW) Xen version
compatibility (3.0.4 and later) —>
ESC退出并保存完配置后就可以开始编译内核了。

可能这里要先 make mrproper

sudo make O=~/build/linux-2.6.27-xen/

sudo make O=~/build/linux-2.6.27-xen/ modules_install install

通过漫长的等待(我的Atom 330
CPU花了大约3个小时),终于编译完内核了。编译安装完成后,去/boot目录检查,应该可以看到生成了支持xen的2.6.27.5的内核了。

ls -l /boot

total 72697
-rw-r–r-- 1 root root   525592 2009-04-17 12:05 abi-2.6.28-11-server
-rw-r–r-- 1 root root   524602 2009-07-25 11:14 abi-2.6.28-14-server
-rw-r–r-- 1 root root    87448 2009-08-13 19:50 config-2.6.27.5
-rw-r–r-- 1 root root    90587 2009-04-17 12:05 config-2.6.28-11-server
-rw-r–r-- 1 root root    90560 2009-07-25 11:14 config-2.6.28-14-server
drwxr-xr-x 2 root root     1024 2009-08-13 20:04 grub
-rw-r–r-- 1 root root  8259056 2009-08-14 03:31 initrd.img-2.6.28-11-server
-rw-r–r-- 1 root root  8272673 2009-08-13 15:02 initrd.img-2.6.28-14-server
drwxr-xr-x 2 root root    12288 2009-08-14 03:17 lost+found
-rw-r–r-- 1 root root   128796 2009-03-28 04:12 memtest86+.bin
-rw-r–r-- 1 root root  1651431 2009-08-13 19:50 System.map-2.6.27.5
-rw-r–r-- 1 root root  1871187 2009-04-17 12:05 System.map-2.6.28-11-server
-rw-r–r-- 1 root root  1863183 2009-07-25 11:14 System.map-2.6.28-14-server
-rw-r–r-- 1 root root     1169 2009-04-17 12:09 vmcoreinfo-2.6.28-11-server
-rw-r–r-- 1 root root     1169 2009-07-25 11:16 vmcoreinfo-2.6.28-14-server
-rw-r–r-- 1 root root  3145318 2009-08-13 19:50 vmlinuz-2.6.27.5
-rw-r–r-- 1 root root  3520832 2009-04-17 12:05 vmlinuz-2.6.28-11-server
-rw-r–r-- 1 root root  3510496 2009-07-25 11:14 vmlinuz-2.6.28-14-server
-rw-r–r-- 1 root root   470084 2009-06-18 16:16 xen-3.3.gz

内核有了,但是还没有initrd.img也就是启动时所需的ramdisk文件,手动来生成一个。

sudo depmod 2.6.27.5

sudo update-initramfs -c -k 2.6.27.5

更新grub引导程序。

update-grub

现在XEN的环境基本上都建好了,我们需要来修改一下配置文件了。

XEN服务的配置文件都在/etc/xen目录下。XEN服务的主配置文件是 /etc/xen/xend-
config.sxp。打开这个文件,我们要确认的是XEN虚拟服务器的网络连接方式,这是相当重要的。我选择了桥接模式, 也就是说,Domain-
U虚拟机和Domain-0在同一子网,用Domain-0的物理网卡来进行桥接到虚拟机的虚拟网卡。

sudo vi /etc/xen/xend-config.sxp

确认网络部分是这样配置的:
(network-script network-bridge)
下一步要根据你的习惯来修改。你喜欢将虚拟机安装在哪里?是用一个镜像文件来虚拟成磁盘,还是将一个LVM逻辑卷虚拟成磁盘,或者干脆就是将物理磁盘给虚拟机使用?

对于后两种选择,你可以跳过这一步。但如果你选择了在现有的文件系统中建立一个镜像文件来虚拟成一个虚拟机的物理磁盘,那就要按照下面修改默认配置了。

由于镜像文件在加载的时候是作为回圈设备(loop device),因此要将操作系统的默认最大回圈设备数量调大,以免出现不必要的问题。

sudo vi /etc/modules

将loop这一行修改为:
loop max_loop=64
好啦,重启主机,进入Domain-0的世界!!!

sudo shutdown -r now

重启完成后检查一下kernel版本,是不是XEN化的那个2.6.27.5?

uname -r

2.6.27.5
现在可以使用XEN的管理命令xm,来看看虚拟机运行状况啦!

sudo xm list

Name                                        ID   Mem VCPUs      State
Time(s)
Domain-0                                     0  1473     4     r-----    479.8
哈哈,可以看到Domain-0正常运行!!!你可以使用xm help来学习如何通过xm来管理虚拟机。

在State列,看到Domain-0是r的状态,也就是说,这个Domain正在运行中,并有任务在该Domain上运行。虚拟机还有如下几种状态:

  • r :该domain正在消耗CPU资源,任务运行中;
  • b :该domain正被暂时搁置(blockded),一般来说是因为这个domain在闲置中,等待输入或输出(I/O);
  • p :该domain处于暂停状态,通常是因为管理员使用 xm pause 暂停了这个domain。当domain至于暂停状态时,Xen的管理器将不会处理这个domain的任何动作;
  • s :该domain正在关机;
  • c :该domain已经crash了,但是没有关机。一般来说是因为domain的配置文件没有设置 on_crash 动作所致;
  • d :该domain正在死机中,一般来说是因为这个domain无法正确 shutdown/crashed 之故。

先到这里吧,总算是把XEN安装上了,而且也把Domain-0给顺利启动了。