Kvm

kvm虚拟机克隆过程详解

在使用ucloud云主机的时候,发现他们制作镜像只能克隆系统盘数据制作,这是为什么,为什么不能连数据盘一起克隆呢,然后就问了一下他们的技术人员,他们底层用的是kvm技术,因为kvm镜像制作会按照你主机空间大小块来克隆,意思就是说,比如我/ 分区大小为20G,数据盘/data分区大小为200G,然后你连着数据盘一起制作镜像的话,存在两个问题:
    []克隆镜像使用时间较长[/][]克隆出来的镜像大小较大,如上面所说的主机,那克隆出来的镜像大小为220G[/]
所以基于这种情况,ucloud的上面的云主机默认创建的主机系统磁盘大小为20G,创建镜像的时候只会克隆系统盘!所以你要做基准镜像,就需要先创建一个基准系统,安装好服务,然后做镜像,最后挂载数据盘!   同样我们公司内网也使用了一些kvm虚拟机作为内网的测试环境和一些服务。下面简单的记录自己的笔记,总结还是看自己的笔记比较有思路,回头看思路比较清晰!   查阅资料和书籍,kvm虚拟机克隆有如下两种方式:
    []KVM本机虚拟机直接克隆[/][]通过复制xml文件与磁盘文件复制克隆 (适用于异机的静态迁移和状态保存便于以后使用)。[/]
下面逐一介绍:

一、本机直接克隆

1、查看虚拟机配置文件获取磁盘文件路径
[root@kvmsuzhu2 ~]# cat /etc/libvirt/qemu/hysen_6101_101.xml |grep 'source file'|grep img      [root@kvmsuzhu2 ~]# cat /etc/libvirt/qemu/hysen_6101_101.xml |grep '^.*/name>$'  hysen_6101_101[root@kvmsuzhu2 ~]# 
克隆前确认主机已经关闭:
[root@kvmsuzhu ~]# virsh list --all Id    名称                         状态---------------------------------------------------- 3     dev_5974_74                    running 14    dev_5954_54                    running -     hysen_6101_101                 关闭 -     openstack_5978_78              关闭
不关闭则克隆会报ERROR    Domain with devices to clone must be paused or shutoff.
2、开始克隆
[root@kvmsuzhu2 ~]# virt-clone -o hysen_6101_101 -n hysen_6103_103 -f /data1/vmdisk/hysen_6103_103.img 正在克隆 hysen_6101_101.img                                                                        |  30 GB     13:55     Clone 'hysen_6103_103' created successfully.克隆已经完成30G的大小!
3、修改vnc端口号,启动主机
[root@kvmsuzhu2 ~]# cat /etc/libvirt/qemu/hysen_6103_103.xml |grep 'vnc'    [root@kvmsuzhu2 ~]# virsh edit hysen_6103_103    //这里你必须用virsh edit命令编辑配置文件,用vim编辑是不会生效的!编辑了域 hysen_6103_103 XML 配置。[root@kvmsuzhu2 ~]# cat /etc/libvirt/qemu/hysen_6103_103.xml |grep 'vnc'    [root@kvmsuzhu2 ~]# virsh start hysen_6103_103.xml域 hysen_6103_103 已开始[root@kvmsuzhu2 ~]# netstat -anltp |grep 6103tcp        0      0 0.0.0.0:6103                0.0.0.0:*                   LISTEN      13740/qemu-kvm [root@kvmsuzhu2 ~]#  
4、修改主机名、ip地址
修改主机名[root@hysen_6101_101 ~]# vi /etc/sysconfig/networkNETWORKING=yes    NETWORKING_IPV6=no     HOSTNAME=hysen_6103_103 GATEWAY=10.0.1.1[root@hysen_6101_101 ~]# hostname hysen_6103_103修改IP地址[root@hysen_6103_103 ~]# vi /etc/sysconfig/network-script/ifcfg-eth0# Virtio Network Device    DEVICE=eth0     BOOTPROTO=static     ONBOOT=yes     HWADDR=52:54:00:ae:1d:7b     IPADDR=10.0.1.117     NETMASK=255.255.255.0注意修改mac地址,有uuid的配置修改uuid配置[root@hysen_6103_103 ~]# service network start重启报错:device eth0 does not seem to be present, delaying initialization如下操作解决:[root@hysen_6103_103 ~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules 有说修改文件把eth0和eth1互换的也可以![root@hysen_6103_103 ~]# reboot重启网卡服务[root@hysen_6103_103 ~]# service network start    Bringing up loopback interface:  [  OK  ]     Bringing up interface eth0:  [  OK  ]     [root@hysen_6103_103 ~]# 

