kvm虛拟機的克隆分為兩種情況,本文也就通過以下兩種情況進行克隆,克隆虛拟機為CentOS6.5x86_64。
(1) KVM主機本機虛拟機直接克隆。
(2) 通過複制配置檔案與磁盤檔案的虛拟機複制克隆(适用于異機的靜态遷移)。
(1) 檢視虛拟機配置檔案
<code>[root@node1 ~]</code><code># cat /etc/libvirt/qemu/CentOS6.5-01.xml</code>
<code><!--</code>
<code>WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE </code>
<code>OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:</code>
<code> </code><code>virsh edit CentOS6.5-01</code>
<code>or other application using the libvirt API.</code>
<code>--></code>
<code><domain </code><code>type</code><code>=</code><code>'kvm'</code><code>></code>
<code> </code><code><name>CentOS6.5-01<</code><code>/name</code><code>></code>
<code> </code><code><uuid>7d48f7b5-2fbf-91a9-2c3f-e52ba6079c8e<</code><code>/uuid</code><code>></code>
<code> </code><code><memory unit=</code><code>'KiB'</code><code>>1048576<</code><code>/memory</code><code>></code>
<code> </code><code><currentMemory unit=</code><code>'KiB'</code><code>>1048576<</code><code>/currentMemory</code><code>></code>
<code> </code><code><vcpu placement=</code><code>'static'</code><code>>1<</code><code>/vcpu</code><code>></code>
<code> </code><code><os></code>
<code> </code><code><</code><code>type</code> <code>arch=</code><code>'x86_64'</code> <code>machine=</code><code>'rhel6.6.0'</code><code>>hvm<</code><code>/type</code><code>></code>
<code> </code><code><boot dev=</code><code>'hd'</code><code>/></code>
<code> </code><code><</code><code>/os</code><code>></code>
<code> </code><code><features></code>
<code> </code><code><acpi/></code>
<code> </code><code><apic/></code>
<code> </code><code><pae/></code>
<code> </code><code><</code><code>/features</code><code>></code>
<code> </code><code><clock offset=</code><code>'utc'</code><code>/></code>
<code> </code><code><on_poweroff>destroy<</code><code>/on_poweroff</code><code>></code>
<code> </code><code><on_reboot>restart<</code><code>/on_reboot</code><code>></code>
<code> </code><code><on_crash>restart<</code><code>/on_crash</code><code>></code>
<code> </code><code><devices></code>
<code> </code><code><emulator></code><code>/usr/libexec/qemu-kvm</code><code><</code><code>/emulator</code><code>></code>
<code> </code><code><disk </code><code>type</code><code>=</code><code>'file'</code> <code>device=</code><code>'disk'</code><code>></code>
<code> </code><code><driver name=</code><code>'qemu'</code> <code>type</code><code>=</code><code>'raw'</code> <code>cache=</code><code>'none'</code><code>/></code>
<code> </code><code><</code><code>source</code> <code>file</code><code>=</code><code>'/data/kvm/CentOS6.5-01.img'</code><code>/></code>
<code> </code><code><target dev=</code><code>'vda'</code> <code>bus=</code><code>'virtio'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x05'</code> <code>function</code><code>=</code><code>'0x0'</code><code>/></code>
<code> </code><code><</code><code>/disk</code><code>></code>
<code> </code><code><disk </code><code>type</code><code>=</code><code>'block'</code> <code>device=</code><code>'cdrom'</code><code>></code>
<code> </code><code><driver name=</code><code>'qemu'</code> <code>type</code><code>=</code><code>'raw'</code><code>/></code>
<code> </code><code><target dev=</code><code>'hdc'</code> <code>bus=</code><code>'ide'</code><code>/></code>
<code> </code><code><</code><code>readonly</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'drive'</code> <code>controller=</code><code>'0'</code> <code>bus=</code><code>'1'</code> <code>target=</code><code>'0'</code> <code>unit=</code><code>'0'</code><code>/></code>
<code> </code><code><controller </code><code>type</code><code>=</code><code>'usb'</code> <code>index=</code><code>'0'</code> <code>model=</code><code>'ich9-ehci1'</code><code>></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x04'</code> <code>function</code><code>=</code><code>'0x7'</code><code>/></code>
<code> </code><code><</code><code>/controller</code><code>></code>
<code> </code><code><controller </code><code>type</code><code>=</code><code>'usb'</code> <code>index=</code><code>'0'</code> <code>model=</code><code>'ich9-uhci1'</code><code>></code>
<code> </code><code><master startport=</code><code>'0'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x04'</code> <code>function</code><code>=</code><code>'0x0'</code> <code>multifunction=</code><code>'on'</code><code>/></code>
<code> </code><code><controller </code><code>type</code><code>=</code><code>'usb'</code> <code>index=</code><code>'0'</code> <code>model=</code><code>'ich9-uhci2'</code><code>></code>
<code> </code><code><master startport=</code><code>'2'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x04'</code> <code>function</code><code>=</code><code>'0x1'</code><code>/></code>
<code> </code><code><controller </code><code>type</code><code>=</code><code>'usb'</code> <code>index=</code><code>'0'</code> <code>model=</code><code>'ich9-uhci3'</code><code>></code>
<code> </code><code><master startport=</code><code>'4'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x04'</code> <code>function</code><code>=</code><code>'0x2'</code><code>/></code>
<code> </code><code><controller </code><code>type</code><code>=</code><code>'ide'</code> <code>index=</code><code>'0'</code><code>></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x01'</code> <code>function</code><code>=</code><code>'0x1'</code><code>/></code>
<code> </code><code><interface </code><code>type</code><code>=</code><code>'bridge'</code><code>></code>
<code> </code><code><mac address=</code><code>'52:54:00:56:9a:7f'</code><code>/></code>
<code> </code><code><</code><code>source</code> <code>bridge=</code><code>'br0'</code><code>/></code>
<code> </code><code><model </code><code>type</code><code>=</code><code>'virtio'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x03'</code> <code>function</code><code>=</code><code>'0x0'</code><code>/></code>
<code> </code><code><</code><code>/interface</code><code>></code>
<code> </code><code><serial </code><code>type</code><code>=</code><code>'pty'</code><code>></code>
<code> </code><code><target port=</code><code>'0'</code><code>/></code>
<code> </code><code><</code><code>/serial</code><code>></code>
<code> </code><code><console </code><code>type</code><code>=</code><code>'pty'</code><code>></code>
<code> </code><code><target </code><code>type</code><code>=</code><code>'serial'</code> <code>port=</code><code>'0'</code><code>/></code>
<code> </code><code><</code><code>/console</code><code>></code>
<code> </code><code><input </code><code>type</code><code>=</code><code>'mouse'</code> <code>bus=</code><code>'ps2'</code><code>/></code>
<code> </code><code><graphics </code><code>type</code><code>=</code><code>'vnc'</code> <code>port=</code><code>'5910'</code> <code>autoport=</code><code>'no'</code> <code>listen=</code><code>'0.0.0.0'</code><code>></code>
<code> </code><code><listen </code><code>type</code><code>=</code><code>'address'</code> <code>address=</code><code>'0.0.0.0'</code><code>/></code>
<code> </code><code><</code><code>/graphics</code><code>></code>
<code> </code><code><video></code>
<code> </code><code><model </code><code>type</code><code>=</code><code>'cirrus'</code> <code>vram=</code><code>'9216'</code> <code>heads=</code><code>'1'</code><code>/></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x02'</code> <code>function</code><code>=</code><code>'0x0'</code><code>/></code>
<code> </code><code><</code><code>/video</code><code>></code>
<code> </code><code><memballoon model=</code><code>'virtio'</code><code>></code>
<code> </code><code><address </code><code>type</code><code>=</code><code>'pci'</code> <code>domain=</code><code>'0x0000'</code> <code>bus=</code><code>'0x00'</code> <code>slot=</code><code>'0x06'</code> <code>function</code><code>=</code><code>'0x0'</code><code>/></code>
<code> </code><code><</code><code>/memballoon</code><code>></code>
<code> </code><code><</code><code>/devices</code><code>></code>
<code><</code><code>/domain</code><code>></code>
<code>[root@node1 ~]</code><code>#</code>
虛拟機磁盤檔案: /data/kvm/CentOS6.5-01.img
虛拟機名稱:CentOS6.5-01
<a href="https://s3.51cto.com/oss/201711/22/df9cb42d56fe9467ce61e968a1bdd8be.jpg-wh_500x0-wm_3-wmp_4-s_1231554280.jpg" target="_blank"></a>
(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
<a href="https://s4.51cto.com/oss/201711/22/7654eb3950ddb314b8082d217e9ddd71.png-wh_500x0-wm_3-wmp_4-s_1470921607.png" target="_blank"></a>
注:Domain with devices to clone must be paused or shutoff
(3) 啟動虛拟機并配置主機名,IP位址等
<a href="https://s4.51cto.com/oss/201711/22/9062e065d31a9a01fedea9bb0e5347b4.png-wh_500x0-wm_3-wmp_4-s_368153796.png" target="_blank"></a>
<code>[root@node1 ~]</code><code># virsh console CentOS6.5-02</code>
<code>Connected to domain CentOS6.5-02</code>
<code>Escape character is ^]</code>
<code> </code><code>Welcome to CentOS </code>
<code>Starting udev: G[ OK ]</code>
<code>Setting </code><code>hostname</code> <code>CentOS6.5-01: [ OK ]</code>
<code>Setting up Logical Volume Management: No volume </code><code>groups</code> <code>found</code>
<code>[ OK ]</code>
<code>Checking filesystems</code>
<code>Checking all </code><code>file</code> <code>systems.</code>
<code>[</code><code>/sbin/fsck</code><code>.ext4 (1) -- /] </code><code>fsck</code><code>.ext4 -a </code><code>/dev/vda3</code>
<code>/dev/vda3</code><code>: clean, 64707</code><code>/413712</code> <code>files, 435066</code><code>/1652480</code> <code>blocks</code>
<code>[</code><code>/sbin/fsck</code><code>.ext4 (1) -- </code><code>/boot</code><code>] </code><code>fsck</code><code>.ext4 -a </code><code>/dev/vda1</code>
<code>/dev/vda1</code><code>: Superblock last write </code><code>time</code> <code>is </code><code>in</code> <code>the future.</code>
<code> </code><code>(by </code><code>less</code> <code>than a day, probably due to the hardware clock being incorrectly </code><code>set</code><code>). FIXED.</code>
<code>/dev/vda1</code><code>: clean, 38</code><code>/51200</code> <code>files, 36139</code><code>/204800</code> <code>blocks</code>
<code>Remounting root filesystem </code><code>in</code> <code>read</code><code>-write mode: [ OK ]</code>
<code>Mounting </code><code>local</code> <code>filesystems: [ OK ]</code>
<code>Enabling </code><code>local</code> <code>filesystem quotas: [ OK ]</code>
<code>Enabling </code><code>/etc/fstab</code> <code>swaps: [ OK ]</code>
<code>Entering non-interactive startup</code>
<code>Calling the system activity data collector (sadc)... </code>
<code>ip6tables: Applying firewall rules: [ OK ]</code>
<code>iptables: Applying firewall rules: [ OK ]</code>
<code>Bringing up loopback interface: [ OK ]</code>
<code>Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.</code>
<code>[FAILED]</code>
<code>Starting auditd: [ OK ]</code>
<code>Starting system logger: [ OK ]</code>
<code>Starting irqbalance: [ OK ]</code>
<code>Starting kdump:[FAILED]</code>
<code>Starting system message bus: [ OK ]</code>
<code>Mounting filesystems: [ OK ]</code>
<code>Starting acpi daemon: [ OK ]</code>
<code>Starting HAL daemon: [ OK ]</code>
<code>Retrigger failed udev events[ OK ]</code>
<code>Adding udev persistent rules[ OK ]</code>
<code>Starting sshd: [ OK ]</code>
<code>Starting postfix: [ OK ]</code>
<code>Starting abrt daemon: [ OK ]</code>
<code>Starting crond: [ OK ]</code>
<code>Starting atd: [ OK ]</code>
<code>CentOS release 6.5 (Final)</code>
<code>Kernel 2.6.32-431.el6.x86_64 on an x86_64</code>
<code>CentOS6.5-01 login: root</code>
<code>Password: </code>
<code>Last login: Wed Nov 22 13:10:59 from 192.168.21.128</code>
<code>[root@CentOS6 ~]</code><code>#</code>
(4) 修改主機名,IP位址等
修改主機名
<code>[root@CentOS6 ~]</code><code># cat /etc/sysconfig/network</code>
<code>NETWORKING=</code><code>yes</code>
<code>HOSTNAME=CentOS6.5-02</code>
<code>GATEWAY=10.10.172.1</code>
<code>[root@CentOS6 ~]</code><code># hostname CentOS6.5-02</code>
修改IP位址
<code>[root@CentOS6 ~]</code><code># cat /etc/sysconfig/network-scripts/ifcfg-eth0 </code>
<code>DEVICE=eth0</code>
<code>TYPE=Ethernet</code>
<code>UUID=77733023-71ab-41bf-9cfb-2a2a5510857a</code>
<code>ONBOOT=</code><code>yes</code>
<code>NM_CONTROLLED=</code><code>yes</code>
<code>BOOTPROTO=none</code>
<code>HWADDR=52:54:00:56:9A:7F</code>
<code>IPADDR=10.10.172.243</code>
<code>PREFIX=24</code>
<code>DNS1=192.168.172.208</code>
<code>DNS2=192.168.172.209</code>
<code>DEFROUTE=</code><code>yes</code>
<code>IPV4_FAILURE_FATAL=</code><code>yes</code>
<code>IPV6INIT=no</code>
<code>NAME=</code><code>"System eth0"</code>
重新開機網卡服務:
<code>[root@CentOS6 ~]</code><code># service network restart</code>
<code>Shutting down loopback interface: [ OK ]</code>
(1) 導入kvm虛拟機配置檔案
這裡采用oeltest01做為模闆,進行克隆。
# virsh shutdown CentOS6.5-01
<a href="https://s4.51cto.com/oss/201711/22/4f51ef45eb86f3acf0c2e2a1e95d37f1.png-wh_500x0-wm_3-wmp_4-s_1241013851.png" target="_blank"></a>
# virsh dumpxml CentOS6.5-01 > /etc/libvirt/qemu/CentOS6.5-03.xml
<a href="https://s1.51cto.com/oss/201711/22/1982807fb27a2b3ccd3c7f6f3ee950d1.png-wh_500x0-wm_3-wmp_4-s_3052101148.png" target="_blank"></a>
(2) 複制kvm虛拟機磁盤檔案
本系列文章都是采用虛拟磁盤檔案進行測試,沒有使用lvm卷。
通過檢視配置檔案:虛拟磁盤位置<source file='/data/kvm/CentOS6.5-01.img'/>
<a href="https://s5.51cto.com/oss/201711/22/5ef49381237d092146dbee8688051ef0.png-wh_500x0-wm_3-wmp_4-s_2210491052.png" target="_blank"></a>
(3) 直接編輯修改配置檔案
修改name,uuid,disk位置,vnc端口
此時還是将該配置檔案注冊進來,無法通過virsh edit進行編輯。
<code>[root@node1 kvm]</code><code># cat /etc/libvirt/qemu/CentOS6.5-03.xml </code>
<code><domain </code><code>type</code><code>=</code><code>'kvm'</code> <code>id</code><code>=</code><code>'17'</code><code>></code>
<code> </code><code><name>CentOS6.5-03<</code><code>/name</code><code>></code>
<code> </code><code><uuid>7d48f7b5-2fbf-91a9-2c3f-e52ba6079c8d<</code><code>/uuid</code><code>></code>
<code> </code><code><</code><code>source</code> <code>file</code><code>=</code><code>'/data/kvm/CentOS6.5-03.img'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'virtio-disk0'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'ide0-1-0'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'usb0'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'ide0'</code><code>/></code>
<code> </code><code><target dev=</code><code>'vnet1'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'net0'</code><code>/></code>
<code> </code><code><</code><code>source</code> <code>path=</code><code>'/dev/pts/2'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'serial0'</code><code>/></code>
<code> </code><code><console </code><code>type</code><code>=</code><code>'pty'</code> <code>tty</code><code>=</code><code>'/dev/pts/2'</code><code>></code>
<code> </code><code><graphics </code><code>type</code><code>=</code><code>'vnc'</code> <code>port=</code><code>'5913'</code> <code>autoport=</code><code>'no'</code> <code>listen=</code><code>'0.0.0.0'</code><code>></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'video0'</code><code>/></code>
<code> </code><code><</code><code>alias</code> <code>name=</code><code>'balloon0'</code><code>/></code>
(4) 定義新虛拟機配置檔案
[root@node1 kvm]# virsh define /etc/libvirt/qemu/CentOS6.5-03.xml
<a href="https://s1.51cto.com/oss/201711/22/983c350c1fe4abbcd0cccbef6464b472.png-wh_500x0-wm_3-wmp_4-s_975413058.png" target="_blank"></a>
啟動虛拟機
<code>[root@node1 kvm]</code><code># virsh start CentOS6.5-03</code>
<code>Domain CentOS6.5-03 started</code>
(5) 登入虛拟機進行主機名,IP等修改
<code>[root@node1 kvm]</code><code># virsh console CentOS6.5-03</code>
<code>Connected to domain CentOS6.5-03</code>
<code>/dev/vda3</code><code>: clean, 64734</code><code>/413712</code> <code>files, 435081</code><code>/1652480</code> <code>blocks</code>
<code>/dev/vda1</code><code>: recovering journal</code>
<code>Bringing up interface eth0: Determining </code><code>if</code> <code>ip address 10.10.172.241 is already </code><code>in</code> <code>use </code><code>for</code> <code>device eth0...</code>
<code>[root@CentOS6 ~]</code><code># </code>
<code>[root@CentOS6 ~]</code><code># sed -i '/HOSTNAME/s/CentOS6.5-01/CentOS6.5-03/g' /etc/syscog/network</code>
<code>HOSTNAME=CentOS6.5-03</code>
<code>[root@CentOS6 ~]</code><code># hostname CentOS6.5-03</code>
<code>[root@CentOS6 ~]</code><code># vi /etc/sysconfig/network-scripts/ifcfg-eth0 </code>
<code>HWADDR=52:54:01:56:9A:7F</code>
重新開機網卡服務
<code>Shutting down interface eth0: [ OK ]</code>
<code>Bringing up interface eth0: Determining </code><code>if</code> <code>ip address 10.10.172.243 is already </code><code>in</code> <code>use </code><code>for</code> <code>device eth0...</code>
修改70-persistent-net.rules檔案
<code>[root@CentOS6 ~]</code><code># cat /etc/udev/rules.d/70-persistent-net.rules </code>
<code># This file was automatically generated by the /lib/udev/write_net_rules</code>
<code># program, run by the persistent-net-generator.rules rules file.</code>
<code>#</code>
<code># You can modify it, as long as you keep each rule on a single</code>
<code># line, and change only the value of the NAME= key.</code>
<code># PCI device 0x1af4:0x1000 (virtio-pci)</code>
<code>SUBSYSTEM==</code><code>"net"</code><code>, ACTION==</code><code>"add"</code><code>, DRIVERS==</code><code>"?*"</code><code>, ATTR{address}==</code><code>"52:54:01:56:9a:7f"</code><code>, ATTR{</code><code>type</code><code>}==</code><code>"1"</code><code>, KERNEL==</code><code>"eth*"</code><code>, NAME=</code><code>"eth0"</code>
本文到此通過兩種方式進行kvm虛拟機克隆,其實各有用處。
再次說明:本文克隆的虛拟機是CentOS6.5,如果克隆的虛拟機是RHEL/CentOS/OEL6.x作業系統,需要修改/etc/udev/rules.d/70-persistent-net.rules檔案。
本文轉自 dengaosky 51CTO部落格,原文連結:http://blog.51cto.com/dengaosky/1984068,如需轉載請自行聯系原作者