Клонирование виртуальной машины в Proxmox VE

Пошаговое клонирование виртуальной машины в Proxmox VE: полный и связанный клон, подготовка гостевой ОС, изменение сети и проверка уникальности.

Клонирование позволяет быстро создать новую виртуальную машину на основе уже настроенной VM или шаблона.

В Proxmox VE доступны два варианта:

  • полный клон;
  • связанный клон.

В этой инструкции рассматривается только безопасное клонирование Linux-виртуальной машины, настройка нового VM ID и проверка уникальности гостевой системы.

Подходит для: Proxmox VE 8 и 9
Гостевая система: Ubuntu Server и Debian
Уровень сложности: средний
Время выполнения: около 15–30 минут
Требуемый доступ: права на клонирование VM и root-доступ внутри гостевой ОС

Что будет рассмотрено

После выполнения инструкции можно будет:

  • подготовить исходную VM;
  • выбрать между полным и связанным клоном;
  • клонировать VM через веб-интерфейс;
  • клонировать VM через CLI;
  • изменить hostname и сетевые параметры;
  • обновить machine-id;
  • проверить MAC-адрес;
  • проверить запуск сервисов;
  • избежать конфликтов с исходной машиной.

Полный и связанный клон

Полный клон

Полный клон создаёт независимую копию виртуальных дисков.

Преимущества:

  • не зависит от исходной VM или шаблона;
  • можно переносить отдельно;
  • проще резервировать;
  • подходит для production.

Недостатки:

  • создаётся дольше;
  • занимает больше места;
  • требует полного копирования дисков.

Связанный клон

Связанный клон использует базовый диск исходного шаблона и хранит только изменения.

Преимущества:

  • создаётся быстро;
  • занимает меньше места;
  • удобен для лабораторий и тестовых сред.

Недостатки:

  • зависит от базового шаблона;
  • сложнее переносить;
  • не поддерживается некоторыми storage backend;
  • не подходит для долгосрочной автономной эксплуатации.

Для production обычно выбирают полный клон.

Проверка исходной VM

На узле Proxmox:

qm status SOURCE_VM_ID

Покажите конфигурацию:

qm config SOURCE_VM_ID

Проверьте диски:

qm config SOURCE_VM_ID |
grep -E '^(scsi|virtio|sata|ide)[0-9]+:'

Проверьте свободный VM ID:

pvesh get /cluster/nextid

Проверьте хранилища:

pvesm status

Создание резервной копии

Перед клонированием действующей VM создайте backup:

vzdump SOURCE_VM_ID   --storage BACKUP_STORAGE   --mode snapshot   --compress zstd

Дождитесь:

TASK OK

Подготовка исходной гостевой системы

Перед клонированием проверьте:

  • hostname;
  • статический IP;
  • SSH host keys;
  • machine-id;
  • уникальные идентификаторы приложения;
  • agent registration;
  • monitoring agent;
  • backup agent;
  • лицензии;
  • scheduled tasks.

Если исходная VM уже используется в production, безопаснее сначала создать её копию, отключить сеть у клона и только затем менять уникальные параметры.

Остановка исходной VM

Полный клон можно создавать и из работающей VM, но для максимально предсказуемого состояния лучше выполнить корректное завершение:

qm shutdown SOURCE_VM_ID

Проверьте:

qm status SOURCE_VM_ID

Ожидаемый результат:

status: stopped

Если простой недопустим, используйте шаблон или заранее подготовленную базовую VM.

Клонирование через веб-интерфейс

Выберите исходную виртуальную машину.

Нажмите:

More → Clone

Заполните поля.

Target node

Выберите узел назначения.

VM ID

Укажите новый уникальный идентификатор.

Пример:

101

Name

Пример:

app02

Mode

Выберите:

Full Clone

или:

Linked Clone

Target Storage

Для полного клона укажите хранилище назначения.

Пример:

local-lvm

Нажмите:

Clone

Дождитесь завершения задачи.

Полный клон через CLI

qm clone   SOURCE_VM_ID   NEW_VM_ID   --name NEW_VM_NAME   --full 1   --storage TARGET_STORAGE

Пример:

qm clone   100   101   --name app02   --full 1   --storage local-lvm

Связанный клон через CLI

qm clone   TEMPLATE_ID   NEW_VM_ID   --name NEW_VM_NAME   --full 0

Пример:

qm clone   9000   102   --name test02   --full 0

Связанный клон обычно создают из шаблона.

Проверка задачи

Покажите список VM:

qm list

Проверьте новую VM:

qm config NEW_VM_ID

