Клонирование виртуальных машин KVM

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

 источник


Report Page