×


Cloning existing KVM virtual machine images on Linux

Need help to clone KVM Virtual Machine in Linux? 

This guide is for you.


A clone is a copy of an existing virtual machine. The existing virtual machine is called the parent of the clone. When the cloning operation is complete, the clone is a separate virtual machine.

You can use a simple command named virt-clone. It is a command line utility for cloning existing virtual machine images using the “libvirt” hypervisor management library.

Here at Ibmi Media, as part of our Server Management Services, we regularly help our Customers to perform Linux related tasks.

In this context, we shall look into how to use virt-clone command in Linux.


More information about virt-clone ?

virt-clone is a command-line tool to clone existing virtual machine images that use libvirt as a hypervisor management library. First, it will copy the disk images of any existing virtual machine. Then it will define a new guest with an identical virtual hardware configuration.


Now you will learn how to clone KVM Virtual Machine in Linux.


How to clone KVM Virtual Machine ?

To do this, follow the steps given below;


Step 1: Make sure that the VM to clone is off.

We use the command below. Replace “asterisk-cloud” with the VM name.

$ sudo virsh shutdown asterisk-cloud

Then we run the below command to get a list of Virtual Machines virsh manages:

$ sudo virsh list –all
Id Name State
—————————————————-
– asterisk-cloud shut off
– instance-00000004 shut off

Step 2: Clone the Virtual Machine.

To clone asterisk-cloud virtual Machine to kamailio-cloud virtual machine, we run:

$ sudo virt-clone
–connect=qemu:///system
–original asterisk-cloud
–name kamailio-cloud
–file /var/lib/libvirt/images/kamailio-cloud.qcow2

Subsequently, the output will look like this:

Allocating 'kamailio-cloud.qcow2' | 8.0 GB 00:01:21
Clone ‘kamailio-cloud’ created successfully.

If we are connecting to a remote KVM/QEMU Host machine, we put the URL before /system.

It will look something like this:

$ sudo virt-clone
–connect=qemu://192.168.1.30/system
–original asterisk-cloud
–name kamailio-cloud
–file /var/lib/libvirt/images/kamailio-cloud.qcow2

asterisk-cloud: Name of VM cloning from

kamailio-cloud: Name given to resulting VM after cloning

kamailio-cloud.qcow2: Image saved that kamailio-cloud boots from.


Then we check to confirm that kamailio-cloud.qcow2 file is successfully stored in /var/lib/libvirt/images folder.

$ ls /var/lib/libvirt/images
total 6946188
-rw-r–r– 1 root root 3238789120 Mar 20 17:42 asterisk-cloud.qcow2
-rwxr-xr-x 1 qemu qemu 666894336 Mar 16 04:14 CentOS-7-x86_64-Minimal-1503-01.iso
-rw-r–r– 1 root root 3207331840 Mar 20 17:44 kamailio-cloud.qcow2

If we now run the command virsh list –all, we see cloned VM present in the list.

$ sudo virsh list –all
Id Name State
—————————————————-
– asterisk-cloud shut off
– instance-00000004 shut off
– kamailio-cloud shut off

Before starting the kamailio-cloud, change the channel source mode path from the original.


We do this by editing the file /etc/libvirt/qemu/kamailio-cloud.xml

$ sudo vi /etc/libvirt/qemu/kamailio-cloud.xml

Then we look for the line below and change the original domain name to point to the new clone.

<channel type=’unix’>
<source mode=’bind’ path=’/var/lib/libvirt/qemu/channel/target/domain-kamailio-cloud/org.qemu.guest_agent.0’/>

Original was:

<channel type=’unix’>
<source mode=’bind’ path=’/var/lib/libvirt/qemu/channel/target/domain-asterisk-cloud/org.qemu.guest_agent.0’/>

Subsequently, to start the cloned virtual Machine, we type:

$ sudo virsh start kamailio-cloud –console

After logging in, we change uuid for the network interface. The one on CentOS 7.x Guest machine is eth0.

Similarly, to generate a new uuid for this interface, we type:

$ uuidgen eth0
29e28904-c8f6-4ac0-93f0-d5d2cedb8555

Original eth0 configuration file from asterisk-cloud VM look like below:


TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=230e87b1-f847-4cab-86b9-df4268a0a0a3
DEVICE=eth0
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes


Then we change uuid replacing old with generated one:

$ sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0

On the other hand, we modify the below configurations to fit use cases.

TYPE=Ethernet
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=29e28904-c8f6-4ac0-93f0-d5d2cedb8555
DEVICE=eth0
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Then we restart network service:

$ sudo service network restart
$ sudo systemctl restart network.service

[Finding it hard to clone KVM? We'd be happy to assist you. ]


Conclusion

This article will guide you on how to use the virt-clone command which provides a number of options to clone a #KVM #VM. You can use the virt-sysprep if you need to clone the VM and make/reset anything inside the guest #OS.