Проверьте статус:

qm status NEW_VM_ID

Проверка MAC-адреса

Proxmox обычно назначает клону новый MAC-адрес.

Проверьте:

qm config NEW_VM_ID |
grep '^net'

Сравните с исходной VM:

qm config SOURCE_VM_ID |
grep '^net'

MAC-адреса должны отличаться.

Отключение сети перед первым запуском

Чтобы избежать конфликта IP, временно отключите сетевой интерфейс клона.

Через веб-интерфейс:

VM → Hardware → Network Device → Edit

Включите:

Disconnect

Через CLI:

qm set NEW_VM_ID   --net0 virtio=MAC_ADDRESS,bridge=vmbr0,link_down=1

Безопаснее сохранить существующую строку net0 и добавить только link_down=1.

Проверьте:

qm config NEW_VM_ID |
grep '^net0'

Первый запуск клона

qm start NEW_VM_ID

Проверьте:

qm status NEW_VM_ID

Откройте консоль через веб-интерфейс.

Изменение hostname

Внутри клона:

sudo hostnamectl set-hostname NEW_HOSTNAME

Пример:

sudo hostnamectl set-hostname app02

Проверьте:

hostnamectl

Проверка /etc/hosts

Откройте:

sudo nano /etc/hosts

Пример:

127.0.0.1 localhost
192.0.2.22 app02.example.com app02

Используйте адрес и имя своей сети.

Проверьте:

getent hosts "$(hostname -f)"

Обновление machine-id

Клонированная система может сохранить machine-id исходной VM.

Проверьте:

cat /etc/machine-id

Для создания нового идентификатора:

sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
sudo systemd-machine-id-setup
sudo ln -sf /etc/machine-id /var/lib/dbus/machine-id

Проверьте:

cat /etc/machine-id

После этого перезагрузите VM:

sudo reboot

Проверка product UUID

Проверьте внутри гостя:

cat /sys/class/dmi/id/product_uuid

Proxmox обычно создаёт уникальный UUID для новой VM.

Сравните с исходной машиной.

Обновление SSH host keys

Если клон должен считаться отдельным сервером, обновите SSH host keys:

sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -A
sudo systemctl restart ssh

Проверьте:

ls -l /etc/ssh/ssh_host_*

После изменения клиенты увидят новый fingerprint.

Изменение статического IP

Проверьте сетевую конфигурацию.

Для Netplan:

ls -l /etc/netplan/

Откройте файл:

sudo nano /etc/netplan/CONFIG_FILE.yaml

Пример:

network:
  version: 2
  ethernets:
    ens18:
      addresses:
        - 192.0.2.22/24
      routes:
        - to: default
          via: 192.0.2.1
      nameservers:
        addresses:
          - 192.0.2.53

Проверьте:

sudo netplan generate

Примените:

sudo netplan apply

Изменение DHCP reservation

Если используется DHCP reservation, обновите привязку на DHCP-сервере с учётом нового MAC-адреса клона.

Не запускайте исходную VM и клон с одинаковым статическим IP.

Подключение сети

После изменения IP и hostname подключите интерфейс обратно.

Через веб-интерфейс отключите:

Disconnect

Через CLI удалите link_down=1 из конфигурации net0.

Проверьте:

qm config NEW_VM_ID |
grep '^net0'

Проверка сети внутри клона

ip -br addr
ip route

Проверьте шлюз:

ping -c 3 GATEWAY_IP

Проверьте DNS:

getent hosts example.com

Проверьте SSH:

ssh ADMIN_USER@NEW_VM_IP

Проверка QEMU Guest Agent

Внутри VM:

systemctl status qemu-guest-agent --no-pager

На узле Proxmox:

qm agent NEW_VM_ID ping

Проверьте IP через agent:

qm guest cmd NEW_VM_ID network-get-interfaces

Проверка сервисов

systemctl --failed

Проверьте критичные службы:

systemctl status SERVICE_NAME --no-pager

Проверьте открытые порты:

ss -lntup

Проверка приложений

Убедитесь, что клон не использует уникальные параметры исходной системы:

  • одинаковый node ID;
  • одинаковый cluster ID;
  • одинаковый replication ID;
  • одинаковый agent token;
  • одинаковую лицензию;
  • одинаковый hostname;
  • одинаковый API identity;
  • одинаковый backup client ID.

Такие параметры меняются по документации конкретного приложения.

Проверка cron и systemd timers

Покажите cron:

sudo crontab -l

Проверьте системные задания:

sudo systemctl list-timers --all

