在编译安装Xen 3.2以后,我们需要Guest OS的内核和磁盘镜像。我们可以到网上下载已经做好的基础系统。当然,可以根据自己机器上安装的系统,创建Guest OS的磁盘镜像。例如创建一个8GB的磁盘镜像fc.img,作为Guest OS的硬盘。以下所有的操作都必须以root权限执行。

  首先创建8G的空白文件,采用seek的方式比count快。

dd if=/dev/zero of=fc.img bs=1M seek=8192 count=1
格式化该文件(在该文件中创建文件系统)
mkfs -t ext3 fc.img
将该文件系统挂载到系统的某个目录下,例如/mnt/fc8。
mount -o loop fc.img /mnt/fc8
现在我们进入/mnt/fc8目录应该可以看到有个lost+found文件存在,表明成功创建了文件系统。

  另外,看你是否挂载成功还可以通过df -lh命令来查看,如果挂载成功,最下面一行会出现以你挂载的文件夹路径为首的一行信息。

  我们需要重点注意的是,一定要挂载上再进行下面的复制操作,不然会出现一些意想不到的问题。

  挂载上后将本机的一些目录和文件拷贝到磁盘镜像中。

cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt/fc8
mkdir /mnt/fc8/{proc,sys,home,tmp}

   注意:我的机子是64位的fedora10,因此cp -ax /{root,dev,var,etc,usr,bin,sbin,lib,lib64} /mnt/fc8,这个lib64是很重要的,请大家注意。

修改与系统相关的配置文件,例如文件系统表(/etc/fstab),主机名(/etc/sysconfig/network),IP地址和MAC地址(/etc/sysconfig/network-scripts/ifcfg-eth0),这些最好都进行修改。

  注意:这里所说的文件系统表还有主机名等文件是在/mnt/fc8/下的,如/etc/fstab实际是指/mnt/fc8/etc/fstab含义其实很简单,就是修改我们创建的fc.img这套半虚拟话磁盘镜像系统内的系统表,主机名等,这里就不再赘述了。

  现将我的修改贴出来以供大家参考,我的修改全部是必须的修改,因为我之前这些有的没有修改,因此会爆出这样或那样的错误让人很困扰,后面的错误分析中我会具体说明是哪些未修改引起的错误。

  文件系统表(/etc/fstab)

   全部都注释掉,只留一行

  /dev/sda2    /  ext3 defaults     1     1

  注:sda2这个要视情况而定。学长告诉我先要在终端中用fdisk -l这个命令,看看哪个在root那一行是*,然后就写成哪个,所以我本来写的是sda1,但是有问题,后来另一个学长告诉我恰恰相反,要用没有用过的,因此用了在fdisk -l里面没有出现的sda2,结果成功了,所以这个选择我希望大家最好还是试试看吧,有兴趣的尝试一下可以告诉我哦~

  补充:刚才我又试了一下,在一切的成功的基础上将sda2都改为sda1也没有问题,不知道是什么情况,希望知道的留言解释,呵呵。

   主机名(/etc/sysconfig/network)

  将主机名修改即可。

  IP和MAC地址(/etc/sysconfig/network-scripts/ifcfg-eth0)

  这个可以不修改,但是不修改则无法上网,至少我用的时候不修改是无法ping通本机的,建议大家修改

  

  更改系统级别(/etc/inittab)

  选择3 ×××面方式

  更改系统安全(/etc/selinux/config)

  改Selinux=disabled selinux管理linux安全

 

  在这些命令执行之后,记住要取消挂载

 

  umount /mnt/fc8

  而且以后改动该镜像文件时,也记住一定要先挂载,然后才更改,更改完以后取消挂载。

 

  接下来是config文件的写法,大家知道我们要跑一个半虚拟镜像需要以下语句

  xend start    //启动xend

  xm create -c XenUexample.cfg   //使用配置文件创建一个半虚拟镜像的虚拟机

  

  XenUexample.cfg这个文件就是我们所需的config文件,我们可以将其放在任何的一个文件夹下,我放在了/home/evangelionyu下面,方便我使用。

 

  首先贴出我的cfg文件:

  kernel="/boot/vmlinuz-2.6.18.8-xen" //内核映像文件

