Клонирование виртуальной машины в 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 и сценарий это допускают.
Безопасный порядок клонирования
- Проверить backup исходной VM.
- Выбрать новый VM ID.
- Проверить свободное место.
- Создать полный клон.
- Отключить сеть клона.
- Запустить через консоль.
- Изменить hostname.
- Обновить machine-id.
- Обновить SSH host keys.
- Изменить IP.
- Проверить сервисы и scheduled tasks.
- Подключить сеть.
- Проверить мониторинг и 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.
Клон нельзя считать готовым к работе, пока не проверена уникальность всех системных и прикладных идентификаторов.