二、通过复制xml文件与磁盘文件复制克隆

我们这里还是拿hysen_6101_101虚拟机作为模板机器克隆。同样这种方法也需要模板机器已经关机!1、复制xml配置文件
[root@kvmsuzhu2 ~]# virsh dumpxml hysen_6101_101 > /etc/libvirt/qemu/hysen_6105_105.xml[root@kvmsuzhu2 ~]# ls -l /etc/libvirt/qemu/hysen_6105_105.xml-rw-r--r-- 1 root root 2748 10月 17 17:50 /etc/libvirt/qemu/hysen_6105_105.xml[root@kvmsuzhu2 ~]#
2、复制hysen_6101_101虚拟机磁盘文件
[root@kvmsuzhu2 ~]# cp  /data1/vmdisk/hysen_6101_101.img  /data1/vmdisk/hysen_6105_105.img[root@kvmsuzhu2 ~]# ls /data1/vmdisk/hysen_6105_105.img/data1/vmdisk/hysen_6105_105.img[root@kvmsuzhu2 ~]# 
3、修改拷贝的配置文件
    []修改虚拟机的名称:hysen_6105_105[/][]修改uuid编号:13178d42-1055-8b94-1411-3c2bdd0e6e7a<[/][]修改mac地址:[/][]修改disk位置:[/][]修改vnc端口:[/]
此时还是将该配置文件注册进来,无法通过virsh edit进行编辑。
[root@kvmsuzhu2 ~]# vim /etc/libvirt/qemu/hysen_6105_105.xml
hysen_6101_101
13178d42-1055-8b94-1411-3c2bdd0e6e7a

4、定义新虚拟机配置文件
[root@kvmsuzhu2 ~]# virsh define /etc/libvirt/qemu/hysen_6105_105.xml 
定义域 hysen_6105_105(从 /etc/libvirt/qemu/hysen_6105_105.xml)

[root@kvmsuzhu2 ~]# 
5、启动虚拟机并设置开机自启
[root@kvmsuzhu2 ~]# virsh start hysen_6105_105
域 hysen_6105_105 已开始

[root@kvmsuzhu2 ~]# virsh autostart hysen_6105_105
域 hysen_6105_105标记为自动开始

[root@kvmsuzhu2 ~]# virsh list --all |grep hysen_6105_105
 237   hysen_6105_105                 running
[root@kvmsuzhu2 ~]# 
6、vnc连接修改主机名、ip地址
4、修改主机名、ip地址
修改主机名
[root@hysen_6101_101 ~]# vi /etc/sysconfig/network
NETWORKING=yes    
NETWORKING_IPV6=no     
HOSTNAME=hysen_6105_105 
GATEWAY=10.0.1.1
[root@hysen_6101_101 ~]# hostname hysen_6105_105

修改IP地址
[root@hysen_6105_105 ~]# vi /etc/sysconfig/network-script/ifcfg-eth0
# Virtio Network Device    
DEVICE=eth0     
BOOTPROTO=static     
ONBOOT=yes     
HWADDR=54:52:01:11:12:1f     
IPADDR=10.0.1.118     
NETMASK=255.255.255.0

重启网卡服务
[root@hysen_6105_105 ~]# service network start
重启报错:device eth0 does not seem to be present, delaying initialization

如下操作解决:
[root@hysen_6105_105 ~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules 有说修改文件把eth0和eth1互换的也可以!
[root@hysen_6105_105 ~]# reboot

重启之后再次登陆重启动网卡:
[root@hysen_6105_105 ~]# service network start
Bringing up loopback interface:  [  OK  ]     
Bringing up interface eth0:  [  OK  ]  
两种不同的方式有各有特点,你可以针对特点选择性使用!

2 个评论

文章不错啊 非常详细!赞
koyo

koyo 回复 Ansible

嘿嘿 把自己工作中遇到的 总结一些 分享出来 回头自己再用,就非常明了了!

要回复文章请先登录注册