Предыстория, у меня есть физический сервер ((Supermicro SYS-5019S-M: Debian 10 + Proxmox 6, ZFS разделы, 64Gb оперативной памяти (2 модуля 378A4G43MB1-CTD)), на нем установлена связка Debian 10 + Proxmox 6.4-13 (running kernel: 5.4.166-1-pve) который выступает, как часть под тест, как часть под боевое использование. Есть виртуальная машина:

она настроена под последующее тестирование различного функционала, выключена и сделан снапшот.

Задача: Склонировать снапшот виртуальной машины в полный клон для нового виртуальной машины.

Раньше я просто создавал виртуальную машину с осью Ubuntu 18.04 Server, выставлял, что загрузка идет по сети и через сервис FOG Project с применением файла ответов и настроечного скрипта подготавливал систему к последующему использованию. Процесс быстрый, когда все автоматизировано.

Но вот решил, а почему бы просто (VM выключена) на снапшоте VM выбрать Snapshots — выделяю снапшот под именем OS, далее нажимаю More - Сlone

  • Target node: srv-proxmox2
  • VM ID: указываю 500 (к примеру)
  • Name: srv-usb1804500
  • Snapshot: OS
  • Target Storage: выбираю raid4tb

Клонирую через Web-интерфейс снапшот в новую VM

и нажимаю Clone, но увы получаю ошибку вида "Full clone feature is not supported for drive 'scsi0' (500)"

Не копируется snapshot (снапшот) в новую VM

Спрашивается почему?

Приступаю к решению.

Шаг №1: Подключаюсь к серверу по SSH или через Webинтерфейс (https://IP&DNS:8006) открываю: (Server View) Datacenter - srv-proxmox2 - >_ Shell

root@ekzorchik:~# ssh -l root 172.35.35.250
root@172.35.35.250's password:
Linux srv-proxmox2 5.4.166-1-pve #1 SMP PVE 5.4.166-1 (Wed, 02 Feb 2022 08:05:40 +0100) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jan 24 08:08:00 2023
root@srv-proxmox2:~#

Шаг №2: Создаю конфигурационный файл под виртуальную машину, пусть у нее VM ID будет 500:

root@srv-proxmox2:~# cp /etc/pve/qemu-server/114.conf /etc/pve/qemu-server/500.conf

после копирования содержимое файла 500.conf выглядит так:

root@srv-proxmox2:~# cat /etc/pve/qemu-server/500.conf
agent: 1
boot: order=scsi0;ide2
cores: 2
ide2: none,media=cdrom
memory: 2048
name: srv-usb1804B
net0: virtio=0A:EA:67:29:40:91,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: OS
scsi0: raid4tb:vm-114-disk-0,size=60G
scsihw: virtio-scsi-pci
smbios1: uuid=7dda0a83-d090-4b7d-a241-2f152fb1e72a
sockets: 1
vmgenid: 54d6aec9-baa1-4b3f-ac73-d4db7edaa18f

[OS]
agent: 1
boot: order=scsi0;ide2
cores: 2
ide2: none,media=cdrom
memory: 2048
name: srv-usb1804B
net0: virtio=0A:EA:67:29:40:91,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: raid4tb:vm-114-disk-0,size=60G
scsihw: virtio-scsi-pci
smbios1: uuid=7dda0a83-d090-4b7d-a241-2f152fb1e72a
snaptime: 1671710730
sockets: 1
vmgenid: 95b0f9e0-98e3-4dba-8438-41cc0f5df008

Шаг №3: Копирую snapshot (снапшот) в диск:

root@srv-proxmox2:~# zfs send -p raid4tb/vm-114-disk-0@OS | zfs receive raid4tb/vm-500-disk-0
root@srv-proxmox2:~#

Шаг №4: Добавляю диск в конфигурационный файл VM ID 500:

root@srv-proxmox2:~# qm set 500 -scsi0 raid4tb:vm-500-disk-0
update VM 500: -scsi0 raid4tb:vm-500-disk-0
root@srv-proxmox2:~#

Шаг №5: Проверяю какая информация в конфигурационном файле для VM ID: 500 и привожу до вида:

root@srv-proxmox2:~# nano /etc/pve/qemu-server/500.conf
agent: 1
boot: order=scsi0;ide2
cores: 2
ide2: none,media=cdrom
memory: 2048
name: srv-usb1804B-500
net0: virtio=0A:EA:67:29:40:91,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: OS
scsi0: raid4tb:vm-500-disk-0,size=60G
scsihw: virtio-scsi-pci
smbios1: uuid=7dda0a83-d090-4b7d-a241-2f152fb1e72a
sockets: 1
vmgenid: 54d6aec9-baa1-4b3f-ac73-d4db7edaa18f

После не забываем сохранить внесенные изменения.

Получается вот так:

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

Шаг №6: Запускаю виртуальную машину: либо через консоль, либо через Webинтерфейс:

root@srv-proxmox2:~# qm start 500
root@srv-proxmox2:~#

Открываю >_ Console запущенной виртуальной машины с VM ID 500 и вижу что система успешно запускается.

Проверяю, открыв "Console" подключение к VM ID 500 со склонированным диском из снапшота

Жаль, что через консоль командной строки данная процедура проделывается, но теперь у меня есть два надежных способа:

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

Итого, заметка работоспособна, на этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.