虛擬化系列之二--創建虛擬機

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=4
on_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

5.克隆出的虛擬機在在調用virsh undefine $domain時,報

Refusing to undefine while domain managed save image exists

解決辦法:virsh undefine $domain  --managed-save
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章