kvm虚拟机的克隆分为两种情况,本文也就通过以下两种情况进行克隆,克隆虚拟机为OEL5.8X64。
(1) KVM主机本机虚拟机直接克隆。
(2) 通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移)。
1. 本机虚拟机直接克隆
(1) 查看虚拟机配置文件
[root@node1 ~]# cat /etc/libvirt/qemu/oeltest01.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 oeltest01 or other application using the libvirt API. --> <domain type=\'kvm\'> <name>oeltest01</name> <uuid>8f2bb4a7-c7ed-32aa-3676-9fb05923269d</uuid> <memory unit=\'KiB\'>524288</memory> <currentMemory unit=\'KiB\'>524288</currentMemory> <vcpu placement=\'static\'>1</vcpu> <os> <type arch=\'x86_64\' machine=\'rhel6.4.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/test01.img\'/> <target dev=\'hda\' bus=\'ide\'/> <address type=\'drive\' controller=\'0\' bus=\'0\' target=\'0\' unit=\'0\'/> </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\'> <address type=\'pci\' domain=\'0x0000\' bus=\'0x00\' slot=\'0x01\' 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:82:39:01\'/> <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=\'tablet\' bus=\'usb\'/> <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=\'0x04\' function=\'0x0\'/> </memballoon> </devices> </domain>
虚拟机磁盘文件: /data/test01.img
虚拟机名称:oeltest01
(2) 开始克隆
# virt-clone -o oeltest01 -n oeltest02 -f /data/test02.img
说明:以oeltest01做为源,克隆oeltest01虚拟机,并创建名称为oeltest02虚拟机,使用磁盘文件/data/test02.img
(3) 启动虚拟机并配置主机名,IP地址等
[root@node1 data]# virsh console oeltest02
连接到域 oeltest02 Escape character is ^] Found volume group "vg" using metadata type lvm2 2 logical volume(s) in volume group "vg" now active Welcome to Oracle Linux Oracle Linux Server release 5.8 Press \'I\' to enter interactive startup. Starting udev: [ OK ] Loading default keymap (us): [ OK ] Setting hostname test01: [ OK ] Setting up Logical Volume Management: 2 logical volume(s) in volume group "vg" now active [ OK ] Checking filesystems Checking all file systems. [/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/vg/root /dev/vg/root: clean, 135384/1540096 files, 851398/1540096 blocks [/sbin/fsck.ext3 (1) -- /boot] fsck.ext3 -a /dev/hda1 /boot: clean, 39/26104 files, 26897/104388 blocks [ OK ] Remounting root filesystem in read-write mode: [ OK ] Mounting local filesystems: [ OK ] Enabling local filesystem quotas: [ OK ] Enabling /etc/fstab swaps: [ OK ] INIT: Entering runlevel: 5 Entering non-interactive startup Applying Intel CPU microcode update: [ OK ] Starting background readahead: [ OK ] Checking for hardware changes [ OK ] [ OK ] iSCSI daemon: [ OK ] [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Starting auditd: [ OK ] Starting system logger: [ OK ] Starting kernel logger: [ OK ] Starting irqbalance: [ OK ] iscsid (pid 1555) is running... Setting up iSCSI targets: iscsiadm: No records found [ OK ] Starting portmap: [ OK ] Starting NFS statd: [ OK ] Starting RPC idmapd: [ OK ] Starting system message bus: [ OK ] Starting o2cb: [ OK ] [ OK ] Bluetooth services:[ OK ] Mounting other filesystems: [ OK ] Starting PC/SC smart card daemon (pcscd): [ OK ] Starting acpi daemon: [ OK ] Starting HAL daemon: [ OK ] Starting hidd: [ OK ] Starting monitoring for VG vg: 2 logical volume(s) in volume group "vg" monitored [ OK ] Starting autofs: Loading autofs4: [ OK ] Starting automount: [ OK ] [ OK ] Starting hpiod: [ OK ] Starting hpssd: [ OK ] Starting sshd: [ OK ] Starting cups: [ OK ] Starting xinetd: [ OK ] Starting console mouse services: [ OK ] Starting crond: [ OK ] Starting xfs: [ OK ] Starting anacron: [ OK ] [ OK ] atd: [ OK ] Starting background readahead: [ OK ] Starting yum-updatesd: [ OK ] Starting Avahi daemon... [ OK ] Starting smartd: hdc: drive_cmd: status=0x41 { DriveReady Error } hdc: drive_cmd: error=0x04 { AbortedCommand } ide: failed opcode was: 0xec [ OK ] Oracle Linux Server release 5.8 Kernel 2.6.18-308.el5 on an x86_64 test01 login: mtrr: type mismatch for f0000000,100000 old: uncachable new: write-combining mtrr: type mismatch for f0000000,400000 old: uncachable new: write-combining Oracle Linux Server release 5.8 Kernel 2.6.18-308.el5 on an x86_64 test01 login: Oracle Linux Server release 5.8 Kernel 2.6.18-308.el5 on an x86_64 test01 login: root Password: Last login: Sat Sep 7 05:21:11 on ttyS0 [root@test01 ~]# [root@test01 ~]# [root@test01 ~]# (4) 修改主机名,IP地址等 # vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 test02 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 # vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=test02 GATEWAY=192.168.233.2 修改IP地址 # vi /etc/sysconfig/network-script/ifcfg-eth0 # Virtio Network Device DEVICE=eth0 BOOTPROTO=static ONBOOT=yes HWADDR=52:54:00:56:bd:2b IPADDR=192.168.233.142 NETMASK=255.255.255.0 [root@test01 ~]# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] [root@test01 ~]#
2. 复制配置文件与磁盘文件克隆
(1) 导入kvm虚拟机配置文件
这里采用oeltest01做为模板,进行克隆。
# virsh shutdown oeltest01
# virsh dumpxml oeltest01 > /etc/libvirt/qemu/oeltest03.xml
(2) 复制kvm虚拟机磁盘文件
本系列文章都是采用虚拟磁盘文件进行测试,没有使用lvm卷。
通过查看配置文件:虚拟磁盘位置<source file=\'/data/test01.img\'/>
(3) 直接编辑修改配置文件
修改name,uuid,disk位置,vnc端口
此时还是将该配置文件注册进来,无法通过virsh edit进行编辑。
[root@node1 data]# vi /etc/libvirt/qemu/oeltest03.xml <domain type=\'kvm\'> <name>oeltest03</name> <uuid>8f2bb4a7-c7ed-32aa-3676-9fb05923260d</uuid> <memory unit=\'KiB\'>524288</memory> <currentMemory unit=\'KiB\'>524288</currentMemory> <vcpu placement=\'static\'>1</vcpu> <os> <type arch=\'x86_64\' machine=\'rhel6.4.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/test03.img\'/> <target dev=\'hda\' bus=\'ide\'/> <address type=\'drive\' controller=\'0\' bus=\'0\' target=\'0\' unit=\'0\'/> </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\'> <address type=\'pci\' domain=\'0x0000\' bus=\'0x00\' slot=\'0x01\' 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:82:39:01\'/> <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=\'tablet\' bus=\'usb\'/> <input type=\'mouse\' bus=\'ps2\'/> <graphics type=\'vnc\' port=\'5911\' 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=\'0x04\' function=\'0x0\'/> </memballoon> </devices> </domain>
(4) 定义新虚拟机配置文件
[root@node1 data]# virsh define /etc/libvirt/qemu/oeltest03.xml
启动虚拟机
[root@node1 data]# virsh start oeltest03
域 oeltest03 已开始
(5) 登录虚拟机进行主机名,IP等修改
[root@node1 data]# virsh console oeltest03 连接到域 oeltest03 Escape character is ^] Oracle Linux Server release 5.8 Kernel 2.6.18-308.el5 on an x86_64 test01 login: mtrr: type mismatch for f0000000,100000 old: uncachable new: write-combining mtrr: type mismatch for f0000000,400000 old: uncachable new: write-combining Oracle Linux Server release 5.8 Kernel 2.6.18-308.el5 on an x86_64 test01 login: root Password: Last login: Sat Sep 7 05:21:11 on ttyS0 [root@test01 ~]# [root@test01 ~]# 修改主机名 # vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 test03 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 # vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=test03 GATEWAY=192.168.233.2 修改IP地址 # vi /etc/sysconfig/network-script/ifcfg-eth0 # Virtio Network Device DEVICE=eth0 BOOTPROTO=static ONBOOT=yes HWADDR=52:54:00:56:bd:3b IPADDR=192.168.233.143 NETMASK=255.255.255.0 service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ]
本文到此通过两种方式进行kvm虚拟机克隆,其实各有用处。
再次说明:本文克隆的虚拟机是oel5.8,如果克隆的虚拟机是RHEL/CentOS/OEL6.x操作系统,还需要修改/etc/udev/rules.d/70-persistent-net.rules文件。