Импорт существующего диска qcow2 или VMDK в Proxmox VE

Пошаговый импорт существующего виртуального диска qcow2, raw или VMDK в Proxmox VE с созданием VM, подключением диска и проверкой загрузки.

Готовую виртуальную машину из другого гипервизора можно перенести в Proxmox VE через импорт её виртуального диска.

На практике чаще всего встречаются форматы:

qcow2
raw
vmdk

В этой инструкции рассматривается только импорт существующего диска в заранее созданную VM и первый запуск гостевой системы.

Подходит для: Proxmox VE 8 и 9
Уровень сложности: средний
Время выполнения: зависит от размера диска и скорости хранилища
Требуемый доступ: root-доступ к узлу Proxmox VE

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

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

  • проверить исходный виртуальный диск;
  • передать файл на узел Proxmox VE;
  • создать пустую VM;
  • импортировать диск через qm importdisk;
  • подключить его как scsi0, sata0 или virtio0;
  • настроить порядок загрузки;
  • проверить BIOS или UEFI;
  • устранить типичные проблемы первого запуска.

Поддерживаемые исходные форматы

Для импорта обычно используют:

qcow2
raw
vmdk

Примеры файлов:

server.qcow2
server.raw
server.vmdk

Формат целевого тома зависит от выбранного storage backend.

Например:

  • LVM-thin обычно хранит raw volume;
  • ZFS использует zvol;
  • directory storage может хранить qcow2 или raw;
  • Ceph RBD использует собственный блочный backend.

Подготовка исходной виртуальной машины

До экспорта из старого гипервизора рекомендуется:

  • корректно выключить гостевую ОС;
  • удалить активные снапшоты;
  • завершить незаконченные операции;
  • проверить файловую систему;
  • сохранить параметры CPU, RAM и сети;
  • зафиксировать BIOS или UEFI;
  • проверить схему дисковых контроллеров;
  • создать резервную копию.

Не копируйте активный виртуальный диск работающей VM без согласованного snapshot-механизма.

Проверка файла на узле Proxmox VE

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

Пример:

mkdir -p /var/lib/vz/import

Проверьте файл:

ls -lh /var/lib/vz/import/

Определите формат:

qemu-img info   /var/lib/vz/import/server.qcow2

Пример вывода:

file format: qcow2
virtual size: 64 GiB
disk size: 18 GiB

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

Для qcow2:

qemu-img check   /var/lib/vz/import/server.qcow2

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

Для больших дисков проверка может занять продолжительное время.

Проверка VMDK

qemu-img info   /var/lib/vz/import/server.vmdk

VMDK может состоять из:

  • небольшого descriptor-файла;
  • одного или нескольких data-файлов.

Копируйте все связанные файлы, если VMDK не является монолитным.

Копирование через SCP

С другого Linux-хоста:

scp server.qcow2   root@PROXMOX_IP:/var/lib/vz/import/

Для большого файла удобнее использовать rsync:

rsync -avh --progress   server.qcow2   root@PROXMOX_IP:/var/lib/vz/import/

Проверка контрольной суммы

На исходной системе:

sha256sum server.qcow2

На Proxmox VE:

sha256sum   /var/lib/vz/import/server.qcow2

Контрольные суммы должны совпадать.

Проверка свободного места

Покажите хранилища:

pvesm status

Проверьте целевой storage.

Для LVM-thin:

lvs -a -o+data_percent,metadata_percent

Для ZFS:

zpool list
zfs list

Для directory storage:

df -h

Учитывайте виртуальный размер диска, а не только фактический размер qcow2-файла.

Выбор VM ID

Покажите следующий свободный ID:

pvesh get /cluster/nextid

В примерах используется:

VM ID: 120

Создание пустой VM через веб-интерфейс

Нажмите:

Create VM

Укажите:

  • Node;
  • VM ID;
  • Name;
  • Do not use any media;
  • подходящий BIOS;
  • подходящий Machine type;
  • CPU;
  • RAM;
  • сеть.

На вкладке диска можно создать временный диск, а затем удалить его до импорта.

Проще и точнее создать VM через CLI.

Создание пустой VM через CLI

Пример:

qm create 120   --name imported-server   --memory 4096   --cores 4   --cpu x86-64-v2-AES   --net0 virtio,bridge=vmbr0   --scsihw virtio-scsi-single   --ostype l26

Проверьте:

qm config 120

Выбор BIOS или UEFI

Если исходная VM использовала legacy BIOS:

qm set 120   --bios seabios

Если использовала UEFI:

qm set 120   --bios ovmf

Для UEFI добавьте EFI-диск:

qm set 120   --efidisk0 local-lvm:1,efitype=4m,pre-enrolled-keys=1

Замените storage на подходящий.

