XEN半虚拟机Image制作方法及相关问题
经过几天的奋斗终于搞定了XEN虚拟机Image的制作。使用的是复制本机文件的方法。不涉及到virt相关方法。
测试环境 REDHAT 5.1 CentOS 5.8
XEN版本:3.1.2
1、 确定XEN版本
cd /sys/hypervisor
cat version/major
cat version/minor
cat version/extra
2、 确定硬件是否支持XEN。命令如下:
cat /proc/cpuinfo | grep flags
出现pae表示支持
Flags: fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
3、 关闭宿主机器防火墙并且禁用SELINUX
4、 制作一个Image虚拟镜像
a) 建立根目录所需镜像文件
Mkdir –p /disk2/xen
Cd /disk/xen
Dd if=/dev/zero of=xen.img bs=1M count=5000
Xen.img 为镜像文件,大小是5G
b) 格式化该镜像
Mke2fs –j /disk2/xen/xen.img
提示继续(Y)
c) 首先挂载镜像空间可用
Mount –o loop /disk2/xen/xen.img /mnt
d) 复制所需文件到挂载文件夹下
Cp –ax /{root,dev,lib,etc,sbin,bin,var,usr} /mnt
这里var中的/run会报两个错误,无视它就ok
e) 新建一些必备文件夹
Mkdir /mnt/{proc,sys,home,,tmp,selinux}
f) 更改系统表
[root@linux ~]# vi /mnt/etc/fstab
/dev/sda1 / ext3 defaults 1 1
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
g) 这里设定网络参数
[root@linux~]# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
这里有两种方式,如果是使用自动IP就改为如下形式:
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
如果要自己手动配置IP则改成如下形式:
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.186
NETMASK=255.255.255.0
NETWORK=192.168.1.0
GATEWAY=192.168.1.2
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPVAINIT=no
PEERDNS=yes
加下划线的部分根据自己情况设定,可以参考/etc/sysconfig/network-scripts/ifcfg-eth0 文件。
h) 卸载
Umount /mnt
i) 设置虚拟磁盘
[root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt
[root@linux ~]# cd /boot
[root@linux boot]# mkinitrd -v -f --fstab /mnt/etc/fstab --with xenblk \
> --with xennet --preload xenblk --preload xennet \
> initrd-2.6.18-8.1.14.el5xen.vbird.img `uname -r`
[root@linux boot]# umount /mnt
�K且加上一些 xen 驱动程序!
最终会制作出一个 initrd-2.6.18-8.1.14.el5xen.vbird.img 档案
j) 虚拟资料设定档(启动所需配置文件)
[root@linux ~]# vi /etc/xen/centos5
name = "centos5"
kernel = "/boot/vmlinuz-2.6.18-8.1.14.el5xen"
ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img"
memory = "128"
vcpus = 1
vif = [ 'bridge=xenbr0' ]
disk = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ]
root = "/dev/sda1 ro "
路径和名字自己起,最好放在/etc/xen下面,因为xen有配置文件例子在这里面
name: 只是一���@示的名�Q,一般建�h�c�n名相同即可;
kernel: 在 domain-0 上面的档案,用来开启domain-U
ramdisk: 就是 initrd 那个档案
memory: 分配给domain-U的内存
vcpus: 虚拟CPU数
vif: 可以进行一些联网设置,初学者不建议设置其他项。
disk: 将IMG映射到启动盘/dev/sda1
这里的disk中的sda1必须和root中的sda1还有(f)步骤中的sda1相同。
k) 启动domian-u即刚制作的虚拟机
Xm create –c /etc/xen/centos5
此处centos5就是你的配置文件路径
l) 正常启动后会有login:的登录提示。表示虚拟机可以正常启动了。另外在宿主机上可以通过虚拟机管理器查看,也可以通过xm list 命令查看当前运行的domain。
m) 关闭虚拟机命令
Shutdown -h now
n) 本地切换虚拟机命令 xm console [domain-ID]
5、 常见错误及解决办法
i) 关于cannot mount root fs
Please append a correct “root=” boot option
Cannont open root device “sda” or unknow-block(0,0)
等均为无法识别sda分区的原因,可能是因为sda分区不存在导致,也可能是SICI驱动器的原因。
A)要新建一个sda分区,例如,sda8,然后才能使用上诉方法成功挂载。
B)关于sda分区还有一种可能是sici驱动问题,解决这个问题应该先看虚拟机支持的硬件环境,然后加载相应驱动。
ii) Unknow hostname 无法解析DNS、
Ping通内网,不通外网。
关键在于是否忘记添加(j)中这句vif = [ 'bridge=xenbr0' ]
xen会给domain0新建多个虚拟网口,也就是vif0..n,这些网络是与DomainU前端相对应的,所以是没有物理地址的,当你启动DomainU之后,实际DomainU的网口会与相应的vif绑定并连接到xenbr0上(如果你配置文件这样指定的话),这样采用桥接的方式就可以使DomainU上网,按照以上的方式的话,你DomainU的网络完全取决于你domain0的网络。确保xen开启前eth0网络通,并且保证网桥连接正确(如果不正确可以手动建立网桥并修改配置文件指定网桥,或者xen中脚本。
iii) 无法ping通外网
如果你在一个局域网内,可能是需要将设定IP在管理员处注册,才能通外网。
学习参考 http://linux.vbird.org/linux_enterprise/xen.php#xen_example_0
该博客十分强大