name="XenUexample"   //Dom名称

  memory=256   //分配给新建dom的内存大小

disk=['file:/home/evangelionyu/fc.img,sda2,w']   //指定新建Dom的磁盘设备
vcpus=2   //Dom的CPU数目
root="/dev/sda2 ro"
extra="xencons=tty"
vif=['mac=mac地址']
ip ="ip地址"
netmask ="子网掩码"
dns ="dns地址"
ramdisk="/boot/initrd-2.6.18.8-xen.img"   //暂时不知道是干啥的。。希望大家补充。。

 

      需要指出的是配置文件中的参数一定要和之前改过的文件系统表,以及ip,mac地址等一致,不然会出错。

  ip和mac地址那几行可以不要,但是创建成功了以后就相当于你创建了一个没有网卡的虚拟机,没法进行网络配置,比较悲剧。

 

  最后指出,创建的这个虚拟机是没有界面的,因此只有命令行。

 

  关于常见问题:

 1.如果遇到

  Mount failed for selinuxfs on /selinux:  No such file or directory

Unable to load SELinux policy (No such file or directory). Halting now.

  请你更改系统安全(/etc/selinux/config)

  改Selinux=disabled selinux管理linux安全

 

 2.如果遇到

  启动控制台鼠标服务:O0o.oops(): [daemon/loadlut.c(77)]: is your kernel compiled with CONFIG_SELECTION on?

[失败]
[确定]rond:[确定]
正在启动 kerneloops:[确定]
[确定]td:[确定]
启动 Avahi 守护进程...[确定]
启动 cups:[确定]
启动 anacron:[确定]

  请你更改系统级别(/etc/inittab)

  选择3 ×××面方式

 

 3.如果遇到

[67292.662769] TCP cubic registered

[67292.662866] NET: Registered protocol family 1
[67292.663475] Using IPI No-Shortcut mode
[67292.685096] xen-vbd: registered block device major 3
[67292.686185] blkfront: hda1: barriers enabled
[67292.705112] blkfront: hda2: barriers enabled
[67292.764661] netfront: device eth0 has copying receive path.
[67292.858770] XENBUS: Device with no driver: device/console/0
[67292.868502] Freeing unused kernel memory: 200k freed
[67295.891692] AppArmor: AppArmor initialized<5>audit(1206632734.886:2):  type=1505 info="AppArmor initialized" pid=1089
[67295.983233] fuse init (API version 7.8)
[67296.059192] Failure registering capabilities with primary security module.
[67296.190239] thermal: Unknown symbol acpi_processor_set_thermal_limit
[67300.996194] kjournald starting.  Commit interval 5 seconds
[67301.000855] EXT3-fs: mounted filesystem with ordered data mode.
解决方法

  在xm create -c 所使用的config文件中加入

extra      = 'xencons=tty'

 4.如果还遇到问题,请您检查您的操作系统是否是64位的,如果是的话您在制作镜像时需要把lib64这个文件也考到制作的磁盘文件系统中(参见之前制作磁盘镜像的步骤)

    5.如果遇到cp: preserving permissions for `filename': Operation not supported:

   REASON:
cp和mv命令对于ACL的支持,mv命令保持ACL设置信息,cp命令在
使用-p,-a参数时保留ACL设置信息。但是如果从一个支持ACL的文件系统向
一个不支持ACL的文件系统移动或带ACL属性的拷贝,则会得到类似下面这样的错误提示。

设置了ACL的文件在ls -l时可以看到这样的情况,
-rw-rw----+ 1 allen chen 0 Jun 2 09:52 filename
有个加号在第一个列的末尾。
(pls refer to )

SOLUTION:
[root@FC6server ~]# umount /mnt/var
[root@FC6server ~]# mount /dev/vg/var /mnt/var -o rw,acl
[root@FC6server ~]# cp -a /var/* /mnt/var/
[root@FC6server ~]# 
  

 暂时总结了这么多,希望大家进行问题的补充以及解决方案的补充