Неверный выбор BIOS или UEFI — одна из основных причин, по которой импортированная VM не загружается.

Импорт диска

Базовая команда:

qm importdisk   VM_ID   SOURCE_DISK   TARGET_STORAGE

Пример qcow2:

qm importdisk   120   /var/lib/vz/import/server.qcow2   local-lvm

Пример VMDK:

qm importdisk   120   /var/lib/vz/import/server.vmdk   local-lvm

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

Проверка после импорта

qm config 120

Импортированный том обычно появится как:

unused0

Пример:

unused0: local-lvm:vm-120-disk-0

Подключение импортированного диска как SCSI

qm set 120   --scsi0 local-lvm:vm-120-disk-0

Используйте фактическое имя тома из qm config.

Проверьте:

qm config 120 |
grep -E '^(scsi0|unused)'

Настройка порядка загрузки

qm set 120   --boot order=scsi0

Проверьте:

qm config 120 |
grep '^boot'

Когда использовать SATA

Старая гостевая ОС может не иметь VirtIO-драйверов.

В таком случае временно подключите диск как SATA:

qm set 120   --sata0 local-lvm:vm-120-disk-0

Установите порядок загрузки:

qm set 120   --boot order=sata0

После установки VirtIO-драйверов диск можно перевести на SCSI.

Когда использовать VirtIO Block

Вариант:

qm set 120   --virtio0 local-lvm:vm-120-disk-0

Для современных Linux-гостей обычно предпочтительнее:

VirtIO SCSI single + scsi0

Проверка итоговой конфигурации

qm config 120

Основные параметры могут выглядеть так:

bios: seabios
boot: order=scsi0
cores: 4
memory: 4096
name: imported-server
net0: virtio=...,bridge=vmbr0
scsi0: local-lvm:vm-120-disk-0
scsihw: virtio-scsi-single

Первый запуск без сети

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

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

VM → Hardware → Network Device → Edit → Disconnect

Через CLI сначала посмотрите полную строку:

qm config 120 |
grep '^net0'

Затем добавьте:

link_down=1

Не теряйте MAC-адрес и остальные параметры интерфейса.

Запуск VM

qm start 120

Проверьте:

qm status 120

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

Если VM не загружается

Проверьте:

  • BIOS или UEFI;
  • Boot Order;
  • тип дискового контроллера;
  • наличие EFI-диска;
  • схему разделов;
  • драйверы VirtIO;
  • целостность исходного диска.

Ошибка No bootable device

Проверьте:

qm config 120 |
grep -E '^(bios|boot|scsi|sata|virtio|efidisk)'

Попробуйте:

  • изменить SeaBIOS на OVMF;
  • изменить OVMF на SeaBIOS;
  • подключить диск как SATA;
  • проверить EFI System Partition;
  • проверить загрузчик внутри гостя.

Проверка разметки через rescue ISO

Если VM не загружается, подключите установочный или rescue ISO.

Проверьте диски внутри rescue-среды:

lsblk -f

Проверьте GPT:

sudo fdisk -l

Проверьте EFI-раздел:

sudo parted -l

Восстановление GRUB для legacy BIOS

Общий порядок из rescue-среды:

sudo mount /dev/sdXN /mnt

При необходимости подключите отдельные разделы /boot.

Затем:

sudo grub-install   --boot-directory=/mnt/boot   /dev/sdX

Команды зависят от фактической разметки.

Не выполняйте восстановление загрузчика без понимания структуры диска.

Восстановление UEFI-загрузки

Для UEFI требуется:

  • EFI System Partition;
  • OVMF;
  • подключённый EFI-диск Proxmox;
  • корректная запись загрузчика.

В rescue-среде проверьте:

lsblk -f

EFI-раздел обычно имеет FAT32.

Импорт Windows VM

Для Windows до миграции рекомендуется установить VirtIO-драйверы в исходной системе.

Если драйверов нет, подключите системный диск как SATA.

Дополнительно подключите VirtIO ISO и установите драйверы внутри Windows.

После этого можно перевести диск на SCSI.

Смена сетевого адаптера

Если исходная система не содержит VirtIO network driver, временно используйте:

Intel E1000

После установки VirtIO-драйвера переключите на:

VirtIO

Для Linux VirtIO обычно поддерживается штатно.

Проверка Linux после загрузки

Внутри гостевой ОС:

lsblk
df -hT

Проверьте ошибки:

journalctl -b -p err --no-pager

Проверьте failed units:

systemctl --failed

Проверка сетевой конфигурации

Имя интерфейса может измениться.

Проверьте:

ip -br link
ip -br addr

Например, вместо старого:

ens160

может появиться:

ens18

Обновите Netplan или другую сетевую конфигурацию.

Изменение hostname и IP

