Клонирование виртуальных машин 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" ...


Если у вас что-то не получается или есть вопросы, пишите в комментариях.

Просьба поделиться статьёй в социальных сетях. Больше ссылок, больше шансов найти эту информацию тем, кому она нужна.
+ 0 -

Добавить комментарий