XEN半虚拟机Image制作方法及相关问题

 

 

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

 该博客十分强大

你可能感兴趣的:(虚拟机,职场,测试,休闲,制作方法)