До подключения сети измените:

  • hostname;
  • статический IP;
  • DNS;
  • gateway;
  • machine-id при необходимости;
  • идентификаторы monitoring agent;
  • backup agent;
  • application node ID.

Это предотвращает конфликт с исходной VM.

Установка QEMU Guest Agent

В Ubuntu или Debian:

sudo apt update
sudo apt install -y qemu-guest-agent

Включите:

sudo systemctl enable --now qemu-guest-agent

На узле:

qm set 120   --agent enabled=1

Проверка:

qm agent 120 ping

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

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

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

ip addr
ip route

Проверьте связь:

ping -c 3 GATEWAY_IP

Проверьте DNS:

getent hosts example.com

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

Проверьте:

  • системные сервисы;
  • базу данных;
  • mount point;
  • лицензии;
  • сетевые зависимости;
  • cron;
  • systemd timers;
  • monitoring;
  • backup.

Импорт диска переносит содержимое VM, но не гарантирует совместимость всех виртуальных устройств.

Конвертация диска заранее

При необходимости формат можно преобразовать до импорта.

VMDK в qcow2:

qemu-img convert   -p   -f vmdk   -O qcow2   source.vmdk   converted.qcow2

qcow2 в raw:

qemu-img convert   -p   -f qcow2   -O raw   source.qcow2   converted.raw

Проверьте результат:

qemu-img info converted.qcow2

Обычно qm importdisk умеет выполнить необходимое преобразование автоматически.

Удаление временного файла

Удаляйте исходный файл только после:

  • успешного импорта;
  • загрузки VM;
  • проверки файловой системы;
  • проверки приложения;
  • создания новой резервной копии.

Удаление:

rm -f /var/lib/vz/import/server.qcow2

Перед выполнением дважды проверьте путь.

Создание backup после миграции

После успешной проверки:

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

Дождитесь:

TASK OK

Это создаст первую резервную копию VM уже в формате Proxmox VE.

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

qm importdisk сообщает, что файл не найден

Проверьте:

ls -lh /var/lib/vz/import/

Используйте абсолютный путь.

Недостаточно места

Проверьте:

pvesm status
df -h

Учитывайте виртуальный размер исходного диска.

Импортированный диск остался unused0

Это нормально.

Подключите его как:

qm set VM_ID   --scsi0 STORAGE_ID:VOLUME_NAME

VM не видит диск

Проверьте контроллер и boot order.

Для старой ОС попробуйте SATA.

Windows показывает BSOD после смены контроллера

Вероятно, отсутствует VirtIO-драйвер.

Верните SATA, загрузите Windows, установите VirtIO-драйверы и повторите переключение.

Linux загружается, но нет сети

Проверьте новое имя интерфейса:

ip -br link

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

UEFI VM не загружается

Проверьте:

  • bios: ovmf;
  • наличие efidisk0;
  • EFI System Partition;
  • Boot Order;
  • Secure Boot keys.

VM загружается, но сервисы не работают

Проверьте:

systemctl --failed
journalctl -b -p err --no-pager

Также проверьте пути дисков, сетевые интерфейсы и mount point.

Безопасный порядок импорта

  1. Корректно выключить исходную VM.
  2. Проверить исходный диск.
  3. Скопировать его на Proxmox VE.
  4. Сверить SHA-256.
  5. Проверить целевой storage.
  6. Создать пустую VM.
  7. Выбрать правильный BIOS или UEFI.
  8. Импортировать диск.
  9. Подключить его к VM.
  10. Настроить boot order.
  11. Первый раз запустить без сети.
  12. Изменить уникальные параметры.
  13. Проверить приложение.
  14. Подключить сеть.
  15. Создать новый backup.

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

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

qemu-img info   /var/lib/vz/import/server.qcow2

Создать VM:

qm create 120   --name imported-server   --memory 4096   --cores 4   --net0 virtio,bridge=vmbr0   --scsihw virtio-scsi-single

Импортировать:

qm importdisk   120   /var/lib/vz/import/server.qcow2   local-lvm

Подключить:

qm set 120   --scsi0 local-lvm:vm-120-disk-0

Настроить загрузку:

qm set 120   --boot order=scsi0

Итог

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

  • исходный qcow2, raw или VMDK проверен;
  • создана пустая VM;
  • виртуальный диск импортирован;
  • диск подключён и добавлен в Boot Order;
  • проверены BIOS и UEFI;
  • выполнен первый запуск без сетевого конфликта;
  • проверены гостевая ОС и приложение;
  • создан новый backup в Proxmox VE.

Импорт считается завершённым только после успешной загрузки, проверки данных и создания резервной копии новой VM.

← Предыдущая статья Получение сертификата Let's Encrypt для Proxmox VE Следующая статья → Настройка почтовых уведомлений в Proxmox VE