作者:北南南北
来自:LinuxSir.Org
摘要: 本文是根据 《Xen v3.0 用户手册》的实践篇,将初学者需要掌握的Xen基础知识清点了一下。在本文中举了一个实例,用Slackware虚拟 Fedora ;最好能对大家有点帮助吧;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0、本文约定;
虚拟平台是指能支持运行Xen的真实安装的操作系统;
虚拟操作系统:是指在虚拟平台上安装和虚拟运行的操作系统;
比如我在Slackware 中安装了Xen,那Slackware就是虚拟平台,通过虚拟平台就可以虚拟其它操作系统了;比如通过Slackware来虚拟Debian、Fedora ... ...
1、什么是Xen;
Xen 是一个开放源代码的para-virtualizing虚拟机(VMM),或“管理程序 ”,是为x86架构的机器而设计的。Xen 可以在一套物理硬件上安全的执行多个虚拟机;Xen是基于内核的虚拟程序,它和操作平台结合的极为密切,所以它占用的资源最少。
什么是虚拟机呢?可能大家知道VMWARE吧,是的,Xen就是类似这样的程序,比如我们可以在Fedora 上虚拟安装和使用Slackware、Debian、Gentoo ... ... 等发行版。因为Xen是基于内核的,相对VMWARE 来说,它占用的系统资源也就是VMWARE的百分之几左右。Xen是不是更有优势呢?只有您实践了才知道。这也是我写本文的最主要原因;
1.1 Xen的特性;
虚拟机的性能更接近真实硬件环境)
在真实物理环境的平台和虚拟平台间自由切换)
在每个客户虚拟机支持到 32个虚拟CPU,通过 VCPU热插拔)
支持PAE指令集的x86/32, x86/64平台
通过Intel 虚拟支持VT的支持来用虚拟原始操作系统(未经修改的)支持(包括Microsoft Windows)
优秀的硬件支持.支持几乎所有的Linux设备驱动
1.2 Xen的应用范围;
服务器整合:在虚拟机范围内,在一台物理主机上安装多个服务器, 用于演示及故障隔绝;
无硬件依赖:允许应用程序和操作系统对新硬件的移值测试;
多操作系统配置:以开发和测试为目的,同时运行多个操作系统;
内核开发:在虚拟机的沙盒中,做内核的测试和调试,无需为了测试而单独架设一台独立的机器;
集群运算:和单独的管理每个物理主机相比较,在VM级管理更加灵活,在负载均衡方面,更易于控制,和隔离;
为客户操作系统提供硬件技术支持:可以开发新的操作系统, 以得益于现存操作系统的广泛硬件支持,比如Linux;
1.3 Xen的操作系统支持和硬件支持;
请参阅: 《Xen v3.0 用户手册》
2、Xen的一点理论基础;
基于Xen的操作系统,有多个层,最底层和最高特权层是 Xen程序本身。Xen 可以管理多个客户操作系统,每个操作系统都能在一个安全的虚拟机中实现。在Xen的术语中,Domain由Xen控制,以高效的利用CPU的物理资源。每个客户操作系统可以管理它自身的应用。这种管理包括每个程序在规定时间内的响应到执行,是通过Xen调度到虚拟机中实现。
当Xen启动运行后,第一个虚拟的操作系统,就是Xen本身,我们通过xm list,会发现有一个Domain 0的虚拟机。Domain 0 是其它虚拟主机的管理者和控制者,Domain 0 可以构建其它的更多的Domain ,并管理虚拟设备。它还能执行管理任务,比如虚拟机的体眠、唤醒和迁移其它虚拟机。
一个被称为xend的服务器进程通过domain 0来管理系统,Xend 负责管理众多的虚拟主机,并且提供进入这些系统的控制台。命令经一个命令行的工具通过一个HTTP的接口被传送到xend。
3、Xen的安装;
在写本文时,Xen的当前最新版本是xen-3.0.1,它基于的内核版本是2.6.12.6的。您可以根据自己的操作系统的情况来选择一种安装方式,适合您的就是最好的;
3.1 安装Xen的准备工作;
拥有 GRUB引导的Linux做为安装平台,还要编译工具,比如gcc、binutils 及make和automake等;开发库有zlib和python-dev等;
具体明细请参阅: 《Xen v3.0 用户手册》
由于Xen用Python 开发的,所以Python 当然也是必不可少的。如果您是新手,我建议您用自己所用的操作系统软件包管理工具来安装这些软件包。
3.2 在Redhat/Fedora 操作平台上的安装;
在Fedora/Redhat平台上安装比较简单,您可以通过yum 来在线安装Xen和支持Xen的内核;因为Fedora/Redhat已经提供对Xen的支持了;Fedora/Redhat 提供的Xen内核支持比较高;不过就目前我的测试来看好象经常会机器重启,存在的问题可能是桌面环境造成的,比如GNOME桌面,打开就有重启的现象,也可能是Fedora/Redhat提供的Xen内有BUG;
安装Xen及支持Xen的请参考:《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》
对于Fedora 4.0及Redhat和Fedora 5.0类似;现在Yum的源上都有Xen和支持Xen的内核包;
3.3 通过Xen的二进制包来安装(几乎适用所有的Linux发行版);
通过Xen的二进制软件包来安装,这应该是通用的,几乎适合所有的Linux操作系统。由于二进制所是已经编译好的,我已经在Slackware 平台上用这种方法来安装,还是成功的。另外etony兄也在Debian上安装成功;
您应该到 http://www.xensource.com/downloads 去下载二进制包,文件名中带有xen-3.0.1-install字样的,比如 xen-3.0.1-install-x86_32.tgz,这个软件包表示适用x86_32位机器的。也就是我们用的普通32位PC机。如果您用的是64位机器,应该下载文件名带有x86_64字样的软件包;
下载好后,就解压安装,我们还是以支持x86_32构架机器的xen-3.0.1-install-x86_32.tgz为例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判断是不是安装好了,请查看/boot目录,会发现有很多文件名带有xen字样的文件,另外在/lib/moudules中也会发现有支持xen的内核模块;另外再看一看是否有/etc/xen这个目录。我想应该是有的。
3.4 通过Xen的源码包编译安装(仅供参考);
通过Xen的二进制包来安装,可能有时内核不太适应我们的需要,这时我们要通过Xen的源码包来安装。通过自己编译来安装Xen及支持Xen的内核;Xen的源码包,您可以到 http://www.xensource.com/downloads去下载。文件名带有 xen-3.0.1-src字样的,比如 xen-3.0.1-src.tgz。
3.41 编译原理;
通过Xen的源码包编译,其实也没有什么神秘的。在Xen的源码包中提供了一些内核补丁和内核配置文件等。当我们执行编译命令时,首先编译的是Xen程序本身,然后是编译内核 。在编译内核时,程序会自动判断是否有内核源码 ,xen-3.0.1支持的内核是2.6.12.6,如果在xen的解压目录下没有,他就会自动内核的官方站 http://www.kernel.org 下载 linux-2.6.12.tar.bz2。然后就是自动解压并为此内核打补丁。然后系统会根据指令要求,然后采用相应的内核配置文件,或配置内核进行编译。
3.42 编译过程简说;
第一步:解压软件包,查看Xen源码包所带的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我们解压xen-3.0.1-src.tgz 后,进入解压目录,会看到以上的文件或文件夹。patches是内核的补丁包,linux-2.6-xen-sparse是支持Xen的内核目录树,值得注意的是内核的配置文件就在这个目录中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的内核配置文件了吧,我们可能会发现文件名带有xen0字样的和xenU字样的两类文件。在这两类内核中,我们大多会修改的内核配置文件是运行xen的操作系统的内核配置文件,另一个是用于虚拟操作系统的内核配置文件;
xen0字样的就是我们一般是用于我们运行xen的操作系统的内核 ,而xenU字样的就是为虚拟操作系统所提供的内核。另外还有x86_32和x86_64之分,这表示CPU的架构。
比如我们用的是x86架构32位的CPU,我们在编译内核的时候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
举个例子:比如我的机器架构是x86_32位的,我安装xen的操作系统是Slackware,我想在Slackware 虚拟Debian 、Gentoo、Fedora等操作系统。这时编译虚拟平台Slackware所用的内核的配置文件就是 xen0_defconfig_x86_32 ,而被虚拟平台(Debian 、Gentoo、Fedora等操作系统)所用的内核就是 xenU_defconfig_x86_32 。
弄明白内核配置文件有何用?我们能明白xen在编译过程中用了哪些内核配置文件,目的是我们在编译过程中可以根据自己的需要来修改它,以编译出适合我们需要的内核。
比如我们想让Slackware 支持xen,并且还要支持NTFS文件系统;所以我们就要修改 xen0_defconfig_x86_32这个文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改为
CONFIG_NTFS_FS=m
如果您想让被虚拟的操作系统(Debian 、Gentoo、Fedora等)也支持NTFS文件系统,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改为
CONFIG_NTFS_FS=m
第二步:配置内核;
这一步有两种方法,一个是直接修改内核配置文件,另一个是内核配置界面来配置;
方法一:通过修改内核配置文件;
Xen所带的内核配置文件位于解压目录中的linux-2.6-xen-sparse/arch/xen/configs 。我们前面已经提到了相关配置文件的用途。请仔细看前一步的说明;
方法二:通过内核配置界面来配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:编译和安装Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install
3.43 创建initrd文件;
有的系统需要initrd-XXXX.img或initrd.gz文件才能引导起来,如果您的系统用了支持xen的支持引导不起来,就要创建一个initrd-XXXX.img或initrd.gz的文件;请参考: 《Xen v3.0 用户手册》
3.44 关于xen0和xenU内核说明;
一般的情况下会在/boot目录中有两个与xen相关的内核,有的文件名带有vmlinuz-XXXX-xen0字样的,有的带有vmlinuz-XXXX-xenU字样的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其实就是两个与xen相关的内核,其它的都是这两个内核文件的链接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用来引导虚拟平台的,比如我们在Slackware上安装Xen,那Slackware就是虚拟平台;所以如果要让Slackware的xen能运行起来,必须用xen相关的内核 ,也就是vmlinuz-2.6.12.6-xen0这个内核。 而XenU字样这个内核,是用来引导虚拟操作系统用的,我们在以后会提到它。
4、引导XenLinux的GRUB配置;
一旦我们在Linux操作系统安装好Xen后,这样的系统应该被称为XenLinux。如何才能引导拥有Xen的Linux呢?这时我们要用到GRUB系统引导管理器。我们修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位于/boot/grub目录中;
4.1 判断系统所在的分区;
[root@localhost ~]# df -h
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda6 12G 6.9G 4.9G 59% /
4.2 查看/boot目录中xen相关的配置文件;
[root@localhost ~]# ls /boot
注意:我们前面已经说过了,xen提供了两个内核,一个是虚拟平台用的,也就是文件名带有xen0字样的;另一个带有xenU字样的,这是用于引导和支持虚拟操作系统用的。
什么虚拟平台,比如我们想用Slackware 的Xen虚拟Fedora、Gentoo .... 。那么Slackware就是虚拟平台,而Fedora、Gentoo... .. 是被虚拟的操作系统。Slackware是一个真实安装在您的机器上的操作系统,它提供的是一个运行xen的环境。为了让Slackware能支持xen ,所以必须用于支持Xen的内核,也就是在/boot中有xen0字样的文件。
如果您安装了Xen,会在/boot中有两个文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,
4.3 禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,请查看: 《Xen v3.0 用户手册》
4.4 引导XenLinux的GRUB内容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之类的文件才能引导起来系统,还要加一行;要以/boot中的initrd相关的文件为准;
modules /boot/initrd.gz
有关GRUB的文档:《系统引导管理器GRUB,为初学者指南》
注意:与传统GRUB的定义有点不同,就是kernel 是用来定义Xen的,而Linux的内核及initrd映像是通过module 指令定义的;要仔细看好;
5、Xen的配置和管理工具;
5.1 Xen的相关文件存放位置;
xen安装后,文件放在什么地方了呢?主要放在以下几个目录;
5.11 内核及xen自身存放于 /boot
安装有xen的操作系统下的/boot目录中,存放xen本身及支持xen的内核文件。比如文件名带有xen0和xenU相关的文件;
5.12 内核模块存放于 /lib/modules
内核模块包括虚拟平台支持xen的内核xen0的模块,及支持虚拟操作系统所用的xenU的模块,一般的情况下是在 /lib/modules下有两个xen相关的目录存放。一个是文件夹名带有xen0字样的,另一个是xenU字样的;
5.13 xen的配置文件及守护程序的存放位置;
一般的情况下,Xen的配置文件存放于/etc/xen目录。 比如 xend-config.sxp是用于配置网络的,不过我们不必更改,用其默认的就能完成我们的需要。xmexample1 xmexample2是两个示例性的配置文件。我们在配置引导被虚拟的操作系统时,这两个文件可供参考;
Xen的服务器xend和xendomains启动脚本,一般是位于/etc/init.d/目录中,也就是/etc/init.d/xend ;/etc/init.d/xend负责启动xend服务器,而/etc/init.d/xendomains负责第一个虚拟的系统及其它的Domains,也就是Domain 0 。
5.14 可执行命令存放于/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm
5.2 Xen服务器的启动;
xend服务器的启动/停止/重启/状态查询,请用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status 查看xend状态
启动xendomains 服务器的启动/停止/重启/状态查询,请用下面的命令;一般的情况下,xend服务器启动了,xendomains也会自动启动。所以这个只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status 查看xend状态
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status
5.3 Xen 管理工具xm;
我们前面提到Xen的可执行命令中,我们可能看到了一些以xen开头的命令,您不妨尝试一个一个的尝试一下他们是做什么用的;比如xend是服务器的开启运行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通过xm --help 来获得帮助;
5.31 列出所有正在运行的虚拟操作系统;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在运行的虚拟系统(也可以称为虚拟机);我们可以看到,一个名为Domain-0的系统正在运行。Domain-0就是Xen本身,也可以称为虚拟平台内存大小,而Domain-0负责提供其它虚拟操作系统的硬件环境,其它的系统都是基于Domain-0开始的,我们看到他的ID为0就应该知道它的权限是至高无尚的。所占用的内存是450M,不过这个是可以指定的。 虚拟的CPU个数是1个,运行状态处于r,也就是run,正在运行中;运行时间是5377秒;
还有一个虚拟系统fc5,他的id是4,占用内存256M,虚拟CPU个数是1个 ... ...
5.32 通过配置文件来引导被虚拟的操作系统;
[root@localhost ~]# /usr/sbin/xm create -c 虚拟操作系统的启动配置文件
比如我们要启动被虚拟的操作系统Fedora Core 5.0 ,我们要写一个启动Fedora的配置文件,比如是fc5vm.cfg。然后就可以通过下面的命令来引导Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg
5.33 从终端或控制台登录正在运行的虚拟操作系统;
[root@localhost ~]# /usr/sbin/xm console 正在运行的虚拟操作系统的Name或ID;
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5
5.34 存储正在运行的虚拟操作系统的状态及唤醒虚拟操作系统;
[root@localhost ~]# /usr/sbin/xm save <DomId> <File>
[root@localhost ~]# /usr/sbin/xm restore <File>
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5
5.35 停止正在运行的虚拟操作系统/激活停止的虚拟操作系统
[root@localhost ~]# /usr/sbin/xm pause <DomId>
[root@localhost ~]# /usr/sbin/xm unpause <DomId>
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2
5.36 调整虚拟平台/虚拟操作系统的占用内存
我们可以调整正在运行中的虚拟平台(Domain-0)所占内存大小及虚拟操作系统所占用的内存大小;
[root@localhost ~]# /usr/sbin/xm mem-set <DomId> <Mem>
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128
5.37 关闭被虚拟的系统
[root@localhost ~]# /usr/sbin/xm shutdown 虚拟操作系统的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy <DomId> 立即停止虚拟的系统 (重要);
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5
或
[root@localhost ~]# /usr/sbin/xm shutdown 2
或
[root@localhost ~]# /usr/sbin/xm destroy 2
5.38 调整虚拟平台及虚拟操作系统的虚拟CPU个数;
[root@localhost ~]# /usr/sbin/xm vcpu-set <DomId> <VCPUs>
举例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4
5.39 查看虚拟系统运行的状态;
[root@localhost ~]# xm top
或
[root@localhost ~]# xentop
6、虚拟操作系统的文件存储系统;
我们虚拟的系统应该有一个存储的地方,也就是文件系统。被虚拟的系统能安装和运行在哪些文件系统上呢?能安装和运行在一个实际的物理分区上,一个映像文件中,或NFS等网络文件系统中;
6.1 以实际物理硬盘做为虚拟操作系统文件系统;
以实际物理硬盘分区做为虚拟操作系统的文件系统,要经过硬盘分区,创建文件系统流程;
6.11 准备物理分区及创建文件系统;
《Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍》
《实例解说 fdisk 使用方法》
《合理规划您的硬盘分区》
《Linux 创建文件系统及挂载文件系统流程详解》
6.12 在物理分区上构建操作系统;
构建操作系统,目前在一个Linux操作系统中构建另一个操作系统,主要是通过chroot工具和软件包提取工具来构建。基础的东西还是需要一点的,请参考:《通过chroot 构建Linux操作系统概要》
目前在开源社区中,已经有人把一些常用的发行版的基础系统做好了。我们能拿过来直接用。呵。。。。。只要有基础系统,我们就能chroot进入,我们就能用相应发行版软件包管理器来构建操作系统了。
操作系统之基础系统资源:
您可以直接下载您喜欢的操作系统,解压后,然后挂载映像文件,然后把映像文件的内容都拷到物理分区中就好了。不过还得做一点小小的修改,比如您下载系统映像文件中的/etc/fstab等文件。要根据您的引导的虚拟操作系统中定义的虚拟映射点来改。
6.13 虚拟操作系统的引导文件中关于文件系统的定义;
如果您的硬盘有一定的空间,就可以把被虚拟的操作系统安装在硬盘的实际物理分区中,当然您首先得准备一个硬盘分区。然后格式化成Linux的文件系统,比如ext3或reiserfs 等;然后是在这个分区上构建您想要虚拟的操作系统,最后才是写虚拟操作系统的引导配置文件,在配置文件中,要用phy:来指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分区,映射点,w']
这行是什么意思呢?就是表示被虚拟的操作系统安装在/dev/hda3,我们要把hda3硬盘分区虚拟映射到/dev/sda1,并且是可读可写的;在这里要值得注意的是虚拟平台正在使用中的分区不能做为是映射点。
比如我在Slackware是位于/dev/hda6的虚拟平台,也就是真实运行的操作系统,我想用它来虚拟位于/dev/hda7分区的Fedora。所以我不能把/dev/hda6做为hda7的映射点。也就是下面一行是错误的:
disk = ['phy:hda7,hda6,w']
如何定义映射点,其实也比较好办,只要符合Linux设备的规则就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什么是映射点呢?也就是说通过phy定义后,被虚拟的操作系统的位于的真实的物理分区,在虚拟平台中,被映射到另一个分区;可能这样说有点不太明白。呵。。。。。。
举个例子吧:比如我们在Slackware虚拟Fedora ,而Fedora 位于/dev/hda7中。我们在引导Fedora的配置文件中定义Fedora所用的物理分区被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
当我们把Fedora引导起来的时候,Fedora的文件系统就是用被虚拟后的分区,也就是/dev/sda1。在Fedora中,我们通过df -h 查看到Fedora是位于/dev/sda1。
所以在引导Fedora的配置文件中,还要有一行来指定Fedora的root在哪里,就在/dev/sda1上;因为/dev/hda7已经被虚拟到了/dev/sda1。这回明白了吧;
6.2 以映像文件做虚拟操作系统的文件系统;
以映像文件做为虚拟操作系统的文件系统,这种方法是比较常用。也是比较方便和易于操作的,也就是说被虚拟的操作系统是放在了一个文件中。
6.21 创建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
读入了 1+0 个块
输出了 1+0 个块
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我们可以用dd来创建映像文件,上面的例子是创建了大小为4.1G的体积的,名为fedora50.img的映像文件;您可以调整上面命令参数的大小来创建您想要的体积大小的映像文件。
6.22 格式化映像为Linux文件系统;
Linux文件系统,比如ext3或reiserfs,看自己喜欢吧;您可以用mkfs.ext3或mkfs.reiserfs命令来创建文件系统,请参考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y 注:在这里输入y就时行格式化了,然后遇到提示之处,都是用回车。
这样fedora50.img就是ext3文件系统了,你可以用mount -o loop 来挂载使用它,在它上面存储文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令执行下去后,说明fedora50.img已经挂载到了/mnt/fedora目录中,我们可以向/mnt/fedora中存放文件。这样就写到了fedora50.img映像文件中。写完后,我们可以卸载fedora50.img;
[root@localhost ~]# umount /mnt/fedora
6.23 在映像文件上构建操作系统;
在映像文件上构建操作系统,目前在一个Linux操作系统中构建另一个操作系统,主要是通过chroot工具和软件包提取工具来构建。基础的东西还是需要一点的,请参考:
目前在开源社区中,已经有人把一些常用的发行版的基础系统做好了。我们能拿过来直接用。呵。。。。。只要有基础系统,我们就能chroot进入,我们就能用相应发行版软件包管理器来构建操作系统了。
操作系统之基础系统资源:
6.24 虚拟操作系统的引导文件中关于文件系统的定义;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我们还是以实例解说,把装有vmos.img的映像映射到/dev/sda1 分区,vmos.img就是虚拟操作系统root存放地。vmos.swap是被虚拟文件系统的交换分区,这个交换分区也是一个文件,被映射到了/dev/sda2 。然后通过root= 行来指定虚拟操作系统所处的分区,这个位置就是被虚拟后的分区。
定义时要注意自己的这些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目录中。要看好了。。
7、实例应用:用Slackware+Xen虚拟Fedora 5.0
7.1 Fedora 安装运行于一个物理分区中;
7.11 下载Fedora 5.0的基础系统;
7.12 解压和提取相应文件;
我们把下载下来的Fedora 5 基础系统,存放到/opt/fedora5vm目录中;然后解压;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap
7.13 规划硬盘的物理分区并创建文件系统;
您可以在您的硬盘上创建一个物理分区,如果有空闲的物理分区可用也行。然后创建一下文件系统。分区工具用fdisk 工具就行。
分区工具,请参考:《实例解说 fdisk 使用方法》
创建文件系统,请参考:《Linux 创建文件系统及挂载文件系统流程详解》
比如我们想把Fedora 放在/dev/hda5上,我们可以用mkfs.ext3来格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5
7.14 构建Fedora 5 的基础系统;
因为我们已经下载了,Fedora Core 5的基础系统的映像文件,也做了解压。会看到 fedora.fc5.img这个映像文件; 我们把这个映像挂载,然后把它的内容复制到我们刚才创始的文件系统的分区中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
复制fedora.fc5.img中的内容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然后是chroot 到/mnt/fedora目录中,实际就是操作Fedora 5系统,我们要创建Fedora 5的root密码;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然后我们卸载/dev/hda5分区;
[root@localhost ~]# umount /dev/hda5
7.15 创建Fedora 5 引导文件;
我们在解压 fedora.fc5.20060401.img.tgz 时看到一个文件fedora.fc5.xen.cfg ,这个就是Fedora 5的引导文件,人家洋人都为我们写好了。我们只是改一改就能用了;
我们要回到fedora.fc5.xen.cfg的存放目录/opt/fedora5vm中;复制fedora.fc5.xen.cfg名为fc5vm.cfg的文件。然后我们把fc5vm.cfg作为被虚拟的Fedora 5的引导文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我们要对fc5vm.cfg做一下修改;
在fc5vm.cfg中,我们会看到如下的内容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我们看kernel 这行,这行是定义虚拟操作系统内核的,我们要用到我们安装xen是所安装的内核。要在虚拟平台/boot目录中找。比如我用Slackware虚拟 Fedora 。那虚拟平台就是Slackware。我应试在Slackware的/boot中找文件名中包含vmlinuz和xenU字样的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我们看到有类似的三个文件,实际上只有一个,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的链接文件。所以我们在kernel行中指定内核时,可以用这三个中的任何一个;比如我们用 vmlinuz-2.6-xenU;
memory是指定内存大小的,我们设置被虚拟的Fedora 5的虚拟内存大小是 128M;
name 是定义虚拟操作系统的名字的,可以通过xm list中显示出来,我们也改简单点,改为fc5
nics=1 不变
dhcp 这行,是用来指定获取Fedora 5系统的IP是通过DHCP获取的,不过您也可以指定IP。可以不要这行;
vif = ['mac=aa:00:00:00:00:11'] 用来指定Fedora 5的网卡的物理地址;可以自己定义。
ip = "192.168.1.144" 用来指定虚拟网卡的IP
netmask="255.255.255.0" 用来指定掩码
disk这行是用来定义Fedora所处的物理分区映射点,及物理交换分区及映射点的;因为物理分区是通过phy:来指定的。所以我们得改一改。因为我们已经把Fedora放在了/dev/hda5了。另外交换分区在哪呢?可以通过swapon -s来查看物理交换分区,要在虚拟平台中查看;比如我得到的是/dev/hda8是交换分区。所以disk这行就应该这样写:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不过真实物理分区的映射点,比如/dev/hda5映射到了/dev/sda1,交换分区/dev/hda8映射到了/dev/sda2。映射过后,Fedora的root文件系统就用映射后的/dev/sda1。慢慢理解;物理分区的映射点是可以在Linux系统设备定义的许可范围内进行。自己尝试着换一换映射点。如果Fedora的root所处的物理分区的映射点改变后,Fedora的root=的值也得跟着改变。另外还要改Fedora系统中的/etc/fstab文件;
root一行,来指定Fedora的所有的虚拟物理分区(就是映射点)。映射到哪里了呢?Fedora 安装到了/dev/hda5,映射后虚拟到了/dev/sda1。所以Fedora系统引导时就寻找/dev/sda1做为文件系统。
所以root这行可写为:
root = "/dev/sda1 ro"
所以我们可以这样写Fedora 5的引导配置文件;
第一种:如果是用DHCP来获取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二种:如果是指定IP的话:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再举一例:
比如Fedora 被安装在了/dev/hda5分区,物理交换分区为/dev/hda8。通过DHCP获得IP。我想映射/dev/hda5到/dev/hda5,并且想映射/dev/hda8到/dev/hda8。我们应该如何修改一些配置文件呢?
Fedora的引导文件内容应该是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然后我们应该再把装有Fedora的/dev/hda5分区挂载,然后修改Fedora系统的/etc/fstab。注意:不是修改虚拟平台的/etc/fstab。不要弄混了!!!!
应该先挂载Fedora 5所处的分区:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然后修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下两行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改为:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora
7.16 引导Fedora 5 ;
引导运行Fedora 5.0就好办了,就是用xm 工具来引导;首先要确认你的Fedora 5的配置文件放在哪里。比如我是放在了/opt/fedora5vm中。并且文件名为fc5vm.cfg。所以我就可以这样来引导Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg
7.17 虚拟操作系统网卡不能激活的处理方法 ;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出现类似上面的现象,请复制虚拟平台的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系统中;
方法是先挂载Fedora 所处的物理分区,然后用cp -rp 来复制;
首先要关掉Fedora,然后再复制;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虚拟操作系统的ID为准,比如fc5的ID是 2,就要运行如下命令;
[root@localhost ~]# xm destroy 2
然后mount 挂载Fedora所处的物理分区/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目录中创建modules。如果有了就不创建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
7.2 Fedora 安装运行于一个映像文件中;
7.21 下载Fedora 5.0的基础系统;
7.22 解压和提取相应文件;
我们把下载下来的Fedora 5 基础系统,存放到/opt/fedora5vm目录中;然后解压;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap
7.23 修改引导运行Fedora的配置文件;
我们从fedora.fc5.20060401.img.tgz 解压出来一个fedora.fc5.xen.cfg ,这个就是用来引导Fedora 5的配置文件。我们改一改以适合我们的需要。我们把这个文件复制为fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 内容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
注解:
首先我们看kernel 这行,这行是定义虚拟操作系统内核的,我们要用到我们安装xen是所安装的内核。要在虚拟平台/boot目录中找。比如我用Slackware虚拟 Fedora 。那虚拟平台就是Slackware。我应试在Slackware的/boot中找文件名中包含vmlinuz和xenU字样的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我们看到有类似的三个文件,实际上只有一个,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的链接文件。所以我们在kernel行中指定内核时,可以用这三个中的任何一个;比如我们用 vmlinuz-2.6-xenU;
memory是指定内存大小的,我们设置被虚拟的Fedora 5的虚拟内存大小是 128M;
name 是定义虚拟操作系统的名字的,可以通过xm list中显示出来,我们也改简单点,改为fc5
nics=1 不变
dhcp 这行,是用来指定获取Fedora 5系统的IP是通过DHCP获取的,不过您也可以指定IP。可以不要这行;
vif = ['mac=aa:00:00:00:00:11'] 用来指定Fedora 5的网卡的物理地址;可以自己定义。
ip = "192.168.1.144" 用来指定虚拟网卡的IP
netmask="255.255.255.0" 用来指定掩码
disk来定义Fedora 5.0 所用的文件系统,因为我们这次用的是映像文件。所以要用file:来指定,Fedora 5用的交换分区,也是一个映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虚拟映射到/dev/sda1;交换分区文件fedora.swap映射到了/dev/sda2。映射过后,Fedora的root文件系统就用映射后的/dev/sda1。虚拟映射设备是可以在Linux系统设备定义的许可范围内进行。自己尝试着换一换映射点。如果Fedora的虚拟映射设备变了,我们得改变Fedora中的/etc/fstab。
root一行,来指定Fedora的root位于哪个映射后的设备。映射到哪里了呢?Fedora 安装到了/dev/sda1,映射后虚拟到了/dev/sda1。所以Fedora系统引导时就寻找/dev/sda1做为文件系统。
所以root这行可写为:
root = "/dev/sda1 ro"
所以我们可以这样写Fedora 5的引导配置文件;
第一种:如果是用DHCP来获取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二种:如果是指定IP的话:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
7.24 引导Fedora 5 ;
引导运行Fedora 5.0就好办了,就是用xm 工具来引导;首先要确认你的Fedora 5的配置文件放在哪里。比如我们在这个例子中是放在了/opt/fedora5vm中。并且文件名为fc5vm.cfg。所以我就可以这样来引导Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg
7.25 网卡不能激活的处理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出现类似上面的现象,请复制虚拟平台的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系统中;
方法是先挂载Fedora 所处的物理分区,然后用cp -rp 来复制;
首先要关掉Fedora,然后再复制;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虚拟操作系统的ID为准,比如fc5的ID是 2,就要运行如下命令;
[root@localhost ~]# xm destroy 2
然后mount 挂载Fedora所处的物理分区/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目录中创建modules。如果有了就不创建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然后再来引导Fedora 5,进入系统后用ifconfig来查看网卡的IP之类的,如果没有激活,请用下面的命令来加载网卡模块;在要Fedora中执行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient 如果您用DHCP获取IP,请执行;
7.26 Fedora 映像文件太小的解决办法;
我们会发现我们下载的Fedora基础系统的映像文件体积太小。体积小空间就小的了。Fedora 5.0如果只安装基础系统,倒占用不了多少空间,如果再安装一个桌面环境可能会占用大一点的地方。比如安装GNOME或KDE。
我们可以自己创建一个映像文件,创建好文件系统。然后从我们下载下来的Fedora映像文件中的所有文件,也就是Fedora的基础系统,复制到我们新创建的映像中。前面已经说过创建映像文件的办法了。这个应该好办吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y
[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中创建tmp目录
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中创建fedora目录
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:挂载我们新创建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:挂载我们下载下来的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:复制Fedora基础系统到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸载 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸载fc5.img
然后就是改一改引导Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定进去。要仔细看一下fc5所处的目录;这个应该好办,不多说了;
8、强制终止正在运行的虚拟操作系统;(重要)
在xm这个管理工具中,我们把xm destroy
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1
或
[root@localhost ~]# xm destroy fc5
这时您再用xm list查看,肯定fc5这个Domain已经退出。
xm destroy 这个指令还是极为有用的,所以我们单列出来。希望新手弟兄注意一下。
9、关于基础系统安装后,虚拟操作系统的软件补充安装;
基础系统安装好以后,下一步就是其它软件的安装。在各个系统都有软件包管理工具; 在主流发行版中,都有相应的软件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通过chroot来安装一些比较重要的软件包。总之方法太多了;
总之,后续软件的补充安装并不是什么问题;
10、关于虚拟操作系统的桌面访问及远程访问;
被虚拟的操作系统,我们要把它看成一台独立运行的计算机。计算机与计算机之间通过什么访问来?ssh 或vnc。所以我们要在被虚拟的操作系统上安装vncserver 和sshd;
如果您虚拟的是Fedora ,我们可以在Fedora中执行yum install vnc来安装vncserver ;
#yum install vnc
如果您虚拟的是 Debian ,您可以用apt-get install vncserver 来安装vncserver ;
#apt-get install vncserver
当然客户端也要安装vncview才行,您要自己在客户端上安装vncview;
关于vnc远程桌面的访问,您可以参考这篇:《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》
另外sshd服务器,也要安装openssh 的软件包;这个也省略不说了,比较简单,再说目前大多基础系统已经提供这个软件包了。并且在被虚拟的系统在启动时,sshd也自动运行了;连接sshd服务器的命令是;
#ssh 用户名@ip
比如
#ssh [email protected]
11、常见问题处理;
11.1 不能找到root分区;
表现如下症状;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引导虚拟操作系统的配置文件有问题,主要查看disk:那行和root那行是否用的是一个虚拟映射点。
比如是由于引导Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我们发现/dev/hda5被虚拟映射到/dev/sda1了。也就是说,被虚拟的操作系统引导运行,它的root应该位于/dev/sda1。而在这里定义的却是/dev/sda8。所以应该改为
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
11.2 出现/tmp/.ICE-unix 类似的错误;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比较/tmp/xxxx之类的不能写入,只读之类的,请用xm destrony 先关掉被虚拟的操作系统。然后把被虚拟的系统的分区或映像文件挂载,删除/tmp目录中的临时文件。注意.file是隐藏的。您可以通过ls -la来查看。然后再来删除;
另外如果一直出现这个错误,说明文件系统有问题了,这在ext3的文件系统中是经常发生的。您可以用/sbin/fsck.ext3 工具来修复文件系统。当然您的文件系统不能处于挂载状态。应该先umout 才能进行;
比如修复一个分区,应该类似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中间遇到是否修复时,按提示的就是y或yes吧;
如果被虚拟的文件系统位于一个映像文件,也是用这种办法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出现上面这种错误,应该看一下配置文件中有没有 vif=['']的定义;
12、关于本文;
本文是在阅读《xen v3.0 用户手册》的基础上实践而成。本文和我前几天写的《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》有点类似。通过实践看来Xen还不是太难用,应该说比较容易。至于高深的东西,我也不会,所以只能写一写新手入门性的文档。可能有的弟兄认为本文没有任何价值,我想也是这么回事,如果有一个弟兄认为有点价值,那就送给他用吧~~~
13、后记;
还要挖一挖Xen的文档?好象没有太大的必要了~~~,看情况吧;
14、参考文档;
《xen v3.0 用户手册》
http://jailtime.org
15、相关文档;
我在fc6遇到个古怪的xen问题:启动时提示 override
我用的是预制好的debian基本系统,前面好像都正常
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 256 1 r----- 161.2
[root@localhost ~]#
启动debian时提示信息是
[root@localhost ~]# /usr/sbin/xm create -c /opt/debianxen/debian.cfg
Using config file "/opt/debianxen/debian.cfg".
Started domain debian31
Linux version 2.6.18-1.2798.fc6xen ([email protected]) (gcc version 4.1.1 20061011 (Red Hat 4.1.1-30)) #1 SMP Mon Oct 16 15:11:19 EDT 2006
BIOS-provided physical RAM map:
Xen: 0000000000000000 - 0000000008800000 (usable)
0MB HIGHMEM available.
136MB LOWMEM available.
NX (Execute Disable) protection: active
ACPI in unprivileged domain disabled
Built 1 zonelists. Total pages: 34816
Kernel command line: ip=:1.2.3.4::::eth0:dhcp root=/dev/sda1 ro
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
CPU 0 irqstacks, hard=c078a000 soft=c076a000
PID hash table entries: 1024 (order: 10, 4096 bytes)
Xen reported: 1790.825 MHz processor.
Console: colour dummy device 80x25
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Software IO TLB disabled
vmalloc area: c9000000-f4ffe000, maxmem 2d7fe000
Memory: 124996k/139264k available (2097k kernel code, 5932k reserved, 840k data, 180k init, 0k highmem)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 4483.12 BogoMIPS (lpj=8966244)
Security Framework v1.0.0 initialized
SELinux: Initializing.
SELinux: Starting in permissive mode
selinux_register_security: Registering secondary module capability
Capability LSM initialized as secondary
Mount-cache hash table entries: 512
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 256K (64 bytes/line)
Checking 'hlt' instruction... OK.
SMP alternatives: switching to UP code
Freeing SMP alternatives: 12k freed
Brought up 1 CPUs
Grant table initialized
NET: Registered protocol family 16
Brought up 1 CPUs
PCI: setting up Xen PCI frontend stub
ACPI: Interpreter disabled.
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI: disabled
xen_mem: Initialising balloon driver.
usbcore: registered new driver usbfs
usbcore: registered new driver hub
PCI: System does not support PCI
PCI: System does not support PCI
NetLabel: Initializing
NetLabel: domain hash size = 128
NetLabel: protocols = UNLABELED CIPSOv4
NetLabel: unlabeled traffic allowed by default
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 5, 163840 bytes)
TCP bind hash table entries: 4096 (order: 4, 81920 bytes)
TCP: Hash tables configured (established 8192 bind 4096)
TCP reno registered
IA-32 Microcode Update Driver: v1.14-xen
audit: initializing netlink socket (disabled)
audit(1143049664.150:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
SELinux: Registering netfilter hooks
Initializing Cryptographic API
ksign: Installing public key data
Loading keyring
- Added public key 8BDC589434DBC709
- key was been created 17974007 seconds in future
- User ID: Red Hat, Inc. (Kernel Module GPG key)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
pci_hotplug: PCI Hot Plug PCI Core version: 0.5
rtc: IRQ 8 is not free.
Non-volatile memory driver v1.2
Linux agpgart interface v0.101 (c) Dave Jones
RAMDISK driver initialized: 16 RAM disks of 16384K size 4096 blocksize
Xen virtual console successfully installed as xvc0
Linux version 2.6.18-1.2798.fc6xen ([email protected]) (gcc version 4.1.1 20061011 (Red Hat 4.1.1-30)) #1 SMP Mon Oct 16 15:11:19 EDT 2006
BIOS-provided physical RAM map:
Xen: 0000000000000000 - 0000000008800000 (usable)
0MB HIGHMEM available.
136MB LOWMEM available.
NX (Execute Disable) protection: active
ACPI in unprivileged domain disabled
Built 1 zonelists. Total pages: 34816
Kernel command line: ip=:1.2.3.4::::eth0:dhcp root=/dev/sda1 ro
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Initializing CPU#0
CPU 0 irqstacks, hard=c078a000 soft=c076a000
PID hash table entries: 1024 (order: 10, 4096 bytes)
Xen reported: 1790.825 MHz processor.
Console: colour dummy device 80x25
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Software IO TLB disabled
vmalloc area: c9000000-f4ffe000, maxmem 2d7fe000
Memory: 124996k/139264k available (2097k kernel code, 5932k reserved, 840k data, 180k init, 0k highmem)
Checking if this processor honours the WP bit even in supervisor mode... Ok.
Calibrating delay using timer specific routine.. 4483.12 BogoMIPS (lpj=8966244)
Security Framework v1.0.0 initialized
SELinux: Initializing.
SELinux: Starting in permissive mode
selinux_register_security: Registering secondary module capability
Capability LSM initialized as secondary
Mount-cache hash table entries: 512
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 256K (64 bytes/line)
Checking 'hlt' instruction... OK.
SMP alternatives: switching to UP code
Freeing SMP alternatives: 12k freed
Brought up 1 CPUs
Grant table initialized
NET: Registered protocol family 16
Brought up 1 CPUs
PCI: setting up Xen PCI frontend stub
ACPI: Interpreter disabled.
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI: disabled
xen_mem: Initialising balloon driver.
usbcore: registered new driver usbfs
usbcore: registered new driver hub
PCI: System does not support PCI
PCI: System does not support PCI
NetLabel: Initializing
NetLabel: domain hash size = 128
NetLabel: protocols = UNLABELED CIPSOv4
NetLabel: unlabeled traffic allowed by default
NET: Registered protocol family 2
IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
TCP established hash table entries: 8192 (order: 5, 163840 bytes)
TCP bind hash table entries: 4096 (order: 4, 81920 bytes)
TCP: Hash tables configured (established 8192 bind 4096)
TCP reno registered
IA-32 Microcode Update Driver: v1.14-xen
audit: initializing netlink socket (disabled)
audit(1143049664.150:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
SELinux: Registering netfilter hooks
Initializing Cryptographic API
ksign: Installing public key data
Loading keyring
- Added public key 8BDC589434DBC709
- key was been created 17974007 seconds in future
- User ID: Red Hat, Inc. (Kernel Module GPG key)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
pci_hotplug: PCI Hot Plug PCI Core version: 0.5
rtc: IRQ 8 is not free.
Non-volatile memory driver v1.2
Linux agpgart interface v0.101 (c) Dave Jones
RAMDISK driver initialized: 16 RAM disks of 16384K size 4096 blocksize
Xen virtual console successfully installed as xvc0
Event-channel device installed.
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
[root@localhost ~]#
最后一行提示意味着什么呢?请大家给个建议。谢谢!
不知最后一句怎么回事
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
--------------------
我的配置文件是
kernel = "/boot/vmlinuz-2.6.18-1.2798.fc6xen"
memory = 128
name = "debian31"
dhcp = "dhcp"
disk = ['file:/opt/debianxen/debian31.img,sda1,w', 'file:/opt/debianxen/debian.swap,sda2,w']
root = "/dev/sda1 ro"
-----------------
nics和vif参数加不加都一个效果
今天开机启动debian虚拟机
今天开机启动debian虚拟机时发现后部分的信息如下,最顶上的是输入多次引导命令的输出
Non-volatile memory driver v1.2
Linux agpgart interface v0.101 (c) Dave Jones
RAMDISK driver initialized: 16 RAM disks of 16384K size 4096 blocksize
Xen virtual console successfully installed as xvc0
Event-channel device installed.
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
ide-floppy driver 0.99.newide
usbcore: registered new driver libusual
usbcore: registered new driver hiddev
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.6:USB HID core driver
PNP: No PS/2 controller found. Probing ports directly.
i8042.c: No controller found.
mice: PS/2 mouse device common for all mice
md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
md: bitmap version 4.39
TCP bic registered
Initializing IPsec netlink socket
NET: Registered protocol family 1
NET: Registered protocol family 17
Using IPI No-Shortcut mode
XENBUS: Device with no driver: device/vbd/2049
XENBUS: Device with no driver: device/vbd/2050
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
VFS: Cannot open root device "sda1" or unknown-block(0,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[root@localhost ~]#
不知说什么 好
太....
...........!!!!!!!!!!
《xen v3.0 用户手册》很好呀
中英文对比,又学英文又长技术。
xen的内核
安装完xen后,我如何配制内核!
xen的内核
安装完xen后,我如何配制内核!
你太谦虚了,这样的文章太棒了。
大部分重要的文章都处于你之手,是我们新手用linux方便多了,真是很感谢
怪事xendomains status和xm create -c有问题
用2.6.16-1.2080_FC5xen0启动的的xxm list显示domain0正常。
但是xend status没有信息返回,xendomains status报告命令找不到,xm create -c报告特权域不能balloon。
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.16-1.2080_FC5xen0 #1 SMP Tue Mar 28 04:13:51 EST 2006 i686 athlon i386 GNU/Linux
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 193 1 r----- 410.4
[root@localhost ~]# /etc/init.d/xend status :但是xend status没有信息返回
[root@localhost ~]# /etc/init.d/xendomains status
Checking for xendomains:/etc/init.d/xendomains: line 69: log_failure_msg: comman d not found :xendomains status报告命令找不到
[root@localhost ~]# /usr/sbin/xm create -c /xen/debian/debian.xen.cfg
Using config file "/xen/debian/debian.xen.cfg".
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Error creating domain: The privileged domain did not balloon!
:xm create -c报告特权域不能balloon。
我的配置文件是
kernel = "/boot/vmlinuz-2.6.16-1.2080_FC5xenU"
memory = 128
name = "debian.3-1"
nics = 1
vif = ['']
dhcp = "dhcp"
disk = ['file:/xen/debian/debian.3-1.img,sda1,w', 'file:/xen/debian/debian.swap,sda2,w']
root = "/dev/sda1 ro"
请问怎么回事亚,各位达人
vif里要输入内容.
vif = [ 'mac=aa:00:00:00:00:11' ]
或者这行注释掉.
我是下载的http://jailtime.org/的预制系统镜像
debian的基础系统
debian基础系统
从jailtime.org下载的debian基础系统默认的root口令是什么,谢谢。
user:root password:password
user:root
password:password
chroot进去,自己修改密码
chroot进去,自己修改密码
谢谢您的关注,但还是不能顺利chroot
配置文件mydebian的部分内容
disk=[ 'file:/data/debian.3-1.img,sda1,w','file:/data/debian.swap,sda2,w' ]
root="/dev/sda1 ro"
用xm create -c /etc/xen/mydebian
提示输入口令.
mount
/dev/hda8 / type ext3 (rw)
..
并没有/dev/sda1. 那我怎么chroot呢。按网上查的资料,
应该是把/dev/sda1 mount到一个文件夹,在chroot 该文件夹。
可是现在没有/dev/sda1 .不知道下一步该怎么做了。
请您帮帮我,谢谢。
看看这行吧。
disk = ['file:/xen/debian/debian.3-1.img,sda1,w', 'file:/xen/debian/debian.swap,sda2,w']
看看 debian.3-1.img 真的是在/xen/debian/目录吗?? 另外 debian.swap也是位于/xen/debian。。。。。肯定是这里的事。。。
应该不是这个问题,我把debain压缩包解压到xen
关键是xend status没有信息返回,xendomains status报告命令找不到,xm create -c报告特权域不能balloon。
[root@localhost ~]# /etc/init.d/xend status :但是xend status没有信息返回
[root@localhost ~]# /etc/init.d/xendomains status
Checking for xendomains:/etc/init.d/xendomains: line 69: log_failure_msg: comman d not found :xendomains status报告命令找不到
[root@localhost ~]# /usr/sbin/xm create -c /xen/debian/debian.xen.cfg
Using config file "/xen/debian/debian.xen.cfg".
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Error creating domain: The privileged domain did not balloon!
应该不是这个问题,我把debain压缩包解压到xen
关键是xend status没有信息返回,xendomains status报告命令找不到,xm create -c报告特权域不能balloon。
[root@localhost ~]# /etc/init.d/xend status :但是xend status没有信息返回
[root@localhost ~]# /etc/init.d/xendomains status
Checking for xendomains:/etc/init.d/xendomains: line 69: log_failure_msg: comman d not found :xendomains status报告命令找不到
[root@localhost ~]# /usr/sbin/xm create -c /xen/debian/debian.xen.cfg
Using config file "/xen/debian/debian.xen.cfg".
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Error creating domain: The privileged domain did not balloon!
我的/xen/debian目录
[root@localhost ~]# cd /xen/debian
[root@localhost debian]# ls -a
. debian.3-1.img debian.swap debian.xen.cfg~
.. debian.3-1.xen.cfg debian.xen.cfg
[root@localhost debian]#
好象是domain 0的内存分配太小。
If you get an error at this point saying 'The privileged domain did not balloon!', you may need to resize one or more of your existing VMs' memory limits in order to free up RAM for the new guest VM. For instance, to resize dom0 to use only 256 megs of RAM, you could run:
# xm mem-set 0 256
已经xm mem-set 0 256还不行,甚至336也不行
但我的内存是224,由32mb划给显卡了,swap是450mb
[root@localhost ~]# xm mem-set 0 256
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 256 1 r----- 40.3
[root@localhost ~]# /etc/init.d/xendomains status
Checking for xendomains:/etc/init.d/xendomains: line 69: log_failure_msg: command not found
[root@localhost ~]# /usr/sbin/xm create -c /xen/debian/debian.xen.cfg
Using config file "/xen/debian/debian.xen.cfg".
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Error creating domain: The privileged domain did not balloon!
[root@localhost ~]#
[root@localhost ~]# xm mem-set 0 336
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 336 1 r----- 53.2
[root@localhost ~]# /usr/sbin/xm create -c /xen/debian/debian.xen.cfg
Using config file "/xen/debian/debian.xen.cfg".
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Error creating domain: The privileged domain did not balloon!
[root@localhost ~]#
我只有224mb,32mb划给显卡了,难道我用不了xen,
还有xendomains status的错误没有关系马,xen的vm最小要多少内存亚
Good job!!
This is a nice article i have ever seen.
Am not Chinese and i hardly recognize Chinese characters but I have been referring to this article during my Xen installation. It taught me not only technical stuff but also English words translation into Chinese (用户手册)
Thanks a lot