IT技术互动交流平台

虚拟化系列之二 建虚拟机

来源:IT165收集  发布日期:2016-05-10 22:32:35
本文 参考地址 从Xen Host Kernel复制出一个半虚拟化的guest

1. img和swap

创建一个50G的用于根文件系统的 img

# dd if=/dev/zero of=/data/xen/xen1.img bs=1M seek=51200 count=0

格式化成ext3

# mkfs -t ext3 /data/xen/xen1.img

创建一个2G的用于swap交换的img

# dd if=/dev/zero of=/data/xen/xen1..swap bs=1M seek=2048 count=0

格式化为swap

# mkswap /data/xen/xen1.swap

2.复制Host的根文件系统到guest的根文件系统img中

# mkdir /tmp/loop

# mount -o loop =/data/xen/xen1.img /tmp/loop -o rw,acl

# cp -ax /{bin,dev,etc,lib,lib64,root,sbin,usr,var} /tmp/loop

这里要非常注意!!!在x86_64中一定要记得复制/lib64,因为lib64中有一些系统必须的链接库。

创建剩余的文件夹

# mkdir /tmp/loop/{home,proc,opt,sys.tmp}

# chmod 777 /tmp/loop/tmp

3.修改guest root filesystem中的一些文件

/tmp/loop/etc/fstab:

/dev/xvda1               /                       ext3    defaults 1 1
/dev/xvda2               none                    swap    sw       0 0
none                    /dev/pts                devpts  gid=5,mode=620 0 0
none                    /dev/shm                tmpfs   defaults 0 0
none                    /proc                   proc    defaults 0 0
none                    /sys                    sysfs   defaults 0 0

注意这些文件中保存的用户信息和主机信息

/tmp/loop/etc/passwd

/tmp/loop/etc/group

/tmp/loop/etc/hosts

修改网络配置

/tmp/loop/etc/sysconfig/network 修改HOSTNAME=xen1,

/etc/sysconfig/network-scripts/ifcfg-eth0 设置一个和Host br0在同一个网段的IP,还要删掉UUID和HWADDR,要不然和host端的硬件地址一样了。或者是在通过控制台连接到虚拟机后再修改也可以。

卸载guest的根目录

# umount /tmp/loop/

4.创建一个xen虚拟机配置文件/etc/xen/xen1.cfg

指定启动内核为Host的内核文件

kernel="/boot/vmlinuz-3.18.25-19.el6.x86_64"ramdisk="/boot/initramfs-3.18.25-19.el6.x86_64.img"name="xen1"memory="4096"disk = ['tap:aio:/data/xen/xen1.img,xvda1,w', 'tap:aio:/data/xen/xen1.swap,xvda2,w']vcpus=4on_reboot="restart"on_crash="destroy"root="/dev/xvda1 ro"extra="selinux=0"vif=["bridge=br1"]

需要注意的是,在启动虚拟机的时候可能会报出dracut: chroot: failed to run command `/sbin/load_policy': No such file or directory,这就是因为clone根文件系统时没有把/lib64复制到guest中造成的,参考http://marc.info/?l=xen-users&m=135907220030809。

 

5.启动并控制台连接到虚拟机

不要用xl create,virsh create创建虚拟机用virsh define!我用前两中方法创建虚拟机没问题,但是关闭虚拟机后就找不到了!

用virsh define创建虚拟机

 

将/etc/xen/下的配置文件转换为virsh的配置文件

 

virsh -c xen:/// domxml-from-native xen-xl xen1.cfg >xen1.xml
创建虚拟机

virsh define xen1.xml

最后出现登录提示,使用Host OS的帐号密码登录即可

CentOS release 6.6 (Final)
Kernel 3.14.42-1.el6xen.x86_64 on an x86_64
centos6-1 login:

6.这样我们就可以通过复制已经创建好的guest的根文件系统img和swap,并且复制修改一个xen客户机配置文件,修改好根文件系统中的一些文件如fstab和network,就可以很方便地clone多个虚拟机了。

 

遇到的问题: 1.执行virsh list命令时: error: Failed to reconnect to the hypervisor
error: no valid connection
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
解决办法: yum -y install avahi /etc/init.d/messagebus restart
/etc/init.d/avahi-daemon restart
/etc/init.d/libvirtd restart
/sbin/chkconfig messagebus on
/sbin/chkconfig avahi-daemon on
2.Error, some other host already uses address 解决办法: 注释/etc/sysconfig/Network-scripts/ifup-eth文件内容:
#if ! arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${IPADDR} ; then
# net_log $"Error, some other host already uses address ${IPADDR}."
# exit 1
#fi
service network restart
3.xl创建虚拟机复制目录时 cp -ax /{bin,dev,etc,lib,root,sbin,usr,var} /tmp/loop报错: cp: preserving permissions for `/mnt/var/run/cups/certs/0': Operation not supported
解决办法:挂载时加参数-o rw,acl mount -o loop /data/xen/xen2.img /tmp/loop -o rw,acl
4.创建第5台虚拟机的时候 Error: Device 2049 (vbd) could not be connected. Failed to find an unused loop device
解决办法:
MAKEDEV -v /dev/loop
Tag标签: 虚拟化系列之二   建虚拟机  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规