如何克隆KVM虚拟机映像

时间:2019-11-20 08:53:44  来源:igfitidea点击:

在Debian或Ubuntu Linux中,如何克隆KVM虚拟机来做测试?
如何克隆KVM 虚拟机镜像?

在Linux上如何克隆KVM虚拟机映像

克隆虚拟机并生成新的实例

# virt-clone --original {Domain-Vm-Name-Here} --auto-clone

或者

# virt-clone --original {Domain-Vm-Name-Here} --name {New-Domain-Vm-Name-Here} --auto-clone

或者

# virt-clone --original {Domain-Vm-Name-Here} \
--name {New-Domain-Vm-Name-Here} --file {/var/lib/libvirt/images/File.Name.here}

使用virt-clone克隆虚拟机

首先关闭现有的虚拟机:

$ sudo virsh shutdown ubuntu-box1

或者使用下面的方式暂停:

$ sudo virsh suspend ubuntu-box1
$ virsh list

输出示例:

Domain ubuntu-box1 suspended

Id    Name                           State
----------------------------------------------------
1     freebsd                        running
5     ubuntu-box1                    paused

克隆一个新的虚拟机,自动生成新存储的路径:

$ sudo virt-clone --original ubuntu-box1 --auto-clone

输出示例:

WARNING  Setting the graphics device port to autoport, in order to avoid conflicting.
Allocating 'ubuntu-box-1-clone.qcow2'                                                              |  40 GB  00:00:04     

Clone 'ubuntu-box1-clone' created successfully.

生成了一个新的ubuntu-box1-clone虚拟机。

可以启动或恢复原来的虚拟机:

$ sudo virsh start ubuntu-box1

或者

$ sudo virsh resume ubuntu-box1

接下来,启动ubuntu-box1-clone:

$ sudo virsh start ubuntu-box1-clone

验证一下:

$ virsh list

通过ssh登录到克隆的虚拟机上:

$ ssh [email protected]

请注意,virt-clone不会在虚拟机操作系统内进行任何更改,它仅复制磁盘并进行主机端更改。
因此,更改密码,更改静态IP地址,ssh密钥,主机名等操作不在此工具的范围内。

使用ssh登录到克隆的VM后,您可以更改以下内容:

$ ssh [email protected]
$ sudo -s
# echo 'ubuntu-box1-clone' > /etc/hostname
# sed -i 's/ubuntu-box1/ubuntu-box1-clone/g' /etc/hosts
# reboot
# /bin/rm -v /etc/ssh/ssh_host_*
# dpkg-reconfigure openssh-server
# passwd Hyman

如果需要克隆虚拟机并在来宾操作系统中进行操作,请使用virt-sysprep,例如:

# virsh suspend webserv01
# virt-clone --original webserv01 --name webserv02 --file /var/lib/libvirt/images/webserv02-disk01.qcow2
# virsh resume webserv01
# virt-sysprep -d webserv02 --hostname webserv02 --enable user-account,ssh-hostkeys,net-hostname,net-hwaddr,machine-id --keep-user-accounts Hyman --keep-user-accounts root --run 'sed -i "s/192.168.122.16/192.168.122.17/" /etc/network/interfaces'