Клонирование виртуальных машин KVM
Для клонирования ВМ можно использовать простую команду virt-clone. Это утилита командной строки для клонирования существующих образов виртуальных машин с использованием библиотеки "libvirt". Она скопирует образы дисков любой существующей ВМ и определит нового гостя с идентичной конфигурацией виртуального оборудования. Элементы, которые требуют уникальности, будут обновлены, чтобы избежать столкновения между старыми и новыми ВМ.

Как клонировать существующие образы виртуальных машин 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
ВМ для клонирования должна быть приостановлена или отключена. Чтобы корректно завершить работу ВМ с именем vm1, выполните:$ sudo virsh shutdown vm1
ИЛИ поставьте ВМ на паузу:
$ sudo virsh suspend vm1 $ virsh list Domain vm1 suspended Id Name State ---------------------------------------------------- 1 terraform running 5 vm1 paused
Давайте сгенерируем новую ВМ на основе vm1$ sudo virt-clone --original vm1 --auto-clone WARNING Setting the graphics device port to autoport, in order to avoid conflicting. Allocating 'vm1-clone.qcow2' | 10 GB 00:00:04 Clone 'vm1-clone' created successfully.
Приведенная выше команда клонировала ВМ vm1, автоматически сгенерировав новое имя vm1-clone и путь к образу. Теперь можно запустить или снять с паузы оригинальную ВМ:$ sudo virsh start vm1
Или$ sudo virsh resume vm1
Теперь можно запустить склонированную vm1-clone:$ sudo virsh start vm1-clone
И убедиться, что она запущена:$ virsh list
И наконец, подключаемся к ВМ:$ ssh 192.168.122.123
Примечание
virt-clone ничего не меняет в гостевой ОС, он только дублирует диски и вносит изменения на стороне хоста. Таким образом, такие вещи, как изменение паролей, изменение статического IP-адреса, ssh-ключей, имен хостов и т. д. не входят в сферу применения этого инструмента.
После входа в клонированную ВМ с помощью ssh вы можете изменить их:
$ ssh 192.168.122.123 $ sudo -s # echo 'vm1-clone' > /etc/hostname # sed -i 's/vm1/vm1-clone/g' /etc/hosts # reboot # rm -v /etc/ssh/ssh_host_* # dpkg-reconfigure openssh-server # passwd <password>
Но что делать, если у вам надо сделать 10 клонов? Для этого можно воспользоваться утилитой virt-sysprep, чтобы изменить hostname ВМ и сбросить все настройки внутри ОС.
Сначала установите пакет libguestfs-tools:
# yum install -y libguestfs-tools
Теперь можно запустить virt-sysprep:
# virsh suspend vm01 # virt-clone --original vm01 --name vm02 --file /var/lib/libvirt/images/vm02-disk01.qcow2 # virsh resume vm01 # virt-sysprep -d vm02 --hostname vm02
Вот такой у меня вывод после запуска virt-sysprep -d pgsql-1 --hostname pgsql-1:
[root@kvm libvirt]# virt-sysprep -d pgsql-1 --hostname pgsql-1 [ 0.0] Examining the guest ... [ 9.5] Performing "abrt-data" ... [ 9.5] Performing "backup-files" ... [ 10.9] Performing "bash-history" ... [ 10.9] Performing "blkid-tab" ... [ 10.9] Performing "crash-data" ... [ 10.9] Performing "cron-spool" ... [ 10.9] Performing "dhcp-client-state" ... [ 10.9] Performing "dhcp-server-state" ... [ 10.9] Performing "dovecot-data" ... [ 10.9] Performing "logfiles" ... [ 11.1] Performing "machine-id" ... [ 11.1] Performing "mail-spool" ... [ 11.1] Performing "net-hostname" ... [ 11.2] Performing "net-hwaddr" ... [ 11.2] Performing "pacct-log" ... [ 11.2] Performing "package-manager-cache" ... [ 11.2] Performing "pam-data" ... [ 11.2] Performing "passwd-backups" ... [ 11.2] Performing "puppet-data-log" ... [ 11.2] Performing "rh-subscription-manager" ... [ 11.2] Performing "rhn-systemid" ... [ 11.2] Performing "rpm-db" ... [ 11.2] Performing "samba-db-log" ... [ 11.2] Performing "script" ... [ 11.2] Performing "smolt-uuid" ... [ 11.3] Performing "ssh-hostkeys" ... [ 11.3] Performing "ssh-userdir" ... [ 11.3] Performing "sssd-db-log" ... [ 11.3] Performing "tmp-files" ... [ 11.3] Performing "udev-persistent-net" ... [ 11.3] Performing "utmp" ... [ 11.3] Performing "yum-uuid" ... [ 11.3] Performing "customize" ... [ 11.3] Setting a random seed [ 11.3] Setting the machine ID in /etc/machine-id [ 11.3] Setting the hostname: pgsql-1 [ 11.7] Performing "lvm-uuids" ...