在编译安装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 http://a3linux.blogspot.com/2005/09/linuxacl.html)
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 ~]#
暂时总结了这么多,希望大家进行问题的补充以及解决方案的补充