我们如何检查 VPS 能否 ping 通?

昨天晚上10点左右有2位客户几乎同时在 Gmail 上给我发消息说他们的 VPS 网络延迟很长,ping 值很大而且丢包严重,引起我们关注,经过我们排查可能是国内网络的原因,这是国内特有的问题,俗称 “抽风”(我也不知道这个词是怎么来的:),原因是中国的出口带宽有限,一到上网高峰期,站长大搬家、全民 VPN 的时候,有限的带宽就不够用了,中国上网人数太多,再多的出口带宽都不够,所以这在相当长时间内都会是一个问题。所有美国机房到中国的线路(电信和网通)都在不同程度上、不同时间段有抽风现象发生。解决这个问题的根本办法有一个,就是建设良好环境、让大家 “回家”。

由于 vpsee.com 也放在我们的 VPS 上,所以在10点左右也遇到同样的问题,从上海 ping 有超时和丢包现象(见下图)。我们先来说说我们是如何来排查这类问题的,让客户了解我们是怎么工作的:

1、首先第一道防线是 Pingdom 和 iPhone,如果我们的服务器连续5分钟没有反应,我的 iPhone 就应该会收到短信,Pindom.com 是我们所知道的最好的在线监测网站,很多公司都用他们的产品,比如:twitter, joyent, siemens, last.fm, yahoo finiance, techcrunch 等。我们只用 Pingdom 监测服务器而不监测客户的 VPS;

2、如果没有收到任何短信,我们就登录到服务器检查客户的 VPS 是否正在运行;

3、如果客户 VPS 运行良好,我们将登录到任何几个其他服务器并在服务器上使用一行简单脚本 ping 客户的 VPS,检查客户的 VPS 是否可以被外界 ping 通;

$ cat ip.txt | while read -a ip; do ping -c 4 $ip;done

4、我们使用第三方提供的工具,比如:just-ping.com,从全世界各个角落的服务器 ping 客户的 VPS 再次检查客户的 VPS 是否正在稳定运行并截图发给客户,让客户理解是否是国内网络的问题。国内网络环境很复杂,大家都明白什么原因:),所以我们建议我们的客户在判断自己的 VPS 是否能 ping 通以前先用 just-ping.com 简单测试一下,看看自己的 VPS 能不能从国外和国内的不同地方 ping 通。

比如,昨天我们的这个博客 vpsee.com 在晚上10点左右从上海 ping 丢包达30%,持续时间达到40多分钟,但是从其他地方 ping 值良好。

my mac sys info

在 Ubuntu 上源码安装 Xen

这篇文章是在写 在 Debian 上源码安装 Xen 的时候一起写的,原本以为 Ubuntu 和 Debian 很相似、差别不大,配置过程可以直接套用而不用大修改,试了才知道其实不是那么简单。Ubuntu 9.10 使用的是 grub 2.0,被证实一些 bug 会导致 Xen 不能在 grub 2.0 的引导下正常启动,所以一种 workaround 的办法就是删除掉 grub 2.0,使用老版本的 grub. VPSee 不喜欢在服务器上使用 Ubuntu 的最新版本就是因为 Ubuntu 更新速度太快,版本发行太频繁,导致很多旧版本的问题还没解决就要开始赶鸭子上架推新版本,对了,今天好像是 Ubuntu 10.04 LTS 的发行日。以下的操作记录使用最新的 Xen 4.0.0 源代码版本和 Ubuntu 9.10,这里还有在 CentOS 下源码安装 Xen 的过程。如果你在 Ubuntu 10.04 上编译安装 Xen 4.0.1 可能会遇到 xend 启动问题

安装需要的软件包

首先最小化安装 Ubuntu,然后安装编译 Xen 和 Linux xen kernel 所需要的软件包:

$ sudo apt-get install gcc g++ make patch libssl-dev bzip2 gettext \
zlib1g-dev python libncurses5-dev libjpeg62-dev libx11-dev \
libgcrypt11-dev pkg-config bridge-utils bcc bin86 libpci-dev \
libsdl-dev python-dev texinfo libc6-dev uuid-dev bison flex fakeroot \
build-essential crash kexec-tools makedumpfile  libncurses5 \
libncurses5-dev iasl gawk

$ sudo apt-get build-dep linux 

安装 Xen hypervisor 和 tools

到 http://www.xen.org/products/xen_source.html 下载最新的 Xen 源代码,然后解开、编译、安装,标准的 Linux 软件源码安装动作:

$ tar zxvf xen-4.0.0.tar.gz
$ cd xen-4.0.0/
$ make xen tools stubdom
$ sudo make install-xen install-tools install-stubdom

上面 make stubdom 的时候会从网上自动下载一些东西,所以如果是用代理上网的话需要在自己根目录下的 .wgetrc 里加上代理服务器,以便 wget 能通过代理正常下载:

$ vi .wgetrc
http_proxy = http://proxy.vpsee.com:3128/
use_proxy = on

加入到自动启动脚本中:

$ sudo update-rc.d xend defaults 20 21
$ sudo update-rc.d xendomains defaults 21 20

安装 Xen 内核

下载 xen 内核,给内核打补丁:

$ cd
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.8.tar.bz2
$ tar -xjf linux-2.6.31.8.tar.bz2

$ wget http://gentoo-xen-kernel.googlecode.com/files/xen-patches-2.6.31-10.tar.bz2
$ mkdir xenpatch-2.6.31.8
$ cd xenpatch-2.6.31.8
$ tar -xjf ../xen-patches-2.6.31-10.tar.bz2
$ cd ..

$ cd linux-2.6.31.8
$ for i in `ls ../xenpatch-2.6.31.8/`; do patch -p1 < ../xenpatch-2.6.31.8/"$i"; done

配置内核,直接把系统已经存在的配置文件拷过来然后在此基础上修改:

$ cp /boot/config-2.6.31-14-server .config
$ make menuconfig

Processor type and features --->
  [*] Enable Xen compatible kernel
Networking support --->
  Networking options --->
    <*> 802.1d Ethernet Bridging
Device Drivers --->
  XEN --->
    [*] Privileged Guest (domain 0)
     Backend driver support
       Block-device backend driver
       Block-device tap backend driver
       Block-device tap backend driver 2
       Network-device backend driver
       PCI-device backend driver
       SCSI backend driver
       USB backend driver
    <*> Block-device frontend driver
    <*> Network-device frontend driver
     SCSI frontend driver
     USB frontend driver
    <*> Framebuffer-device frontend driver
    <*>   Keyboard-device frontend driver
    [*] Disable serial port drivers
    <*> Export Xen attributes in sysfs
        Xen version compatibility (3.3.0 and later) --->
           3.3.0 and later

配置好内核参数以后,保存配置文件、退出配置界面就可以开始编译 Linux 内核了:

$ make
$ sudo make install
$ sudo make modules_install
$ sudo update-initramfs -c -k 2.6.31.8
$ sudo depmod 2.6.31.8

如果 Xen 加了内核模块的话加入 /etc/modules 文件以便启动时候自动加载:

$ sudo vi /etc/modules
...
netbk
blkbk

Ubuntu 9.10 默认用的是 grub 2.0,被证实一些 bug 会导致 Xen 不能正常启动,删除 grub 2.0 换成老版本的 grub:

$ sudo apt-get purge grub-pc
$ sudo rm /boot/grub/*
$ sudo apt-get install grub
$ sudo grub-install --recheck /dev/sda
$ sudo update-grub
$ sudo vi /boot/grub/menu.lst

重新启动系统,就应该可以进入 dom0 了:

$ sudo reboot

Troubleshooting

如果重新启动系统能正常进入 dom0 但是执行 xm 命令时报错:

$ sudo xm list
Error: Unable to connect to xend: No such file or directory. Is xend running?

检查 Xen 日志,发现 'Permission denied' 问题,这也是常见问题,是因为 xen tools 和内核不搭配:

$ vi /var/log/xen/xend.log
...
[2010-04-16 11:55:57 2320] INFO (SrvDaemon:219) Xend exited with status 1.
[2010-04-16 13:56:04 13207] INFO (SrvDaemon:331) Xend Daemon started
[2010-04-16 13:56:04 13207] INFO (SrvDaemon:335) Xend changeset: unavailable.
[2010-04-16 13:56:04 13207] ERROR (SrvDaemon:347) Exception starting xend ((13, 'Permission denied'))
...

$ vi /var/log/xen/xend-debug.log
...
Xend started at Fri Apr 16 13:56:04 2010.
domctl operation failed -- need to rebuild the user-space tool set?
sysctl operation failed -- need to rebuild the user-space tool set?
Exception starting xend: (13, 'Permission denied')
...

所以解决办法就是下载对应的 xen 内核版本和 xen 工具。

XVPS:$6.5 256MB OpenVZ VPS

xvps

XVPS 是家美国公司,在英国有分支机构,原价8美元的这款 VPS 现在只要6.5美元。他们家的服务器托管在 Sentris,Sentris 是一家提供dedicated server 的老牌托管公司,走的是低价路线。他们公司域名托管在 afraid.org. 他们的网站做的和 Delimiter.us 的风格很像,经公司创始人 Mark Chenoweth 解释他们雇佣了设计 Delimiter.us 的人来设计他们的网站。VPS 配置如下:

服务器在 Seattle, US 和 UK
SolusVM 控制面板
256MB Guaranteed RAM,512MB Burst
30GB 硬盘
300GB 带宽
1个 IP
6.5美元

服务器配置:

Most of the nodes have 16gb memory, several hard drives.

RedHat 发布 RHEL 6 Beta 版本

开会回来,会议只用了1天,剩下3天都在休息,会议地点在度假胜地,没有 wifi,环山靠海,所以手机信号也不好,很艰难的用 iPhone 3G 开通了几个 VPS,还好客户都很有耐心,回来需要进一步把客户资料整理一下。

上个星期 RedHat 发布了他们下一代旗舰产品 RedHat Enterprise Linux 6 的 Beta 版本,下载地址可以在这里找到。RHEL 6 去掉了 Xen,只保留了 KVM,KVM 自从2009年9月被引入到 RHEL 5.4 以后在 RedHat 的大力支持下发展迅猛。我们以前分析过目前 KVM 的稳定性和 Xen 比起来还有待提高,工业界应用不广,Amazon, Rackspace Cloud, Linode, SliceHost, GoGrid, Right Scale 等业界一批领先的云计算和 VPS 服务商都是采用成熟的 Xen 虚拟技术, IBM/HP/Dell/Intel 都有在 Xen 上投资,并都开发了针对 Citrix XensServer 的服务器和完整的企业虚拟解决方案。Hosting 行业只有少数几个规模很小的 KVM VPS 服务商,不知道 RHEL 6 正式推出后,KVM 的状况会不会得到大的改善,能得到大厂商的支持很重要。

VPSee 对 KVM 比较看好的一点就是,以后任何运行 Linux 的设备(电脑、手机、阅读器、路由器等)都可以作为 host 来做虚拟平台,应用范围将比 Xen 大很多,现在 Xen 只限在服务器领域,如果要移植到手机上,不但手机操作系统内核要改,而且 Xen 也要改,当然,KVM 也不这么乐观,如果想运行 KVM,必须有支持 Intel VT 或 AMD SVM 的 CPU,目前手机等设备都不支持这类 CPU.

RHEL 6 Beta 的下载很火爆,RedHat 的 FTP 服务器经常 “too many connections”,VPSee 挤了半天才挤进去,下面是两张在 VMware 上的安装截图:

my mac sys info

my mac sys info

Hostfolks:$4.45 256MB OpenVZ VPS

hostfolks

Hostfolks 是家英国 VPS 公司,创立于2001年,开始是一家提供 web hosting 和域名注册服务的公司,现在的业务几乎保罗了 hosting 的每个业务,服务器分布在美国的3个数据中心和1个英国的数据中心。奇怪的是,今年3月份的时候,他们家在 WHT 上推出过一款 512MB/20GB/1000GB/2 IPs/vePortal 的 OpenVZ VPS,VPSee 一看这款 VPS 的配置就知道是 BurstNET 的 reseller VPS,现在他们的 VPS 配置变了,不知道又变成谁的 reseller 了。刚开始觉得这家公司 “历史悠久”,可能会有戏,稍微调查一下发现原来是 reseller,做了这么多年还是 reseller 让人觉得不踏实,而且还不断换 reseller,客户经不起折腾啊。Reseller 最大的问题是在客户和 provider 之间多了一层,这一层代理增加了客户的沟通难度和时间成本,provider-reseller-client 三方沟通起来会更困难而且还耽误时间,如果这三方跨3个时区的话,出了一个问题不知道三方要沟通到什么时候才能解决。跨3个时区一点都不夸张,比如:某个中国 VPS 用户买了 Hostfolks 在美国数据中心的 VPS 的话,那么这位 VPS 用户就是跨了3个时区,他出了问题首先找 Hostfolks,因为 Hostfolks 是英国公司(美国的 reseller),所以 Hostfolks 要等到美国人起床以后才能处理问题,问题处理完了还要反馈到这位中国 VPS 用户,这是理想情况,如果一次沟通不清呢?他们不是有 24×7 服务吗?VPSee 提醒大家别太相信 24×7,那是宣传标语,就像所有饮料都声称自己没有添加防腐剂、色素一样。他们的公司域名是2005年才注册的,不是想象中的2001年。他们使用 HyperVM 控制面板,配置如下:

Economy Deluxe
256MB Guaranteed RAM 512MB Guaranteed RAM
25GB 硬盘 50GB 硬盘
500GB 带宽 1000GB 带宽
1 IP 2 IPs
4.45美元 8.95美元

没有服务器配置信息。

在 CentOS 下源码安装 Xen

在 CentOS 源码编译安装 Xen 的过程和在 Debian 上编译安装 Xen 的过程差不多,只是第一步安装编译所需要的工具和软件包有所不同,后续步骤有点小差别,不过方法都是一样的,这也说明各个 Linux 发行版之间的区别真的不大,没有必要为选择 Linux 发行版而发愁。编译一个 Xen 内核和编译一个普通 Linux 内核没有什么不同,如果发现编译后的内核启动不了,出现 kernel panic 的情况,多半是内核与机器的硬件没有配置好的原因,和 Xen 没有关系,比如常见的 switchroot: mount failed: No such file or directory 就可能是因为内核配置的时候忘了加上 root 的硬盘驱动,也可能找到驱动了但是挂载的时候发现文件系统类型不对,等等。VPSee 在一台 Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz, 4GB 机器上使用最新的 Xen 4.0.0 源代码和 CentOS 5.4 完成以下操作。这里还有在 Ubuntu 上源码安装 Xen 的详细过程。如果觉得源码安装很麻烦的话,这里有 在 CentOS 上安装和配置 Xen 的二进制安装过程。

安装需要的软件包

首先最小化安装 CentOS,然后安装编译 Xen 和 Linux xen kernel 所需要的软件包:

# yum groupinstall "Development Tools" 
# yum install hmaccalc ncurses-devel zlib-devel openssl-devel python-devel \
bridge-utils  libtool-ltdl iasl xorg-x11-drv-evdev xorg-x11-drv-fbdev \
xorg-x11-drv-i810-devel xorg-x11-drv-via-devel xorg-x11-proto-devel \
xorg-x11-server-sdk xorg-x11-xtrans-devel

安装完以上软件包后,剩下的操作就和在 Debian 上编译和安装 Xen 差不多了。

安装 Xen hypervisor 和 tools

到 http://www.xen.org/products/xen_source.html 下载最新的 Xen 源代码,然后解开、编译、安装,标准的 Linux 软件源码安装动作:

$ tar zxvf xen-4.0.0.tar.gz
$ cd xen-4.0.0/
$ make xen tools stubdom
# make install-xen install-tools install-stubdom

上面 make stubdom 的时候会从网上自动下载一些东西,所以如果是用代理上网的话需要在自己根目录下的 .wgetrc 里加上代理服务器,以便 wget 能通过代理正常下载:

$ vi .wgetrc
http_proxy = http://proxy.vpsee.com:3128/
use_proxy = on

加入到启动脚本:

# /sbin/chkconfig --add xend
# /sbin/chkconfig --add xendomains
# /sbin/chkconfig xend on
# /sbin/chkconfig xendomains on

安装 Xen 内核

下载 Linux 内核后给内核打 xen 补丁:

$ cd
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.8.tar.bz2
$ tar -xjf linux-2.6.31.8.tar.bz2

$ wget http://gentoo-xen-kernel.googlecode.com/files/
xen-patches-2.6.31-10.tar.bz2
$ mkdir xenpatch-2.6.31.8
$ cd xenpatch-2.6.31.8
$ tar -xjf ../xen-patches-2.6.31-10.tar.bz2
$ cd ..

$ cd linux-2.6.31.8
$ for i in `ls ../xenpatch-2.6.31.8/`; \
do patch -p1 < ../xenpatch-2.6.31.8/"$i"; done

配置带 xen 的 Linux 内核:

$ make menuconfig

Processor type and features --->
  [*] Enable Xen compatible kernel
Networking support --->
  Networking options --->
    <*> 802.1d Ethernet Bridging
Device Drivers --->
  XEN --->
    [*] Privileged Guest (domain 0)
     Backend driver support
       Block-device backend driver
       Block-device tap backend driver
       Block-device tap backend driver 2
       Network-device backend driver
       PCI-device backend driver
       SCSI backend driver
       USB backend driver
    <*> Block-device frontend driver
    <*> Network-device frontend driver
     SCSI frontend driver
     USB frontend driver
    <*> Framebuffer-device frontend driver
    <*>   Keyboard-device frontend driver
    [*] Disable serial port drivers
    <*> Export Xen attributes in sysfs
        Xen version compatibility (3.3.0 and later) --->
           3.3.0 and later

配置好内核参数以后,保存并退出,开始编译 Linux 内核:

$ make
$ make modules
# make modules_install
# make install
# /sbin/depmod 2.6.31.8

更新 grub:

#  vi /boot/grub/menu.lst
...
title CentOS (2.6.31.8-xen)
        root (hd0,0)
        kernel /xen-4.0.0.gz
        module /vmlinuz-2.6.31.8 ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.31.8.img
...

重启系统,确认 Xen 安装成功:

# reboot

# uname -a
Linux localhost.localdomain 2.6.31.8 #2 SMP Tue Apr 20 11:19:19 SAST 2010 x86_64 GNU/Linux

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3713     4     r-----     36.0

DialAHost:£1.95 128MB OpenVZ VPS

dialahost

DialAHost 是家英国公司(DialANetwork Limited),2010年刚刚创立。推出了一些优惠 VPS,可惜 VPSee 发现得太晚,他们的优惠截止日期是4月22日,也就是明天。虽然他们是家英国的公司却把服务器放在美国的 Scranton,估计租用的是 BurstNET 或 HostNOC 的服务器,他们的网站放在法国的 OVH(OVH 是全世界最大的托管公司之一),域名是去年9月份注册的,不到一年。根据这家公司创始人在论坛上的留言发现他们好像对技术不是很了解,甚至分不清 DNS 服务器 down 了以后对他们的 Email 服务有什么影响。VPSee 以前提到过在 hosting 行业,很少是科班出身的,大多都是半路出家,在购买之前看清 provider 的技术实力很重要,这里有个反面教材。他们的 VPS 使用 SolusVM 控制面板,配置如下:

Budget-1 Budget-2
128MB Guaranteed RAM 256MB Guaranteed RAM
15GB 硬盘 40GB 硬盘
150GB 带宽 400GB 带宽
1.95英镑 3.90英镑

服务器配置:

Xeon Dual Core 2.13GHz

HostLatch:$5.95 512MB OpenVZ VPS

hostlatch

HostLatch 推出一周年庆祝优惠,使用优惠码 celebrate65 首轮付款可以立即获得65%的优惠,使用优惠码 celebrate25 可以获得永久25%的优惠,VPSee 经常会在 WHT 上看到这家 VPS Provider 打折,比如:2009年7月打折8月打折11月打折2010年4月打折,找各种理由打折,呵呵,5.95美元是打折前的价格。当时不看好这家 provider,现在看来他们居然撑过一年了。网上对这家 provider 的负面评论挺多,从服务到 VPS 都有抱怨,抱怨管理员很 rude,抱怨服务慢、开通慢,抱怨他们的 HyperVM 控制面板重启 VPS 后就回不来了(他们现在改成 SolusVM 控制面板了),还有他们自家的网站居然是另一个叫做 GrandiosHost 的公司托管的,难道没有信心放在自己的服务器上么?VPS 配置如下:

服务器在 Orlando 和 Dallas
SolusVM 控制面板
512MB Guaranteed RAM,768MB Burst
60GB 硬盘
300GB 带宽
1个 IP
5.95美元

服务器配置:

Intel Xeon X3440 @ 2.53 GHz, 8 GB RAM, 500 GB (x4) hard drives in RAID10 configuration, 100mbit

你机器的 Geekbench 是多少?

大家玩 VPS 都喜欢用 unixbench 测试一下 VPS 的性能、玩电脑都想知道自己机器的性能,这里介绍另一个不是很专业的测试工具 Geekbench,Geekbench 支持 Mac OS X, Linux 和 Window 等多种平台,是 Mac 上较常用的测试工具,主要测试 CPU 和内存系统的性能。Geekbench 的64位版本是收费的,可免费使用32位版本测试。如果对自己机器比较有信心可以把结果提交到 Geekbench 网站上,看看能不能进入 Top 100,目前最高分数是 26267,由一个 Six-Core @ 2.81 GHz 4 processors, 24 cores, Solaris x86 的机器创造的。不过 unixbench 和 geekbench 的分数玩玩可以,不用太当真,现实中的服务器性能评测很复杂,取决于多种因素和具体的应用,不能简单拿这个分数作比较,这个测试充其量就只能拿来看看不同 CPU 的运算能力。透露一下 VPSee 的 MacBook Pro 15″ 的硬件配置和 Geekbench 分数(少得可怜):

my mac sys info

my mac geekbench score

在 Debian 上源码安装 Xen

博客上有位网友遇到源代码安装的问题,留了不少评论。源代码安装不难就是麻烦,如果不是特别需要还是选择二进制安装比较方便,直接用 yum install,apt-get install 或者 emerge 轻松搞定。源代码安装有两个好处,一个是可以定制 Linux 内核,这样可以删除网卡、无线、USB、蓝牙、多余的文件系统等 n 多服务器不需要的硬件驱动和模块,得到一个最小而且针对硬件编译过的内核,性能会好很多;第二个就是二进制发布往往滞后,所以如果想尝鲜新功能的话就只能源码安装。安装服务器前对每台服务器的硬件都做记录是个好习惯,特别是服务器多的时候,方便以后需要的时候查阅,VPSee 在内部使用 Wiki 记录服务器硬件信息,用源代码控制工具来追踪系统配置文件的更改。以下的操作记录使用最新的 Xen 4.0.0 源代码版本和 Debian 5.04,这里有在 CentOS 下源码安装 Xen 和 在 Ubuntu 上源码安装 Xen 的过程。

安装需要的软件包

首先最小化安装 Debian,然后安装编译 Xen 和 Linux xen kernel 所需要的软件包:

# apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 \
libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfo \
pciutils-dev mercurial build-essential make gcc libc6-dev \
zlib1g-dev python python-dev python-twisted libncurses5-dev \
patch libvncserver-dev libsdl-dev libjpeg62-dev uuid-dev iasl

# apt-get build-dep linux

如果是64位系统的话,还需要安装:

# apt-get install gcc-multilib

安装 Xen hypervisor 和 tools

到 http://www.xen.org/products/xen_source.html 下载最新的 Xen 源代码,然后解开、编译、安装,标准的 Linux 软件源码安装动作:

$ tar zxvf xen-4.0.0.tar.gz
$ cd xen-4.0.0/
$ make xen tools stubdom
# make install-xen install-tools install-stubdom

上面 make stubdom 的时候会从网上自动下载一些东西,所以如果是用代理上网的话需要在自己根目录下的 .wgetrc 里加上代理服务器,以便 wget 能通过代理正常下载:

$ vi .wgetrc
http_proxy = http://proxy.vpsee.com:3128/
use_proxy = on

加入到自动启动脚本中:

# update-rc.d xend defaults 20 21
# update-rc.d xendomains defaults 21 20

安装 Xen 内核

下载 xen 内核,给内核打补丁:

$ cd
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.8.tar.bz2
$ tar -xjf linux-2.6.31.8.tar.bz2

$ wget http://gentoo-xen-kernel.googlecode.com/files/
xen-patches-2.6.31-10.tar.bz2
$ mkdir xenpatch-2.6.31.8
$ cd xenpatch-2.6.31.8
$ tar -xjf ../xen-patches-2.6.31-10.tar.bz2
$ cd ..

$ cd linux-2.6.31.8
$ for i in `ls ../xenpatch-2.6.31.8/`; \
do patch -p1 < ../xenpatch-2.6.31.8/"$i"; done

配置内核,直接把系统已经存在的配置文件拷过来然后在此基础上修改:

$ cp /boot/config-2.6.31-14-server .config
$ make menuconfig

Processor type and features --->
  [*] Enable Xen compatible kernel
Networking support --->
  Networking options --->
    <*> 802.1d Ethernet Bridging
Device Drivers --->
  XEN --->
    [*] Privileged Guest (domain 0)
     Backend driver support
       Block-device backend driver
       Block-device tap backend driver
       Block-device tap backend driver 2
       Network-device backend driver
       PCI-device backend driver
       SCSI backend driver
       USB backend driver
    <*> Block-device frontend driver
    <*> Network-device frontend driver
     SCSI frontend driver
     USB frontend driver
    <*> Framebuffer-device frontend driver
    <*>   Keyboard-device frontend driver
    [*] Disable serial port drivers
    <*> Export Xen attributes in sysfs
        Xen version compatibility (3.3.0 and later) --->
           3.3.0 and later

配置好内核参数以后,保存配置文件、退出配置界面就可以开始编译 Linux 内核了:

$ make
# make install
# make modules_install
# update-initramfs -c -k 2.6.31.8
# depmod 2.6.31.8

如果 Xen 加了内核模块的话加入 /etc/modules 文件以便启动时候自动加载:

# vi /etc/modules
...
netbk
blkbk

更新 grub:

#  update-grub
#  vi /boot/grub/menu.lst

重新启动系统,就应该可以进入 dom0 了:

# reboot

# uname -a
Linux debian 2.6.31.8 #1 SMP Sat Apr 17 09:26:20 SAST 2010 x86_64 GNU/Linux

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   3713     4     r-----     48.7