Клон не должен автоматически запускать production-задачи, которые уже выполняются исходной VM.

Проверка мониторинга

Если используется агент мониторинга, измените:

  • hostname;
  • host ID;
  • registration token;
  • metadata;
  • server-side object.

Проверьте журнал агента после запуска.

Проверка backup-agent

Клон может использовать тот же идентификатор backup-клиента.

Перед включением backup проверьте:

  • имя клиента;
  • repository path;
  • policy;
  • retention;
  • encryption key;
  • расписание.

Клонирование шаблона

Для регулярного развёртывания лучше использовать шаблон.

Преобразование VM в шаблон:

qm template TEMPLATE_VM_ID

Создание клона:

qm clone TEMPLATE_VM_ID NEW_VM_ID   --name NEW_VM_NAME   --full 1   --storage TARGET_STORAGE

Шаблон нельзя запускать как обычную VM.

Полный клон из шаблона

Подходит для:

  • production VM;
  • независимых серверов;
  • миграции;
  • долгосрочной эксплуатации.

Пример:

qm clone 9000 110   --name web01   --full 1   --storage local-lvm

Связанный клон из шаблона

Подходит для:

  • тестовых стендов;
  • учебных VM;
  • временных сред;
  • быстрого масштабирования лаборатории.

Пример:

qm clone 9000 111   --name test01   --full 0

Клонирование на другой узел

В кластере можно указать target node:

qm clone   SOURCE_VM_ID   NEW_VM_ID   --name NEW_VM_NAME   --full 1   --target TARGET_NODE   --storage TARGET_STORAGE

Проверьте:

  • доступность storage;
  • совместимость CPU;
  • сетевые bridge;
  • VLAN;
  • свободное место;
  • права.

Типичные проблемы

Linked Clone недоступен

Причины:

  • исходная VM не преобразована в шаблон;
  • storage не поддерживает snapshot;
  • выбран неподдерживаемый backend.

Используйте полный клон.

Клон не запускается

Проверьте:

qm start NEW_VM_ID

Посмотрите task log.

Проверьте:

qm config NEW_VM_ID

Сеть не работает

Проверьте:

  • link_down;
  • bridge;
  • VLAN;
  • MAC;
  • IP;
  • gateway;
  • Netplan;
  • firewall.

Конфликт IP

Немедленно отключите сеть одной VM.

На узле:

qm set NEW_VM_ID   --net0 virtio=MAC_ADDRESS,bridge=vmbr0,link_down=1

Исправьте адрес внутри клона.

SSH сообщает host key changed

Это ожидаемо после обновления host keys.

Удалите старую запись для нового IP только после проверки fingerprint:

ssh-keygen -R NEW_VM_IP

Сервисы клона регистрируются как исходный сервер

Проверьте:

  • machine-id;
  • hostname;
  • application ID;
  • agent ID;
  • сертификаты;
  • токены.

Клон занимает столько же места, сколько исходная VM

Это ожидаемо для полного клона.

Для экономии места используйте linked clone, если storage и сценарий это допускают.

Безопасный порядок клонирования

  1. Проверить backup исходной VM.
  2. Выбрать новый VM ID.
  3. Проверить свободное место.
  4. Создать полный клон.
  5. Отключить сеть клона.
  6. Запустить через консоль.
  7. Изменить hostname.
  8. Обновить machine-id.
  9. Обновить SSH host keys.
  10. Изменить IP.
  11. Проверить сервисы и scheduled tasks.
  12. Подключить сеть.
  13. Проверить мониторинг и backup.

Быстрый набор команд

Полный клон:

qm clone SOURCE_VM_ID NEW_VM_ID   --name NEW_VM_NAME   --full 1   --storage TARGET_STORAGE

Связанный клон:

qm clone TEMPLATE_ID NEW_VM_ID   --name NEW_VM_NAME   --full 0

Проверить:

qm config NEW_VM_ID
qm status NEW_VM_ID

Запустить:

qm start NEW_VM_ID

Итог

После выполнения инструкции:

  • подготовлена исходная VM;
  • создан полный или связанный клон;
  • проверены VM ID и MAC-адрес;
  • изменены hostname, machine-id и SSH host keys;
  • настроен новый IP;
  • проверены сервисы, cron и systemd timers;
  • исключены конфликты с исходной VM.

Клон нельзя считать готовым к работе, пока не проверена уникальность всех системных и прикладных идентификаторов.

← Предыдущая статья Увеличение диска виртуальной машины в Proxmox VE Следующая статья → Перенос виртуального диска между хранилищами в Proxmox VE