[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

这篇文章简短地解释如何将一个原生的 CentOS-4 安装移进一个半虚拟化的 Xen3 客端内。该 Xen3 主机可以是任何操作系统 —— 甚至乎 NetBSD —— 但这份教学文件假设它是 Red Hat 化的 linux 如 RHEL5、CentOS-5 或 FC6。

声明

这份教学文件属实验性质并且未经充份测试,它只适合我用。因此如果它毁坏了你的系统,请不要责怪它,但你可电邮给我: centos-mail at nils dot toedtmann dot net。

网络设置、NFS 主目录或 X 都超出这篇文章的范围,请你自己查阅说明书:

迁移

做好准备

假若 CentOS-4.5 已被发行:请升级!

CentOS-4.4 其实并不适合成为一台 DomU。因此当你在阅读这篇文章时知道 CentOS-4.5 已经被发行,请将你的 CentOS-4 升级。你将会发现,这样可以简化整件事。

Domain-0

请在你预备将 CentOS-4 虚拟化的硬件上安装一台建基于 RH 的 Domain-0 操作系统(包含虚拟化软件群组的 FC6/RHEL5/CentOS-5)。请引导该 Dom0 并确定 xend 这个服务正在运行中。

Domain-U 定位

方块设备的对照

让我们假设你的 CentOS-4 安装名为 C4 并已安装在一个名为 /dev/mapper/VolGroup00-C4 般的方块设备上。你须要修改 C4 的目录树,因此请将它挂载在某处:

[root@dom0 ~]# mount /dev/mapper/VolGroup00-C4 /mnt
[root@dom0 ~]# mount /dev/whatever             /mnt/whereever
[root@dom0 ~]# mount -o bind /proc             /mnt/proc
[root@dom0 ~]# mount -o sys  /sys              /mnt/sys

如果你的 C4 拥有一个独立的 /boot 分区,你可不必理会并直接采用空置的 /boot 目录(你甚至可以删除所有内核及 grbu 的 rpm 组件)。如果你计划同时以原生的 C4 及虚拟化的 C4 双重开机,请保留它,否则你可以违弃它。如果你不肯定的话,请复制它的内容:

[root@dom0 ~]# mount  /dev/hda1 /mnt2
[root@dom0 ~]# cp -a  /mnt2/* /mnt/boot
[root@dom0 ~]# umount /mnt2

请将你的(旧)原生 C4 方块设备对照到(新的)虚拟 SCSI 设备。例如:

mount point

native

virtual

/boot

/dev/hda1

obsolete

/

/dev/mapper/VolGroup00-C4

/dev/sda1

swap

/dev/mapper/VolGroup00-C4_swap

/dev/sda2

/whereever

/dev/whatever

/dev/sda3

请在 C4 的文件系统表 /mnt/etc/fstab 内作出相应的改动:

...
#obsolete   /boot       ext3    defaults   1 1
/dev/sda1   /           ext3    defaults   1 1
/dev/sda2   swap        swap    defaults   0 0
/dev/sda3   /whereever  ext3    defaults   1 1
...

DomU 内核

请阅读下面关于内核的备注!

只适合 CentOS-4.5:应该很简单

[root@dom0 ~]# chroot /mnt yum install kernel-xenU

只适合 CentOS-4.4:请取得一个供 RHEL4CentOS4 用的试验性 DomU 内核,例如:

[root@dom0 ~]# wget -P /mnt/tmp/ \
 http://people.redhat.com/~jbaron/rhel4/RPMS.kernel/kernel-xenU-2.6.9-44.EL.i686.rpm
[root@dom0 ~]# chroot /mnt rpm -ivh /tmp/kernel-xenU-2.6.9-44.EL.i686.rpm

无论如何,你应该产生一个开机用的 ramdisk —— rpm 在安装时顷向会遗漏 xenblk.ko

[root@dom0 ~]# chroot /mnt mkinitrd --preload xenblk \
               /boot/myinitrd-2.6.9-44.ELxenU.img 2.6.9-44.ELxenU

开机程序

那个类似 grub 的 PyGrub 开机程序将会驻在 DomU 以外,它附属于 Dom0 的 Xen3 发行。它会读入 DomU 的 /mnt/boot/grub/menu.lst,因此请根据已安装的 DomU 内核来创建它(如果 /mnt/boot 是空置的话,请执行 mkdir -p /mnt/boot/grub):

default         0
timeout         3
title           CentOS 4 (2.6.9-44.ELxenU)
  kernel        /boot/vmlinuz-2.6.9-44.ELxenU root=/dev/sda1 ro 3
  initrd        /boot/myinitrd-2.6.9-44.ELxenU.img

glibc

只适合 i386/x86_32 上的 CentOS-4.4:请将某些函式库改为来自 XensourceXen 友善版本。请找出你安装了哪些函式库及它们的类型

[root@dom0 ~]# chroot /mnt rpm -q --qf "%{name} %{arch}\n" \
  glibc{{,-debuginfo}{,-common},-devel,-headers,-profile,-utils} nptl-devel nscd

然后取替它们。例如

[root@dom0 ~]# wget -P /mnt/tmp/ \
http://xenbits2.xensource.com/glibcs/rhel44/RPMS/i686/glibc-2.3.4-2.25.xs0.4.3.56.i686.rpm
[root@dom0 ~]# wget -P /mnt/tmp/ \
http://xenbits2.xensource.com/glibcs/rhel44/RPMS/i386/glibc-common-2.3.4-2.25.xs0.4.3.56.i386.rpm 
 ...
[root@dom0 ~]# chroot /mnt rpm -Fvh /tmp/*rpm

警告:很不幸的,Xensource 并不提供一个 Yum 软件库。因此假若 CentOS 提供了 glibc 的更新,执行 yum update 将会盖掉对 Xen 友善的版本,导致系统减慢。某些软件(如 OpenLDAP、Cyrus-IMAPd)更可能不能运作!

控制台

可能只适用于 CentOS-4.4)Xen-Console 可以在 DomU 的 /dev/console 上运作,因此你在 /mnt/etc/inittab 应该为它开一个 getty:

...
# 在标准执行级别下运行 getty
0:2345:respawn:/sbin/mingetty --noclear console
1:2345:respawn:/sbin/mingetty tty1
...

网络

DomU 的 ethX 所用的驱动程序是 xennet.ko,因此请在 DomU 的 /mnt/etc/modprobe.conf 内作出相应调整:

alias eth0 xennet

可能只适用于 CentOS-4.4)某些 DomU 内核(例如以上的试验性版本)的 xennet 驱动程序内含有错误,并将 TCP 及 UDP 的检查码计算错。你可以通过在 ethX 设备上停用 TX 检查码来避免碰上这个问题。请创建一个可执行的脚本 /mnt/sbin/ifup-local

ethtool -K ${1} tx off

最后

你可以 chroot 到你的 C4 中并做一些个人化的设置(譬如在 /etc/sysconfig/network{,-scripts/ifcfg-eth*} 内设置网络):

[root@dom0 ~]# chroot /mnt
$ ……在这里做些有趣的事情……
$ exit
[root@dom0 ~]#

当你完成后,请将你的 C4 卸下:

[root@dom0 ~]# umount /mnt/{sys,proc,whereever,} 

引导它!

请创建 Xen 配置文件 /etc/xen/C4

name       = 'C4'
bootloader = '/usr/bin/pygrub'
memory     = 128
vif        = [ '' ]
disk       = [ 'phy:mapper/VolGroup00-C4,sda1,w',
               'phy:mapper/VolGroup00-C4_swap,sda2,w',
               'phy:whatever,sda3,w' ]

然后引导它:

[root@dom0 ~]# xm create -c C4

如果你的 DomU 采用 SELinux,你须要撤消自从上次(原生)引导以来被替换或创建的文件的脉络:

[root@C4 ~]# setenforce 0
[root@C4 ~]# restorecon -v -R /etc
[root@C4 ~]# restorecon -v -R /boot
[root@C4 ~]# restorecon -v /sbin/ifup-local
[root@C4 ~]# fixfiles -R kernel-xenU,glibc,glibc-common,... relabel
[root@C4 ~]# reboot

如果你记不起哪些文件的脉络不完整,你可以让 CentOS 重新标签整个文件系统:

[root@C4 ~]# touch /.autorelabel
[root@C4 ~]# reboot

备注

内核与监督器

你的半虚拟化 DomU 内核必须具有能力在 Xen3 监督器上运行。Xen3 的监督器的 ABI 其实仍未稳定,但自从 Xen-3.0.2 起提供了一个多数监督器及内核都认知的向后兼容模式。然而有三种互不兼容的监督器类型,须要由半虚拟化的 DomU 内核去吻合的:

请查阅 Dom0 在 /sys/hypervisor/properties/capabilities 里的首个数值(xen-3.0-*)来找出你的监督器/Dom0 组合。你从 Fedora/RH/CentOS 所取得的 32 位元 监督器及内核拥有 PAE,而那些来自 CambridgeXenSource不拥有 PAE。(肯定吗?请复核!)

内核与开机程序

采用 PyGrub 的优点就是内核、可装内核模块 及 initrd 都完全包含在 DomU 之内。内核升级时你只需在 DomU 内执行 rpm -iyum update(CentOS-4.5)。

如果你想将选择内核的控制权移交给 Dom0,请将内核及 initrd 复制到 Dom0

[root@dom0 ~]# cp /mnt/boot/vmlinuz-2.6.9-44.ELxenU       /boot
[root@dom0 ~]# cp /mnt/boot/myinitrd-2.6.9-44.ELxenU.img  /boot

然后将 Xen 配置文件 /etc/xen/C4 内的 bootloader 选项更改为

kernel  = "/boot/vmlinuz-2.6.9-44.ELxenU"
root    = "/dev/sda1 ro"
extra   = "3"
ramdisk = "/boot/myinitrd-2.6.9-44.ELxenU.img"

然而将内核及 initrd 放置在 Dom0,但将可装内核模块放置在 DomU 内对升级并不友善。

如果你执行一堆需要相同内核功能的轻量「程序用」DomU,而且 Dom0 处理所有 GNBD/RAID/LVM/DM 的工作(请参阅下文,「方块设备」),你应该考虑创建一个以静态连结、内置了 xenblkxennet的内核:它没有 initrd、没有可装的模块,而且所有 DomU 的内核都可以放在同一个地方。

函式库

(有待撰写)

方块设备

由于方块设备多数是分层的,你有很多途径可以将它们对照到 DomU 内。假设有两个硬盘(hda、hdc)、其中两个分区合成一个 Raid1(hda3+hdc4=md0),其上的 LVM 逻辑磁盘区(VolGroup00-C4)内藏有 DomU 的主目录。

disk = [ 'phy:hda,sda,w', 'phy:hdc,sdb,w' ]

disk = [ 'phy:hda3,sda1,w', 'phy:hdc4,sdb1,w' ]

disk = [ 'phy:md0,sda1,w' ]

disk = [ 'phy:mapper/VolGroup00-C4,sda1,w' ]

我首选后者,由 Domain-0 处理所有 GNBD/LVM/Raid/DM 的工作。请留意被对照到 DomU 的方块设备不能被其它本地所应用!

网络

假若你不喜欢 xend 修改你的 Dom0 网络设置,请编辑 Dom0 的 /etc/xen/xend-config.sxp,最主要的选项是 network-scriptvif-script

我较喜欢通过 /etc/sysconfig/network-scripts/brX 自行设置网桥,并调整 /etc/xen/xend-config.sxp 来采用「路由网桥」的混合模式:

(network-script network-route)
(vif-script vif-bridge)

接着放入

vif = [ 'bridge=brX' ]

于 xen 的 DomU 配置文件内。于是客端便通过网桥集合起来,而 Dom0 为这些网桥选路到外界。

X

你有数个选择:

X 转接

你可以通过 SSH 的 X 转接来执行 X 应用程序:

[alice@client ~]# ssh -X domU-hostname xterm

如果这样已能满足你的需要,X 或显示管理员便无须在 DomU 上运行。

虚拟帧缓冲器

(有待撰写)

GDM + VNC

(有待撰写)

GDM + RDP

(有待撰写)

GDM + 远程 X

(有待撰写)

Xvnc

假设 DomU 的用户 alice 想执行一个 Xvnc 服务器。她应该为自己设置一个 VNC 密码

[alice@domU ~]# vncpasswd

DomU 的管理员在 /etc/sysconfig/vncservers 内设置该 VNC 服务器

VNCSERVERS="1:alice"
VNCSERVERARGS[1]="-geometry 800x600"

然后引导它

[root@domU ~]# /etc/init.d/vncserver restart

现在 Alice 可以从外界连接到她的 VNC 服务器:

[alice@client ~]# vncviewer domU-hostname:5901

文档路线图

Translation of revision 12


2023-09-11 07:23