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的內核文件
需要注意的是,在啓動虛擬機的時候可能會報出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多個虛擬機了。
error: no valid connection
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
/etc/init.d/avahi-daemon restart
/etc/init.d/libvirtd restart
/sbin/chkconfig messagebus on
/sbin/chkconfig avahi-daemon on
#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
解決辦法:
MAKEDEV -v /dev/loop
5.克隆出的虛擬機在在調用virsh undefine $domain時,報