Клонирование виртуальных машин#
Чтобы быстро создать новую ВМ с определенным набором свойств, можно клонировать существующую ВМ.
Клонирование создает новую ВМ, которая использует собственный образ диска для хранения, но большая часть конфигурации и сохраненных данных идентична исходной ВМ. Это позволяет подготовить несколько ВМ, оптимизированных для выполнения определенной задачи, без необходимости настраивать каждую в отдельности.
Принцип клонирования виртуальных машин#
При клонировании копируется XML-конфигурация исходной ВМ и образы ее дисков. Затем конфигурация корректируется для обеспечения уникальности новой ВМ. Данный процесс включает изменение имени ВМ и настройку использования клонированных образов диска. Данные, хранящиеся на виртуальных дисках клонированной ВМ, идентичны исходной.
Клонирование происходит быстрее, чем создание новой ВМ вместе с установкой ее с гостевой ОС. Процесс клонирования может быть использован для быстрого создания ВМ с определенной конфигурацией и содержимым.
Если требуется создать несколько клонов ВМ создайте шаблон, который не должен содержать:
уникальных параметров, таких как постоянная сетевая конфигурация МАС, которые могут помешать работе клонов;
конфиденциальных данных, таких как ключи SSH и файлы паролей.
Создание шаблонов виртуальных машин#
Шаблоны ВМ можно создавать с помощью утилиты virt-sysprep или вручную в соответствии с потребностями пользователя.
Создание шаблонов виртуальных машин с помощью утилиты virt-sysprep#
Чтобы создать шаблон для клонирования на основе существующей ВМ, используйте утилиту virt-sysprep. При этом удаляются элементы конфигурации, которые могут привести к неправильной работе клона, такие как определенные сетевые настройки или метаданные регистрации системы.
Предварительные условия#
На хосте установлен пакет
guestfs-tools, в состав которого входит утилитаvirt-sysprep.Примечание
Если пакет отсутствует, установите его командой:
dnf install guestfs-toolsИсходная ВМ, рассматриваемая как основа для шаблона, выключена.
Известно расположение файла образа диска исходной ВМ, на который получены права владельца.
Примечание
Образы дисков ВМ, созданных c помощью системного подключения
libvirt, расположены в каталоге/var/lib/libvirt/imagesи по умолчанию их владельцем является пользовательroot:ls -la /var/lib/libvirt/imagesПример вывода команды:
-rw-------. 1 root root 9665380352 Jul 23 14:50 a-really-important-vm.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 an-actual-vm-that-i-use.qcow2 -rw-------. 1 root root 8591507456 Jul 26 2017 totally-not-a-fake-vm.qcow2 -rw-------. 1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
Примечание
Рекомендуется сделать резервную копию важных данных исходного диска ВМ. Чтобы исключить повреждение исходной ВМ, вначале сделайте ее клон, а его используйте для создания шаблона.
Сценарий#
Убедитесь, что пользователь, от имени которого был осуществлен вход в систему, является владельцем образа диска ВМ с помощью команды:
whoamiВ результате выполнения команды выведется имя учетной записи пользователя, используемое в текущий момент.
Примечание
Рекомендуется сделать резервную копию образа диска ВМ. Для создания резервной копии используйте команду:
cp /var/lib/libvirt/images/<original-vm>.qcow2 /var/lib/libvirt/images/<copy-original-vm>.qcow2Где
<original-vm>и<copy-original-vm>- имена образа и копии диска ВМ соответственно.Копию можно использовать для проверки, была ли ВМ успешно преобразована в шаблон.
Создайте шаблон с помощью команды
virt-sysprep:virt-sysprep -a /var/lib/libvirt/images/<original-vm>.qcow2Где
/var/lib/libvirt/images/<original-vm>.qcow2– путь к образу диска исходной ВМ.Пример вывода команды:
[ 0.0] Examining the guest ... [ 7.3] Performing "abrt-data" ... [ 7.3] Performing "backup-files" ... [ 9.6] Performing "bash-history" ... [ 9.6] Performing "blkid-tab" ... [...]
Проверка#
Чтобы убедиться, что процесс клонирования прошел успешно, сравните измененный образ диска с исходным с помощью команды:
virt-diff -a /var/lib/libvirt/images/<copy-original-vm>.qcow2 -A /var/lib/libvirt/images/<original-vm>.qcow2
Пример вывода команды:
- - 0644 1001 /etc/group-
- - 0000 797 /etc/gshadow-
= - 0444 33 /etc/machine-id
[...]
- - 0600 409 /home/username/.bash_history
- d 0700 6 /home/username/.ssh
- - 0600 868 /root/.bash_history
[...]
Дополнительная информация#
Дополнительную информацию можно получить с помощью команды man virt-sysprep.
Создание шаблона виртуальной машины вручную#
Чтобы создать шаблон из существующей ВМ, можно вручную сбросить или изменить настройки гостевой ВМ для подготовки ее к клонированию.
Предварительные условия#
Известно расположение файла образа диска ВМ, на который получены права владельца.
ВМ выключена.
Сценарий#
Настройте ВМ для клонирования:
Установите на клон необходимое программное обеспечение.
Настройте неуникальные параметры ОС и приложений.
Удалите сетевые настройки:
Удалите все постоянные правила
udevс помощью команды:rm -f /etc/udev/rules.d/70-persistent-net.rulesПримечание
Если правила
udevне удаляются, имя первой сетевой карты может бытьeth1, а неeth0.Удалите уникальную информацию из файлов
NMConnectionв каталоге/etc/NetworkManager/system-connections/.Удалите MAC-адрес, IP-адрес, DNS, шлюз и любую другую уникальную информацию или нежелательные настройки:
*ID=ExampleNetwork BOOTPROTO="dhcp" HWADDR="AA:BB:CC:DD:EE:FF" <- УДАЛИТЬ NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- УДАЛИТЬУдалите аналогичную уникальную информацию и нежелательные настройки из файлов
/etc/hostsи/etc/resolv.conf.
Удалите прочую уникальную и чувствительную информацию:
Удалите пары открытых и закрытых ключей SSH с помощью команды:
rm -rf /etc/ssh/<ssh_host_example>Где
<ssh_host_example>– файл с информацией о ключах SSH.Удалите конфигурацию LVM устройств с помощью команды:
rm /etc/lvm/devices/system.<devices>Где
<devices>– имя устройства.Удалите любые другие идентификаторы или параметры, специфические для приложений, которые могут вызвать конфликты при работе на нескольких машинах.
Удалите файл
gnome-initial-setup-done, чтобы настроить ВМ для запуска мастера настройки при следующей загрузке с помощью команды:rm ~/.config/gnome-initial-setup-done
Примечание
Мастер настройки, который запустится при следующей загрузке, зависит от конфигураций, которые были удалены из ВМ. При первой загрузке клона также рекомендуется изменить имя хоста.
Клонирование виртуальных машин с помощью интерфейса командной строки#
Чтобы создать новую ВМ с определенным набором свойств, можно клонировать существующую с помощью интерфейса командной строки.
Предварительные условия#
Исходная ВМ выключена.
На диске достаточно места для хранения клонированных образов дисков.
Примечание
При создании нескольких клонов ВМ удалите уникальные данные и настройки из исходной ВМ, чтобы обеспечить корректную работу клонов. Дополнительную информацию см. в разделе «Создание шаблона виртуальной машины вручную» -> «Предварительные условия».
Сценарий#
Клонирование ВМ осуществляется с помощью утилиты virt-clone с опциями, которые подходят для используемых среды и сценария использования.
Некоторые примеры вариантов применения утилиты virt-clone:
Чтобы клонировать локальную ВМ с именем
<example-vm>и создать ВМ<example-vm>-cloneвоспользуйтесь командой:virt-clone --original <example-vm> --auto-cloneКоманда создает и размещает образ диска
<example-vm>-clone.qcow2в том же месте, что и образ диска исходной ВМ, и с теми же данными.Вывод команды:
Allocating '<example-vm>-clone.qcow2' | 50.0 GB 00:05:37 Clone '<example-vm>-clone' created successfully.Для того чтобы клонировать ВМ с именем
<example-vm>и создать локальный клон с именем<custom-name-vm>, которая использует только два из существующих дисков<example-vm>, воспользуйтесь командой:virt-clone --original <example-vm> --name <custom-name-vm> --file /var/lib/libvirt/images/disk-1-<example-vm>.qcow2 --file /var/lib/libvirt/images/disk-2-<example-vm>.qcow2Вывод команды:
Allocating 'disk-1-<example-vm>-clone.qcow2' | 78.0 GB 00:05:37 Allocating 'disk-2-<example-vm>-clone.qcow2' | 80.0 GB 00:05:37 Clone '<custom-name-vm>' created successfully.Для клонирования ВМ на другой хост, выполните ее миграцию без переопределения на локальном хосте. Чтобы клонировать созданную в предыдущем примере ВМ
<custom-name-vm>в удаленную системуhh.hh.hh.hh, включая ее локальные диски, используйте следующие команды:virsh migrate --offline --persistent <custom-name-vm> qemu+ssh://root@hh.hh.hh.hh/systemВведите пароль:
root@hh.hh.hh.hh's password:Скопируйте диски:
scp /var/lib/libvirt/images/<disk-1-<example-vm>-clone>.qcow2 root@hh.hh.hh.hh/<user@remote_host.com>://var/lib/libvirt/images/scp /var/lib/libvirt/images/<disk-1-<example-vm>-clone>.qcow2 root@hh.hh.hh.hh/<user@remote_host.com>://var/lib/libvirt/images/Где
<example-vm>– исходная ВМ для<custom-name-vm>.
Проверка#
Чтобы проверить, что ВМ успешно клонирована и работает корректно, выполните следующие шаги:
Убедитесь, что клон добавлен в список ВМ на хосте, с помощью команды:
virsh list --allПример вывода команды:
Id Name State --------------------------------------- - <example-vm> shut off - <example-vm-clone> shut offЗапустите клон и проверьте, загрузился ли он корректно, с помощью команды:
virsh start <example-vm-clone>Пример вывода команды:
Domain '<example-vm-clone>' started