kvm虚拟机的克隆分为两种情况,本文也就通过以下两种情况进行克隆,克隆虚拟机为CentOS6.5x86_64。
(1) KVM主机本机虚拟机直接克隆。
(2) 通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移)。
1. 本机虚拟机直接克隆
(1) 查看虚拟机配置文件
[root@node1 ~]# cat /etc/libvirt/qemu/CentOS6.5-01.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit CentOS6.5-01 or other application using the libvirt API. --> <domain type='kvm'> <name>CentOS6.5-01</name> <uuid>7d48f7b5-2fbf-91a9-2c3f-e52ba6079c8e</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='rhel6.6.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/data/kvm/CentOS6.5-01.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> </controller> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:56:9a:7f'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain> [root@node1 ~]#
虚拟机磁盘文件: /data/kvm/CentOS6.5-01.img
虚拟机名称:CentOS6.5-01
(2) 开始克隆
# virt-clone -o CentOS6.5-01 -n CentOS6.5-02 -f /data/kvm/CentOS6.5-02.img
说明:以CentOS6.5-01做为源,克隆CentOS6.5-01虚拟机,并创建名称为CentOS6.5-02虚拟机,使用磁盘文件/data/kvm/CentOS6.5-02.img
注:Domain with devices to clone must be paused or shutoff
(3) 启动虚拟机并配置主机名,IP地址等
[root@node1 ~]# virsh console CentOS6.5-02 Connected to domain CentOS6.5-02 Escape character is ^] Welcome to CentOS Starting udev: G[ OK ] Setting hostname CentOS6.5-01: [ OK ] Setting up Logical Volume Management: No volume groups found [ OK ] Checking filesystems Checking all file systems. [/sbin/fsck.ext4 (1) -- /] fsck.ext4 -a /dev/vda3 /dev/vda3: clean, 64707/413712 files, 435066/1652480 blocks [/sbin/fsck.ext4 (1) -- /boot] fsck.ext4 -a /dev/vda1 /dev/vda1: Superblock last write time is in the future. (by less than a day, probably due to the hardware clock being incorrectly set). FIXED. /dev/vda1: clean, 38/51200 files, 36139/204800 blocks [ OK ] Remounting root filesystem in read-write mode: [ OK ] Mounting local filesystems: [ OK ] Enabling local filesystem quotas: [ OK ] Enabling /etc/fstab swaps: [ OK ] Entering non-interactive startup Calling the system activity data collector (sadc)... ip6tables: Applying firewall rules: [ OK ] iptables: Applying firewall rules: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. [FAILED] Starting auditd: [ OK ] Starting system logger: [ OK ] Starting irqbalance: [ OK ] Starting kdump:[FAILED] Starting system message bus: [ OK ] Mounting filesystems: [ OK ] Starting acpi daemon: [ OK ] Starting HAL daemon: [ OK ] Retrigger failed udev events[ OK ] Adding udev persistent rules[ OK ] Starting sshd: [ OK ] Starting postfix: [ OK ] Starting abrt daemon: [ OK ] Starting crond: [ OK ] Starting atd: [ OK ] CentOS release 6.5 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 CentOS6.5-01 login: root Password: Last login: Wed Nov 22 13:10:59 from 192.168.21.128 [root@CentOS6 ~]#
(4) 修改主机名,IP地址等
修改主机名
[root@CentOS6 ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=CentOS6.5-02 GATEWAY=10.10.172.1 [root@CentOS6 ~]# hostname CentOS6.5-02
修改IP地址
[root@CentOS6 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=77733023-71ab-41bf-9cfb-2a2a5510857a ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none HWADDR=52:54:00:56:9A:7F IPADDR=10.10.172.243 PREFIX=24 GATEWAY=10.10.172.1 DNS1=192.168.172.208 DNS2=192.168.172.209 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" [root@CentOS6 ~]#
重启网卡服务:
[root@CentOS6 ~]# service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. [FAILED] [root@CentOS6 ~]#
2. 复制配置文件与磁盘文件克隆
(1) 导入kvm虚拟机配置文件
这里采用oeltest01做为模板,进行克隆。
# virsh shutdown CentOS6.5-01
# virsh dumpxml CentOS6.5-01 > /etc/libvirt/qemu/CentOS6.5-03.xml
(2) 复制kvm虚拟机磁盘文件
本系列文章都是采用虚拟磁盘文件进行测试,没有使用lvm卷。
通过查看配置文件:虚拟磁盘位置<source file='/data/kvm/CentOS6.5-01.img'/>
(3) 直接编辑修改配置文件
修改name,uuid,disk位置,vnc端口
此时还是将该配置文件注册进来,无法通过virsh edit进行编辑。
[root@node1 kvm]# cat /etc/libvirt/qemu/CentOS6.5-03.xml <domain type='kvm' id='17'> <name>CentOS6.5-03</name> <uuid>7d48f7b5-2fbf-91a9-2c3f-e52ba6079c8d</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='rhel6.6.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source file='/data/kvm/CentOS6.5-03.img'/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <alias name='ide0-1-0'/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <alias name='usb0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <alias name='usb0'/> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <alias name='usb0'/> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <alias name='usb0'/> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/> </controller> <controller type='ide' index='0'> <alias name='ide0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='bridge'> <mac address='52:54:00:56:9a:7f'/> <source bridge='br0'/> <target dev='vnet1'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/2'/> <target port='0'/> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/2'> <source path='/dev/pts/2'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='5913' autoport='no' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <video> <model type='cirrus' vram='9216' heads='1'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices> </domain>
(4) 定义新虚拟机配置文件
[root@node1 kvm]# virsh define /etc/libvirt/qemu/CentOS6.5-03.xml
启动虚拟机
[root@node1 kvm]# virsh start CentOS6.5-03 Domain CentOS6.5-03 started
(5) 登录虚拟机进行主机名,IP等修改
[root@node1 kvm]# virsh console CentOS6.5-03 Connected to domain CentOS6.5-03 Escape character is ^] Welcome to CentOS Starting udev: G[ OK ] Setting hostname CentOS6.5-01: [ OK ] Setting up Logical Volume Management: No volume groups found [ OK ] Checking filesystems Checking all file systems. [/sbin/fsck.ext4 (1) -- /] fsck.ext4 -a /dev/vda3 /dev/vda3: clean, 64734/413712 files, 435081/1652480 blocks [/sbin/fsck.ext4 (1) -- /boot] fsck.ext4 -a /dev/vda1 /dev/vda1: recovering journal /dev/vda1: clean, 38/51200 files, 36139/204800 blocks [ OK ] Remounting root filesystem in read-write mode: [ OK ] Mounting local filesystems: [ OK ] Enabling local filesystem quotas: [ OK ] Enabling /etc/fstab swaps: [ OK ] Entering non-interactive startup Calling the system activity data collector (sadc)... ip6tables: Applying firewall rules: [ OK ] iptables: Applying firewall rules: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining if ip address 10.10.172.241 is already in use for device eth0... [ OK ] Starting auditd: [ OK ] Starting system logger: [ OK ] Starting irqbalance: [ OK ] Starting kdump:[FAILED] Starting system message bus: [ OK ] Mounting filesystems: [ OK ] Starting acpi daemon: [ OK ] Starting HAL daemon: [ OK ] Retrigger failed udev events[ OK ] Starting sshd: [ OK ] Starting postfix: [ OK ] Starting abrt daemon: [ OK ] Starting crond: [ OK ] Starting atd: [ OK ] CentOS release 6.5 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 CentOS6.5-01 login: root Password: Last login: Wed Nov 22 13:10:59 from 192.168.21.128 [root@CentOS6 ~]# [root@CentOS6 ~]#
修改主机名
[root@CentOS6 ~]# sed -i '/HOSTNAME/s/CentOS6.5-01/CentOS6.5-03/g' /etc/syscog/network [root@CentOS6 ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=CentOS6.5-03 GATEWAY=10.10.172.1 [root@CentOS6 ~]# hostname CentOS6.5-03 [root@CentOS6 ~]#
修改IP地址
[root@CentOS6 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=77733023-71ab-41bf-9cfb-2a2a5510857a ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none HWADDR=52:54:01:56:9A:7F IPADDR=10.10.172.243 PREFIX=24 GATEWAY=10.10.172.1 DNS1=192.168.172.208 DNS2=192.168.172.209 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" [root@CentOS6 ~]#
重启网卡服务
[root@CentOS6 ~]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining if ip address 10.10.172.243 is already in use for device eth0... [ OK ] [root@CentOS6 ~]#
修改70-persistent-net.rules文件
[root@CentOS6 ~]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x1af4:0x1000 (virtio-pci) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:01:56:9a:7f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" [root@CentOS6 ~]#
本文到此通过两种方式进行kvm虚拟机克隆,其实各有用处。
再次说明:本文克隆的虚拟机是CentOS6.5,如果克隆的虚拟机是RHEL/CentOS/OEL6.x操作系统,需要修改/etc/udev/rules.d/70-persistent-net.rules文件。