Перенос виртуального диска между хранилищами в Proxmox VE
Пошаговый перенос виртуального диска VM между хранилищами Proxmox VE через веб-интерфейс и CLI с проверкой конфигурации и освобождением места.
Виртуальный диск можно перенести с одного хранилища Proxmox VE на другое без пересоздания виртуальной машины.
Операция полезна, если:
- заканчивается место;
- требуется перейти с локального storage на ZFS, LVM-thin или NFS;
- нужно перераспределить нагрузку;
- требуется освободить старое хранилище;
- меняется архитектура хранения.
В этой инструкции рассматривается только перенос одного виртуального диска VM между хранилищами на одном узле.
Подходит для: Proxmox VE 8 и 9
Уровень сложности: средний
Время выполнения: зависит от размера диска и скорости storage
Требуемый доступ: права управления VM и хранилищами
Важное предупреждение
Перед переносом:
- создайте резервную копию VM;
- проверьте свободное место на целевом storage;
- убедитесь, что выбран правильный диск;
- не запускайте одновременно backup, snapshot или migration;
- не прерывайте операцию без необходимости;
- проверьте доступ к консоли узла.
Что будет рассмотрено
После выполнения инструкции можно будет:
- определить текущий storage диска;
- проверить свободное место;
- перенести диск через веб-интерфейс;
- перенести диск через CLI;
- выбрать формат диска;
- проверить конфигурацию после переноса;
- удалить старый volume;
- диагностировать типичные ошибки.
Проверка конфигурации VM
На узле Proxmox:
qm config VM_ID
Пример:
qm config 100
Покажите только диски:
qm config VM_ID |
grep -E '^(scsi|virtio|sata|ide)[0-9]+:'
Пример:
scsi0: local-lvm:vm-100-disk-0,size=64G
Здесь:
scsi0
— имя виртуального диска;
local-lvm
— текущее хранилище;
vm-100-disk-0
— имя тома;
64G
— размер диска.
Проверка хранилищ
pvesm status
Проверьте:
- статус;
- общий объём;
- занятое место;
- свободное место;
- тип хранилища.
Целевой storage должен иметь статус:
active
Проверка типа целевого storage
Откройте:
Datacenter → Storage
Выберите хранилище.
Проверьте, что в Content разрешено:
Disk image
Через CLI:
cat /etc/pve/storage.cfg
Найдите нужный storage.
Проверка свободного места
Для всех storage:
pvesm status
Для файлового storage:
df -h /mnt/pve/STORAGE_ID
Для LVM-thin:
lvs -a -o+data_percent,metadata_percent
Для ZFS:
zpool list
zfs list
Свободного места должно быть достаточно для полного объёма данных и служебных операций.
Создание резервной копии
Перед переносом создайте backup:
vzdump VM_ID --storage BACKUP_STORAGE --mode snapshot --compress zstd
Дождитесь:
TASK OK
Проверка активных задач
Перед началом убедитесь, что VM не участвует в других операциях.
Проверьте:
ps aux |
grep -E 'vzdump|qmigrate|qemu-img|pvesm' |
grep -v grep
В веб-интерфейсе проверьте:
Node → Tasks
Нужно ли останавливать VM
Proxmox VE может переносить некоторые диски работающей VM.
Однако возможность live move зависит от:
- типа storage;
- формата диска;
- версии QEMU;
- наличия snapshot;
- текущей нагрузки;
- конкретной конфигурации VM.
Для наиболее предсказуемого результата остановите VM в согласованное окно.
Корректное завершение:
qm shutdown VM_ID
Проверьте:
qm status VM_ID
Ожидаемый результат:
status: stopped
Перенос через веб-интерфейс
Выберите VM.
Откройте:
VM → Hardware
Выберите нужный диск, например:
scsi0
Нажмите:
Disk Action → Move Storage
Выбор Target Storage
В поле:
Target Storage
выберите новое хранилище.
Пример:
local-zfs
Выбор формата диска
Доступные варианты зависят от storage backend.
Возможные форматы:
raw
qcow2
vmdk
raw
Преимущества:
- минимальные накладные расходы;
- высокая производительность;
- часто используется с LVM-thin, ZFS и Ceph.
qcow2
Преимущества:
- поддержка снапшотов на файловом storage;
- thin provisioning;
- переносимость файла.
Недостатки:
- дополнительные накладные расходы;
- зависит от типа storage.
Если поле недоступно, формат определяется хранилищем автоматически.
Параметр Delete source
В форме может быть опция удаления исходного диска после успешного копирования.
Рекомендуется:
- оставить удаление включённым при штатном переносе;
- отключить его, если требуется дополнительная ручная проверка;
- помнить, что сохранённый старый диск будет занимать место.
После переноса всегда проверяйте конфигурацию.
Запуск переноса
Нажмите:
Move disk
Дождитесь завершения задачи.
В журнале должно появиться:
TASK OK
Не закрывайте вкладку и не перезапускайте узел во время операции.
Перенос через CLI
Базовая команда:
qm move_disk VM_ID DISK TARGET_STORAGE
Пример:
qm move_disk 100 scsi0 local-zfs
Перенос с удалением исходного тома
Обычно исходный том удаляется после успешного переноса.
Явно:
qm move_disk 100 scsi0 local-zfs --delete 1
Перенос без удаления исходного тома
qm move_disk 100 scsi0 local-zfs --delete 0
После операции старый том может появиться в конфигурации как:
unused0
Проверьте:
qm config 100
Указание формата
Для файлового storage:
qm move_disk 100 scsi0 directory-storage --format qcow2
Для backend, который поддерживает только raw, формат будет выбран автоматически.
Проверка прогресса
В веб-интерфейсе:
Node → Tasks
Через CLI следите за процессами:
ps aux |
grep -E 'qemu-img|qm move_disk|pvesm' |
grep -v grep
Для storage также можно наблюдать нагрузку:
iostat -xz 1
Проверка после переноса
Покажите конфигурацию:
qm config VM_ID
Пример ожидаемой строки:
scsi0: local-zfs:vm-100-disk-0,size=64G
Проверьте, что storage изменился.
Проверка unused-дисков
qm config VM_ID |
grep '^unused'
Если старый диск не удалён, он может отображаться как:
unused0
Не удаляйте его, пока не проверена загрузка VM и данные.
Первый запуск после переноса
qm start VM_ID
Проверьте:
qm status VM_ID
Откройте консоль.
Убедитесь, что гостевая ОС загрузилась.
Проверка диска внутри Linux
lsblk
df -hT
Проверьте журнал ядра:
sudo journalctl -k -b --no-pager |
grep -iE 'I/O error|filesystem|ext4|xfs'
Проверка сервисов
systemctl --failed
Проверьте критичное приложение:
systemctl status SERVICE_NAME --no-pager
Проверьте данные приложения.
Проверка производительности
После переноса можно выполнить базовую проверку I/O.
Проверка задержки storage на узле:
iostat -xz 1
Проверка внутри VM:
dd if=/dev/zero of=/tmp/disk-test.img bs=1M count=1024 conv=fdatasync
Удалите тестовый файл:
rm -f /tmp/disk-test.img
dd показывает только грубую последовательную скорость и не заменяет полноценный benchmark.
Удаление старого unused-диска
После успешной проверки:
- Убедитесь, что VM загружается.
- Проверьте приложение.
- Проверьте backup.
- Убедитесь, что
unused0относится к старому диску.
В веб-интерфейсе:
VM → Hardware → Unused Disk → Remove
Через CLI сначала посмотрите:
qm config VM_ID |
grep '^unused'
Затем удалите запись:
qm set VM_ID --delete unused0
Важно: удаление
unused0может удалить соответствующий volume. Подтвердите его назначение до выполнения.
Освобождение места на старом storage
Проверьте:
pvesm status
Для LVM-thin:
lvs
Для ZFS:
zfs list
Для directory storage:
du -sh /path/to/storage/images/VM_ID
Перенос нескольких дисков
Если VM содержит:
scsi0
scsi1
scsi2
переносите каждый диск отдельно.
После каждого переноса:
- проверяйте task log;
- проверяйте
qm config; - проверяйте свободное место;
- не запускайте несколько тяжёлых операций одновременно без необходимости.
Перенос EFI-диска
При использовании OVMF в конфигурации может быть:
efidisk0
Его также можно перенести на целевой storage.
Пример:
qm move_disk VM_ID efidisk0 TARGET_STORAGE
После переноса проверьте загрузку UEFI.
Перенос TPM state
Для VM с TPM может быть:
tpmstate0
Перенесите его отдельно:
qm move_disk VM_ID tpmstate0 TARGET_STORAGE
Не удаляйте TPM state без необходимости.
Снапшоты и перенос
Наличие снапшотов может ограничить перенос диска между некоторыми storage backend.
Проверьте:
qm listsnapshot VM_ID
Если перенос недоступен:
- проверьте поддержку целевого storage;
- удалите ненужные снапшоты после backup;
- используйте backup и restore;
- выполните storage migration другим способом.
Альтернатива через backup и restore
Если прямой перенос не поддерживается:
- Создайте backup VM.
- Восстановите её с новым VM ID на целевой storage.
- Проверьте сеть и загрузку.
- Удалите исходную VM только после проверки.
Такой способ требует больше времени и свободного места, но часто надёжнее при сложной миграции.
Типичные проблемы
Target storage не отображается
Проверьте:
- статус storage;
- разрешён ли тип
Disk image; - доступен ли storage выбранному узлу;
- достаточно ли свободного места.
Команда:
pvesm status
Перенос завершился с ошибкой
Проверьте task log.
Частые причины:
- недостаточно места;
- storage стал недоступен;
- ошибка чтения исходного диска;
- неподдерживаемый формат;
- активный snapshot;
- высокая нагрузка;
- сетевой сбой для NFS или Ceph.
После переноса VM не загружается
Проверьте:
qm config VM_ID
Убедитесь, что:
- boot order указывает на правильный диск;
- диск подключён под прежним bus;
- EFI disk на месте;
- storage active.
Старый диск остался как unused0
Это ожидаемо при --delete 0.
Проверьте VM, затем удалите unused-диск вручную.
Место на старом storage не освободилось
Проверьте:
qm config VM_ID |
grep '^unused'
Также проверьте storage backend.
Для LVM:
lvs
Для directory storage:
find /path/to/storage/images/VM_ID -maxdepth 1 -type f -ls
Перенос идёт очень медленно
Проверьте:
iostat -xz 1
Для NFS:
nfsstat -m
Для сети:
sar -n DEV 1
Скорость зависит от исходного и целевого storage, размера фактических данных и нагрузки.
Безопасный порядок переноса
- Проверить backup.
- Проверить
qm config. - Проверить storage и свободное место.
- Проверить отсутствие активных задач.
- При необходимости остановить VM.
- Перенести диск.
- Проверить
TASK OK. - Проверить новую конфигурацию.
- Запустить VM.
- Проверить ОС, файловую систему и приложение.
- Только после проверки удалить старый unused-диск.
- Повторно проверить свободное место.
Быстрый набор команд
Показать диски:
qm config VM_ID |
grep -E '^(scsi|virtio|sata|ide|efi|tpm)'
Показать storage:
pvesm status
Перенести диск:
qm move_disk VM_ID scsi0 TARGET_STORAGE
Проверить:
qm config VM_ID
Показать unused:
qm config VM_ID |
grep '^unused'
Итог
После выполнения инструкции:
- определён исходный storage;
- проверено место на целевом хранилище;
- виртуальный диск перенесён через GUI или CLI;
- проверены формат и конфигурация;
- VM успешно запущена;
- проверены файловая система и сервисы;
- старый volume удалён только после проверки.
Перенос диска следует считать завершённым только после успешной загрузки VM и проверки данных приложения.