Ви можете перемістити віртуальну машину за один день — або провести вихідні, дивлячись у чорний екран із написом «No bootable device». Міграції з ESXi до Proxmox зриваються з тих самих нудних причин постійно: змінюється контролер диска, режим прошивки, імена NIC, а Windows поводиться так, ніби ви замінили кермо на багет.
Ось підхід орієнтований на продакшн: збережіть докази, оберіть правильні типи шини, попередньо встановіть драйвери, перевірте режим завантаження і лише після цього переключайтеся на продуктивні налаштування, такі як VirtIO. Ви тут, щоб перемістити навантаження, а не збирати постмортеми.
Факти та історія, що справді важливі
Трохи контексту робить режими відмов менш загадковими і більш передбачуваними. Ось факти, які я бачив корисними під час реальних міграцій:
- VMDK старший за більшість «cloud-first» стратегій. VMware представив VMDK на початку 2000-х; він має sparse/thick варіанти та низку підтипів, з якими інструменти конвертації не завжди погоджуються.
- KVM вбудований у ядро Linux з 2007 року. Proxmox базується на цій фундаментальній частині, а значить зміни в ядрі Linux (драйвери, іменування, initramfs) можуть бути важливішими, ніж «налаштування Proxmox».
- VirtIO виник у екосистемі KVM/QEMU, щоб уникнути оверхеду емульованого обладнання. Чудово для продуктивності, катастрофа якщо гостьова ОС не має драйвера на момент завантаження.
- UEFI проти BIOS — це не косметичний перемикач. Якщо ESXi встановив гість у режимі UEFI, а ви завантажуєте його в BIOS (або навпаки), часто отримаєте ситуацію «диск виглядає порожнім».
- VMware PVSCSI — це не VirtIO. Обидва звучать як «паравіртуалізація», але стек драйверів різний. Windows особливо карає такі припущення.
- «Прогнозовані» імена NIC змінили людську модель мислення. Linux перейшов від eth0/eth1 до імен на кшталт ens18/enp0s3; під час міграції ця зміна явно проявляється.
- qcow2 — це не «ще один формат диска». Він підтримує снапшоти й стиснення, але додає рівень проміжності. На деяких бекендах raw швидший і простіший.
- OVA — це tarball, а не магія. Зазвичай містить опис OVF плюс один або кілька VMDK. Розглядайте його як архів для інспекції, а не як сакральний артефакт.
- Активація Windows і апаратні ідентифікатори завжди примхливі. Переміщення між гіпервізорами змінює достатньо віртуального обладнання, тому плануйте запити активації та перевірки ліцензійної відповідності.
І одна цитата щодо надійності, бо це правильний настрій перед тим, як перевести продакшн-навантаження на інше віртуальне обладнання:
Вернер Вогельс (парафраз): «Все ламається, весь час — проектуйте і працюйте так, ніби це норма.»
Дерево рішень: оберіть шлях імпорту
Є три поширені шляхи. Оберіть один, дотримуйтеся його і уникайте змішування «швидких хаків» посеред процесу.
Шлях A: У вас є OVA/OVF експорт
Краще, коли ви можете чисто експортувати з vCenter/ESXi і хочете портативний бандл. Ви витягаєте VMDK(и) і конвертуєте їх за допомогою qemu-img або дозволяєте Proxmox імпортувати диск.
Шлях B: У вас є VMDK файли зі сховища
Краще, коли можна SCP з ESXi або переглянути datastore. Ви копіюєте VMDK(и) і конвертуєте/імпортуєте.
Шлях C: Немає ні того, ні іншого, є тільки працююча VM, яку не можна вимкнути
Тоді ви робите реплікацію, відновлення з бекапу або блочне дзеркалювання. Цей посібник передбачає, що ви можете отримати холодний експорт або принаймні консистентну снапшот-копію. Якщо ні, ваша «міграція» технічно є подією підвищеної ненадійності.
Підготовка на ESXi: чистий експорт і фіксація стану
Ваша мета на ESXi проста: зафіксувати факти про VM перед її переміщенням. Який контролер диска? BIOS чи UEFI? Який тип NIC? Які VLAN? Які IP? У Proxmox ці деталі стають здогадками, а здогадки — це шлях до VM, яка «завантажується нормально», але не може нічого при цьому зробити.
Задача 1: Запишіть прошивку VM, диски та типи NIC (з ESXi shell)
cr0x@server:~$ ssh root@esxi01 'vim-cmd vmsvc/getallvms | head'
Vmid Name File Guest OS Version Annotation
1 dc01 [datastore1] dc01/dc01.vmx windows9Server64Guest vmx-13
2 web01 [datastore1] web01/web01.vmx ubuntu64Guest vmx-14
Що означає вивід: у вас є VMID та шляхи до VMX. Ви використаєте VMX, щоб підтвердити прошивку і пристрої.
Рішення: ідентифікуйте VMID, який ви мігруєте, і збережіть шлях до VMX у своїх нотатках.
Задача 2: Витягніть VMX і перевірте прошивку та модель пристрою
cr0x@server:~$ ssh root@esxi01 'grep -E "firmware|scsi|nvme|ethernet.*virtualDev" /vmfs/volumes/datastore1/web01/web01.vmx'
firmware = "efi"
scsi0.virtualDev = "pvscsi"
ethernet0.virtualDev = "vmxnet3"
Що це означає: гість у UEFI, VMware paravirtual SCSI і vmxnet3 NIC.
Рішення: плануйте використання UEFI в Proxmox (OVMF) і врахуйте, що гість покладається на драйвери PVSCSI і vmxnet3, а не на VirtIO.
Задача 3: Коректно вимкніть (або зробіть снапшот, який можна обґрунтувати)
cr0x@server:~$ ssh root@esxi01 'vim-cmd vmsvc/power.getstate 2'
Retrieved runtime info
Powered on
Рішення: якщо можете запланувати простій — вимкніть. Якщо ні — зробіть quiesced снапшот лише якщо інструменти гостя та додатки це підтримують. Інакше прийміть, що експортуєте «можливо консистентні» дані.
cr0x@server:~$ ssh root@esxi01 'vim-cmd vmsvc/power.shutdown 2; sleep 5; vim-cmd vmsvc/power.getstate 2'
Retrieved runtime info
Powered off
Що це означає: коректне вимкнення вдалося. Це «золотий стандарт» для конвертації диска.
Задача 4: Експорт/копіювання дисків (приклад: scp з ESXi)
cr0x@server:~$ scp root@esxi01:/vmfs/volumes/datastore1/web01/web01.vmdk .
web01.vmdk 100% 512B 2.1KB/s 00:00
Що це означає: цей маленький файл — це дескриптор. Дані зазвичай знаходяться у -flat.vmdk або подібному файлі.
Рішення: завжди копіюйте flat/extent файли також або використовуйте метод експорту, який створює єдиний потік (OVA), щоб не втратити частини.
cr0x@server:~$ scp root@esxi01:/vmfs/volumes/datastore1/web01/web01-flat.vmdk .
web01-flat.vmdk 100% 40G 110.2MB/s 06:12
Підготовка на Proxmox: сховище, мережі та запобіжні заходи
На боці Proxmox дві великі ризики: (1) розмістити великі raw-образи на невідповідному сховищі й потім виявити, що не можна робити снапшоти/реплікацію так, як ви очікували; (2) підключити VM до неправильного bridge/VLAN і «успішно» ізолювати її від світу.
Задача 5: Перевірте цілі сховища та вільне місце
cr0x@server:~$ pvesm status
Name =reqtype Status Total Used Avail % Content
local dir active 98.0G 11.2G 81.6G 11 iso,vztmpl,backup
local-lvm lvmthin active 900.0G 612.4G 287.6G 68 rootdir,images
zfspool zfspool active 2.7T 1.1T 1.6T 40 images,rootdir
Що це означає: у вас декілька цілей. ZFS-пул має місце і підтримує снапшоти; LVM-thin теж підтримує снапшоти, але поводиться інакше під навантаженням.
Рішення: свідомо оберіть бекенд сховища. Якщо плануєте інтенсивні снапшоти/реплікацію, ZFS часто найменш неприємний.
Задача 6: Підтвердіть bridge та підтримку VLAN
cr0x@server:~$ ip -br link
lo UNKNOWN 00:00:00:00:00:00
eno1 UP 3c:ec:ef:11:22:33
vmbr0 UP 3c:ec:ef:11:22:33
vmbr1 UP 3c:ec:ef:aa:bb:cc
Рішення: зіставте ESXi portgroup/VLAN наміри з Proxmox bridge і тегом. Якщо ви не можете описати мережу в одному реченні — зупиніться і промапуйте її перед імпортом.
Задача 7: Перевірте стан хоста Proxmox перед тим, як звинувачувати VM
cr0x@server:~$ pveversion -v
proxmox-ve: 8.2.2 (running kernel: 6.8.12-4-pve)
pve-manager: 8.2.4 (running version: 8.2.4/2a1b7d2c)
Рішення: сучасне ядро і QEMU зменшують дивності сумісності, особливо з UEFI і сховищем. Якщо у вас щось застаріле — очікуйте додаткового тертя.
Жарт #1: Віртуалізація — це просто дуже переконлива гра в уяві, і якось на неї залежить зарплатня.
Конвертація дисків: VMDK/OVA до сховища Proxmox
Конвертація — це місце, де ви можете тихо зіпсувати собі день. Правила прості:
- Підтвердіть наявність фактичних extents даних (flat/sesparse/etc.).
- Конвертуйте інструментом, що розуміє підформати VMDK.
- Оберіть raw для простоти/продуктивності на ZFS/LVM-thin, якщо немає причин для qcow2.
- Перевірте розмір утвореного образу та базову цілісність перед приєднанням.
Задача 8: Перевірте дескриптор VMDK (щоб зловити мульти-extent сюрпризи)
cr0x@server:~$ head -n 20 web01.vmdk
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=fffffffe
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 83886080 VMFS "web01-flat.vmdk"
Що це означає: один extent-файл, близько 40GiB секторів. Добре. Якщо ви бачите кілька extent-ів — потрібно скопіювати всі частини та зберегти відносні шляхи.
Рішення: якщо це multi-extent і у вас не всі частини — зупиніться. Експортуйте як OVA або перекопіюйте правильно.
Задача 9: Конвертуйте VMDK в raw (рекомендовано для ZFS через менше шарів)
cr0x@server:~$ qemu-img convert -p -f vmdk -O raw web01.vmdk web01.raw
(0.00/100%)
(12.50/100%)
(25.00/100%)
(37.50/100%)
(50.00/100%)
(62.50/100%)
(75.00/100%)
(87.50/100%)
(100.00/100%)
Що це означає: конвертація завершена. Помилок немає. Хороший початок, але не доказ повної успішності.
Рішення: якщо таргет — LVM-thin або ZFS, raw підходить. Якщо потрібні file-based снапшоти і у вас немає ZFS/LVM-thin, qcow2 може бути корисним.
Задача 10: Перевірте інформацію про образ (саніті-чек перед імпортом)
cr0x@server:~$ qemu-img info web01.raw
image: web01.raw
file format: raw
virtual size: 40 GiB (42949672960 bytes)
disk size: 40 GiB
Що це означає: raw повністю алокований; це очікувано. Якщо ви очікували тонке забезпечення — побачите це тільки з qcow2 або коли цільове сховище (наприклад, ZVOL/LVM-thin) обробляє sparsity.
Рішення: якщо розмір диска суттєво не відповідає очікуваному (наприклад, 4 GiB замість 40 GiB) — ви конвертували не те або пропустили extents.
Задача 11: Імпортуйте диск до сховища Proxmox за допомогою qm importdisk
cr0x@server:~$ qm create 120 --name web01 --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0
create VM 120: success
cr0x@server:~$ qm importdisk 120 web01.raw zfspool
importing disk 'web01.raw' to VM 120 ...
transferred 40.0 GiB of 40.0 GiB (100.00%)
Successfully imported disk as 'zfspool:vm-120-disk-0'
Що це означає: диск тепер — обсяг, керований Proxmox.
Рішення: відтепер трактуйте імпортований том як джерело істини; збережіть оригінальні VMDK/raw у безпечному місці, поки VM не буде стабільною і не створено резервну копію.
Створення VM в Proxmox: контролери, прошивка, CPU та RAM
Саме тут більшість припущень «на ESXi завантажується» йдуть у минуле. За замовчуванням віртуальний апарат ESXi не збігається з налаштуваннями Proxmox. Ваше завдання — відтворити те, що важливо для завантаження, а потім поліпшувати продуктивність після стабілізації.
Правильно приєднайте імпортований диск
Після qm importdisk вам ще потрібно приєднати диск до контролера і задати порядок завантаження.
Задача 12: Приєднайте диск як SATA спочатку (підхід «стабільність першочергово»)
cr0x@server:~$ qm set 120 --sata0 zfspool:vm-120-disk-0
update VM 120: -sata0 zfspool:vm-120-disk-0
Що це означає: диск приєднано до SATA-контролера. Майже кожна ОС може завантажуватися з SATA без додаткових драйверів.
Рішення: використовуйте SATA (або IDE для дуже старих ОС) для першого завантаження. Переключайтеся на VirtIO SCSI пізніше для продуктивності.
Задача 13: Підберіть режим прошивки (UEFI vs BIOS)
cr0x@server:~$ qm set 120 --bios ovmf --efidisk0 zfspool:0,pre-enrolled-keys=1
update VM 120: -bios ovmf -efidisk0 zfspool:vm-120-disk-1,pre-enrolled-keys=1
Що це означає: ви ввімкнули OVMF (UEFI) і створили диск змінних EFI. Якщо у VMX було firmware="efi", це відповідність.
Рішення: якщо гість на ESXi був у BIOS, не вмикайте OVMF. Якщо не знаєте — перевірте VMX і розбиття на розділи (EFI System Partition проти MBR).
Задача 14: Явно встановіть порядок завантаження
cr0x@server:~$ qm set 120 --boot order=sata0
update VM 120: -boot order=sata0
Рішення: не довіряйте налаштуванням за замовчуванням. Нехай VM завантажується з диска, який ви імпортували, а не з порожнього віртуального CD-ROM.
Задача 15: Запустіть і спостерігайте вихід консолі (не робіть сліпих перезапусків)
cr0x@server:~$ qm start 120
Starting VM 120
cr0x@server:~$ qm status 120
status: running
Рішення: відкрийте консоль Proxmox і спостерігайте. Якщо збої — зафіксуйте точний текст помилки. «Воно не завантажується» — це не симптом; це визнання невідомості.
Імпорт Windows: драйвери VirtIO, виправлення завантаження та послідовність дій
Windows не ненавидить вас особисто. Просто вона очікує, що контролери зберігатимуться між перезавантаженнями, і що потрібні драйвери будуть присутні до того, як вона спробує змонтувати диск завантаження.
Найбезпечніша послідовність для Windows:
- Завантажтеся на «універсальному» контролері (SATA) і «універсальній» моделі NIC (E1000), якщо потрібно.
- Встановіть драйвери VirtIO всередині Windows.
- Переключіть дисковий контролер на VirtIO SCSI (або VirtIO Block) і NIC на VirtIO.
- Перезавантажте і перевірте.
Стратегія драйверів VirtIO, яка працює
Підмонтуйте ISO з драйверами VirtIO в Proxmox, потім встановіть драйвери через Device Manager або запустіть інсталятор, якщо він є. Ключове: драйвер диска має бути присутній і увімкнений під час завантаження.
Задача 16: Додайте ISO драйверів VirtIO (приклад: ISO вже завантажений)
cr0x@server:~$ qm set 120 --ide2 local:iso/virtio-win.iso,media=cdrom
update VM 120: -ide2 local:iso/virtio-win.iso,media=cdrom
Рішення: якщо Windows завантажується, але немає мережі — це нормально. Не панікуйте і не «оптимізуйте» нічого. Спочатку встановіть драйвери.
Задача 17: Тимчасово використайте сумісну модель NIC (якщо потрібно)
cr0x@server:~$ qm set 120 --net0 e1000,bridge=vmbr0
update VM 120: -net0 e1000,bridge=vmbr0
Що це означає: ви використовуєте емульовану Intel NIC. Повільніше, але Windows розпізнає її без додаткових драйверів.
Рішення: якщо ви не можете потрапити в систему, щоб встановити VirtIO — використайте E1000, щоб тимчасово відновити мережу і завершити встановлення драйверів.
Після встановлення драйверів: перейдіть на VirtIO SCSI
VirtIO SCSI — це оптимальний варіант для більшості навантажень. Він краще підтримує TRIM/UNMAP в багатьох конфігураціях і добре протестований.
Задача 18: Додайте контролер VirtIO SCSI і перемістіть диск
cr0x@server:~$ qm set 120 --scsihw virtio-scsi-single
update VM 120: -scsihw virtio-scsi-single
cr0x@server:~$ qm set 120 --scsi0 zfspool:vm-120-disk-0
update VM 120: -scsi0 zfspool:vm-120-disk-0
cr0x@server:~$ qm set 120 --delete sata0
update VM 120: delete sata0
Рішення: видаляйте SATA-підключення лише після того, як драйвери VirtIO встановлені і ви впевнені, що наступне завантаження знайде диск.
Задача 19: Переключіть NIC на VirtIO після встановлення драйвера в Windows
cr0x@server:~$ qm set 120 --net0 virtio,bridge=vmbr0
update VM 120: -net0 virtio,bridge=vmbr0
Що це означає: Windows побачить новий NIC. Налаштування IP може не перейти автоматично, якщо воно було прив’язане до старого адаптера.
Рішення: плануйте переналаштування IP або скриптування. Для серверів зі статичними IP очікуйте короткого вікна «куди зник мій IP?».
Помилки завантаження Windows, які ви справді побачите
- INACCESSIBLE_BOOT_DEVICE (BSOD): невідповідність драйвера з контролером диска. Завантажувалося нормально на SATA, зламалося після переходу на VirtIO до встановлення драйверів.
- Зависання на обертових точках: іноді проблема з драйверами, іноді — режим прошивки, іноді — пошкоджений BCD після конвертації.
- No boot device: неправильний порядок завантаження або невідповідність UEFI/BIOS.
Жарт #2: Драйвери Windows — як парасолі: помічаєш, що вони потрібні, лише коли вже промок.
Імпорт Linux: initramfs, імена NIC та пастки файлових систем UUID
Міграції Linux зазвичай простіші за Windows — до того моменту, поки не стають складними. Основні точки відмов:
- initramfs не містить драйвер для нового дискового контролера (VirtIO), тому коренева файловa система ніколи не з’являється.
- Зміни імен мережевих інтерфейсів (ens160 на VMware стає ens18 в Proxmox) і ваша мережева конфігурація вказує на неіснуючий пристрій.
- Записи завантажувача посилаються на старі UUID, або конвертація змінила щось настільки, що kernel cmdline не може знайти root.
Задача 20: Отримайте роздільну карту диска VM з хоста Proxmox (без завантаження)
cr0x@server:~$ ls -l /dev/zvol/zfspool/vm-120-disk-0
lrwxrwxrwx 1 root root 13 Dec 28 10:12 /dev/zvol/zfspool/vm-120-disk-0 -> ../../zd0
cr0x@server:~$ partprobe /dev/zd0 && lsblk -f /dev/zd0
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
zd0
├─zd0p1 vfat FAT32 1A2B-3C4D
└─zd0p2 ext4 1.0 11111111-2222-3333-4444-555555555555
Що це означає: ймовірно UEFI (vfat ESP) плюс ext4 як корінь. Це підкріплює ваше попереднє рішення щодо прошивки.
Рішення: якщо ви очікували BIOS/MBR, але бачите ESP — переключіть VM на OVMF і додайте efidisk.
Задача 21: Якщо Linux завантажується, але немає мережі — знайдіть нову назву NIC
cr0x@server:~$ qm guest exec 120 -- ip -br a
{
"exitcode": 0,
"out-data": "lo UNKNOWN 127.0.0.1/8 ::1/128\nens18 DOWN \n",
"err-data": ""
}
Що це означає: гість бачить ens18, але він вимкнений/не налаштований.
Рішення: оновіть ваш netplan/systemd-networkd/ifcfg-скрипти, щоб вони посилалися на нову назву інтерфейсу, або використайте MAC-базоване зіставлення.
Задача 22: Перевірте, чи гість бачить диск як VirtIO після перемикання контролерів
cr0x@server:~$ qm guest exec 120 -- lsblk
{
"exitcode": 0,
"out-data": "NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS\nvda 252:0 0 40G 0 disk \nvda1 252:1 0 512M 0 part /boot/efi\nvda2 252:2 0 39.5G 0 part /\n",
"err-data": ""
}
Що це означає: диск з’являється як /dev/vda (VirtIO). Добре.
Рішення: якщо у вашому /etc/fstab використовується /dev/sda2 замість UUID — виправте це перед наступним перезавантаженням.
Задача 23: Перевірте, чи initramfs містить модулі VirtIO (всередині гостя)
cr0x@server:~$ qm guest exec 120 -- bash -lc 'lsinitramfs /boot/initrd.img-$(uname -r) | grep -E "virtio|vda|scsi" | head'
{
"exitcode": 0,
"out-data": "usr/lib/modules/6.5.0-28-generic/kernel/drivers/block/virtio_blk.ko\nusr/lib/modules/6.5.0-28-generic/kernel/drivers/scsi/virtio_scsi.ko\n",
"err-data": ""
}
Рішення: якщо модулі VirtIO відсутні, перебудуйте initramfs перед тим, як остаточно перемикати контролери (update-initramfs -u на Debian/Ubuntu, dracut -f на RHEL-подібних).
Маппінг NIC: від vSwitch до Linux-бриджів
Мережі ESXi — це portgroup на vSwitch (стандартному або розподіленому). Мережі Proxmox — це Linux-бриджі (часто vmbr0) і опційне VLAN-тегування. Підступ у тому, що «той самий VLAN ID» ≠ «та сама підключеність», якщо upstream trunking або VLAN-aware налаштування бриджа відрізняються.
Сплануйте маппінг свідомо
- ESXi portgroup VLAN 0/none → Proxmox bridge без тегування на тому ж фізичному сегменті.
- ESXi portgroup VLAN X → Proxmox NIC в тегованому VLAN X (
tag=X) на VLAN-aware bridge, або окремий підінтерфейс/бридж. - Кілька NIC → зіставте кожен із правильним bridge; не «кидати все на vmbr0», якщо ви не хочете ненавмисного латерального руху.
Задача 24: Покажіть, чи bridge Proxmox підтримує VLAN (на хості)
cr0x@server:~$ grep -A4 -B2 -n "vmbr0" /etc/network/interfaces
7:auto vmbr0
8:iface vmbr0 inet static
9: address 10.10.10.5/24
10: gateway 10.10.10.1
11: bridge-ports eno1
12: bridge-stp off
13: bridge-fd 0
14: bridge-vlan-aware yes
Що це означає: VLAN-aware bridge. Можна тегувати NIC гостя без додаткових Linux VLAN-інтерфейсів.
Рішення: якщо bridge-vlan-aware не ввімкнено, але потрібні теги — або увімкніть його (обережно), або побудуйте альтернативний дизайн. Не робіть цього на продакшн-хості під час робочого дня.
Задача 25: Встановіть тегований VLAN на NIC VM
cr0x@server:~$ qm set 120 --net0 virtio,bridge=vmbr0,tag=30
update VM 120: -net0 virtio,bridge=vmbr0,tag=30
Рішення: якщо гість досі не досягає шлюзу — підтвердьте, що upstream комутатор trunk-ить VLAN 30 і що host bridge підключений до правильної фізичної інтерфейсу.
Швидка діагностика: план дій
Коли імпортована VM «не працює», треба швидко знайти вузьке місце. Ось порядок, який економить час.
Перш за все: Чи завантажується, і яку точну помилку ви бачите?
- No bootable device / переходить в UEFI shell → невірний режим прошивки або порядок завантаження, або диск не приєднано.
- GRUB rescue / kernel panic: unable to mount root → невідповідність контролера/драйвера диска або mismatch fstab/UUID root.
- Windows BSOD INACCESSIBLE_BOOT_DEVICE → диск завантаження на контролері, для якого немає драйвера.
По-друге: Чи присутній диск і де саме?
Перевірте на хості Proxmox: чи диск імпортовано коректно і чи приєднано до VM на потрібній шині?
cr0x@server:~$ qm config 120 | egrep "boot|bios|efidisk|scsi|sata|ide"
bios: ovmf
boot: order=scsi0
efidisk0: zfspool:vm-120-disk-1,pre-enrolled-keys=1,size=4M
ide2: local:iso/virtio-win.iso,media=cdrom
scsi0: zfspool:vm-120-disk-0
scsihw: virtio-scsi-single
Рішення: якщо диск на невірній шині (наприклад, ви хотіли SATA для першого завантаження) — виправте це перед тим, як лізти всередину гостя.
По-третє: Мережа зламана або просто змінилося ім’я NIC?
- Гість завантажується, але немає ping → ймовірно невірний VLAN/bridge або відсутні драйвери/перейменування NIC.
- Ping працює, але сервіси недоступні → проблема додатку, фаєрвол або змінена IP-конфігурація.
По-четверте: Проблема з продуктивністю чи хост насичений?
Не налаштовуйте VM, поки не зрозумієте, чи саме хост — вузьке місце.
cr0x@server:~$ pvesh get /nodes/$(hostname)/status | egrep '"cpu"|mem|swap'
"cpu": 0.23,
"memory": {
"free": 5826394112,
"total": 34359738368,
"used": 28533344256
},
"swap": {
"free": 8589934592,
"total": 8589934592,
"used": 0
}
Рішення: якщо пам’ять на межі або CPU завантажено — «повільна VM» може бути через перевантажений хост. Виправте платформу перш за все.
Поширені помилки: симптом → корінь → виправлення
1) Симптом: «No bootable device» після імпорту
Корінь: невідповідність прошивки (UEFI vs BIOS) або неправильний порядок завантаження, або диск не приєднано до жодної шини.
Виправлення: підтвердіть прошивку в VMX, потім підберіть відповідні налаштування в Proxmox (--bios seabios або --bios ovmf + efidisk). Явно встановіть порядок завантаження.
2) Симптом: Windows BSOD INACCESSIBLE_BOOT_DEVICE
Корінь: ви приєднали завантажувальний диск на VirtIO SCSI/Block до того, як Windows мав драйвер VirtIO.
Виправлення: поверніть шину диска на SATA, завантажтеся, встановіть драйвери VirtIO, потім переключіться назад на VirtIO SCSI.
3) Симптом: Linux падає в initramfs або kernel panic «unable to mount root»
Корінь: initramfs не містить модулів VirtIO, або root= посилається на ім’я пристрою, яке змінилося (sda → vda), або fstab використовує шляхи пристроїв.
Виправлення: завантажтеся через SATA тимчасово, перебудуйте initramfs, оновіть fstab на UUID, потім переключіться на VirtIO.
4) Симптом: VM завантажується, але немає мережі
Корінь: зміни моделі NIC і відсутній драйвер (Windows) або змінилася назва інтерфейсу (Linux), або неправильне VLAN/bridge.
Виправлення: тимчасово використайте E1000 на Windows для відновлення доступу; для Linux оновіть мережеві налаштування під нове ім’я NIC. Перевірте bridge і VLAN на хості.
5) Симптом: Мережа працює, але служби недоступні зовні
Корінь: профіль фаєрвола змінився, Windows вважає мережу «Public», або IP прив’язаний до прихованого/старого адаптера.
Виправлення: прив’яжіть IP до активного адаптера, перевірте профіль Windows firewall, маршрути і відкриті сокети.
6) Симптом: Продуктивність диска жахлива після імпорту
Корінь: ви залишили емульований контролер (IDE/SATA) або використали qcow2 на сховищі з невідповідною поведінкою copy-on-write, або хост I/O завантажений.
Виправлення: перейдіть на VirtIO SCSI і ввімкніть iothreads там, де потрібно; надавайте перевагу raw на ZFS/LVM-thin; спочатку перевірте латентність хоста та здоров’я сховища.
7) Симптом: Дрейф часу або дивні стрибки годинника
Корінь: зміни в інструментах гостя (видалено VMware tools, не встановлено QEMU guest agent), невірне джерело синхронізації часу, або Windows time service переосмислює апарат.
Виправлення: встановіть і ввімкніть QEMU guest agent; налаштуйте NTP/chrony/systemd-timesyncd; перевірте Windows time service і доменну ієрархію часу.
8) Симптом: VM не стартує, Proxmox повідомляє про lock або помилки конфігу
Корінь: залишений лок, сховище недоступне, неправильний ID тому або погані редагування конфігу.
Виправлення: перевірте qm config, підтвердіть статус сховища, знімайте lock лише коли впевнені, що нічого не працює.
cr0x@server:~$ qm unlock 120
unlock VM 120
Контрольні списки / покроковий план
Контрольний список A: Перш ніж починати
- Підтвердіть вікно обслуговування і план відкату (залиште оригінальну VM вимкненою, але цілою).
- Запишіть ESXi VMX: прошивка, контролер диска, модель NIC, кількість дисків і MAC-адреси.
- Запишіть IP-адреси, маршрути та вимоги до VLAN.
- Переконайтеся, що цільове сховище Proxmox має місце і підтримує потрібні функції (снапшоти/реплікацію).
Контрольний список B: Експорт диска і конвертація
- Вимкніть VM (рекомендовано).
- Скопіюйте VMDK дескриптор і extents (або експортуйте OVA).
- Проінспектуйте дескриптор: single vs multi-extent, нотатки про адаптер.
- Конвертуйте за допомогою
qemu-imgу raw (або qcow2, якщо потрібно file-based сховище). - Підтвердіть за допомогою
qemu-img info.
Контрольний список C: Перше завантаження в Proxmox (стабільність першочергово)
- Створіть VM з консервативними налаштуваннями (SATA диск, E1000 NIC для Windows).
- Підберіть прошивку (OVMF vs SeaBIOS).
- Явно встановіть порядок завантаження.
- Завантажтеся і підтвердіть, що ОС піднімається.
- Виправте мережу всередині гостя, якщо змінилося ім’я/модель NIC.
Контрольний список D: Проходження продуктивності (після стабільного завантаження)
- Встановіть QEMU guest agent.
- Встановіть драйвери VirtIO (Windows).
- Переключіть диск на VirtIO SCSI і NIC на VirtIO.
- Перезавантажте і перевірте диск + мережу + додаток.
- Зробіть бекап Proxmox і/або снапшот лише після валідації.
Задача 26: Увімкніть QEMU guest agent у конфігурації Proxmox
cr0x@server:~$ qm set 120 --agent enabled=1
update VM 120: -agent enabled=1
Рішення: якщо ви покладаєтесь на коректні вимкнення, звіти IP та скриптовані дії — увімкніть агент і встановіть його всередині гостя.
Задача 27: Підтвердіть, що агент гостя відповідає
cr0x@server:~$ qm guest ping 120
qemu-agent is running
Рішення: якщо він не працює, не звинувачуйте автоматично Proxmox — встановіть/запустіть агент в гості і перевірте firewall/SELinux, якщо потрібно.
Задача 28: Зробіть бекап після валідації
cr0x@server:~$ vzdump 120 --storage local --mode snapshot --compress zstd
INFO: starting new backup job: vzdump 120 --storage local --mode snapshot --compress zstd
INFO: VM 120: starting backup
INFO: VM 120: backup finished
INFO: Finished Backup of VM 120 (00:02:41)
Що це означає: тепер у вас є Proxmox-нативний бекап, який можна швидко відновити, якщо наступна зміна зламає завантаження.
Рішення: зробіть це перед тим, як «тюнінгувати». Бекапи дешевші за героїчні заходи.
Три корпоративні міні-історії з практики
Міні-історія 1: Інцидент через неправильне припущення
Вони мігрували Windows file server з ESXi в Proxmox під час рутинного оновлення гіпервізора. Інженер, який робив роботу, вже успішно переносив кілька Linux-машин і припустив, що Windows поводитиметься подібно: «Приєднаю диск як VirtIO, це швидше, драйвери поставимо пізніше.» Це припущення має дуже конкретний код BSOD.
VM піднялася, враз отримала INACCESSIBLE_BOOT_DEVICE і застрягла в циклах автоматичного відновлення. Команда пробувала класичний набір прийомів: зміна типу CPU, переключення machine type, навіть «можливо це Secure Boot». Кожен перезапуск робив ситуацію голоснішою, а не кращою. Тим часом відділ надсилав скріншоти відсутніх шаред-дисків, наче це новий арт-проєкт.
Виправлення виявилося боляче простим. Вони повернули підключення диска на SATA, успішно завантажилися, встановили драйвери VirtIO для диска і мережі з ISO і лише потім переключилися на VirtIO SCSI. Windows відновилася миттєво, бо нічого не було пошкоджено; просто бракувало драйвера при завантаженні.
Висновок постмортему не був «VirtIO поганий». Висновок: не змінюйте обладнання, критичне для завантаження, поки гість не зможе ним керувати. Міграція вже є великою зміною; не складайте на неї ще й тюнінг продуктивності під час першого завантаження.
Міні-історія 2: Оптимізація, що відбилася бумерангом
Інша команда вирішила бути кмітливою і імпортувати все в qcow2, бо «знаходити снапшоти легше», а потім зберігати ці qcow2 на copy-on-write бекенді. Це не було б неправильним — доки ви не робите це в масштабі з write-heavy навантаженнями і ніхто не моделює ампліфікацію.
Через кілька днів симптом був «Proxmox повільний». Латентність дисків у VM зросла. Бекапи почали тривати довше і накладатися з робочим часом. Люди почали звинувачувати мережу, бо це завжди модно.
Насправді проблема була в багатошаровому copy-on-write у середовищі, яке вже мало снапшоти і високу зміну даних. Випадкові записи перетворилися на податковий фестиваль. Накладні витрати на метадані зросли. Хости не були зламані; архітектура була.
Вони виправили це, конвертувавши високохмарні томи в raw на відповідному бекенді і залишивши qcow2 лише там, де він мав явну операційну вигоду. Продуктивність повернулася, як і здатність припинити гадати.
Оптимізація гарна. Просто не оптимізуйте два шари одночасно і не дивуйтеся, коли фізика помітить це.
Міні-історія 3: Нудна, але правильна практика, що врятувала день
Одна організація мала міграційний runbook, який виглядав боляче консервативним. Кожна імпортована VM спочатку завантажувалась на SATA і сумісній NIC, якщо ОС була невідома. Вони одразу брали бекап після першого вдалого завантаження, а потім переходили до встановлення драйверів і конвертації до VirtIO як до другої фази.
Це було повільно. Це не було гламурно. І це запобігло неприємному простою, коли legacy Linux appliance VM добре завантажився на SATA, але впав на VirtIO, бо його vendor image мав закритий initramfs без модулів. Якби вони почали з VirtIO — мали б мертву VM і лотерею з техпідтримки.
Оскільки вони зробили бекап у «знаному доброму» стані, вони змогли швидко відкотити зміни під час експериментів з типами контролерів. Зрештою вони залишили цей appliance на SATA назавжди, прийнявши втрату продуктивності, бо навантаження VM не виправдовувало ризик.
Це справжній дорослий крок: обирати нудну надійність над теоретичною пропускною здатністю, коли бізнес-ефект не окуповує ризик.
Питання та відповіді (FAQ)
1) Чи слід конвертувати VMDK у raw чи qcow2 для Proxmox?
Для ZFS або LVM-thin я зазвичай обираю raw. Це простіше і часто швидше. Обирайте qcow2, коли потрібні file-based снапшоти/стиснення на директоріальному сховищі.
2) Чи може Proxmox імпортувати OVA напряму?
Proxmox може працювати з дисками всередині OVA, але часто ви витягатимете OVA (це tar-архів) і конвертуватимете VMDK(и) самостійно. Це дає більше контролю і менше сюрпризів.
3) Моя VM використовувала VMware PVSCSI. Що обрати в Proxmox?
Для першого завантаження використовуйте SATA, якщо ви обережні, потім переходьте на VirtIO SCSI після встановлення драйверів. PVSCSI специфічний для VMware; немає прямого «PVSCSI еквіваленту» для простого перемикання.
4) Windows завантажується на SATA, але падає на VirtIO SCSI. Чому?
Драйвер VirtIO для сховища не встановлений/не увімкнений на момент завантаження. Завантажтеся на SATA, встановіть драйвери VirtIO і потім перемикайте контролер і перезавантажуйтесь.
5) Linux завантажується, але змінилося ім’я NIC і мережа не працює. Яке чисте виправлення?
Оновіть мережеву конфігурацію відповідно до нового імені інтерфейсу, або використайте MAC-базовані правила. Уникайте хардкоджених припущень eth0; це вже пройшло.
6) Яка найпоширеніша помилка з UEFI/BIOS?
Імпорт UEFI-встановленого гостя з подальшим завантаженням через SeaBIOS (або навпаки). Підтвердіть з VMX і/або наявність EFI System Partition.
7) Чи потрібен QEMU guest agent?
Потрібен? Ні. Бажаний? Так. Він покращує поведінку вимкнення, звітування IP і автоматизацію, і зменшує кількість «чому Proxmox бреше» дискусій.
8) Імпортована Windows VM втратила статичний IP. Куди він подівся?
Windows трактує новий NIC як інший адаптер. Старий адаптер може «володіти» IP-конфігом, але бути прихованим/відключеним. Перепризначте IP активному адаптеру і приберіть застарілі NIC при потребі.
9) Чи можна назавжди залишити VM на SATA?
Так. Для легких навантажень накладні витрати SATA можуть бути незначними. Для інтенсивного I/O VirtIO SCSI варто використовувати після підтвердження стабільності.
10) Як зрозуміти, чи вузьке місце — це сховище хоста Proxmox або гість?
Почніть з метрик хоста і здоров’я сховища. Якщо хост свапить, CPU завантажений або латентність сховища висока — зміна контролера гостя не вирішить проблему.
Висновок: наступні кроки, які ви можете зробити сьогодні
Якщо ви хочете, щоб міграція була нудною (найвища похвала в опсах), робіть її в два етапи: спочатку завантажуваність, потім продуктивність. Підберіть прошивку. Приєднайте диск до консервативного контролера. Нехай він завантажиться. Потім встановіть драйвери VirtIO, переключіть шини і лише після цього святкуйте.
Конкретні кроки на сьогодні:
- Оберіть одну VM і пройдіть «workflow у стилі стабільність першочергово»: імпорт диска, завантаження на SATA, перевірка сервісів.
- Встановіть QEMU guest agent і зробіть бекап Proxmox у першій відомо-робочій точці.
- Для Windows: підмонтуйте VirtIO ISO, встановіть драйвери диска і мережі, потім переведіть на VirtIO SCSI + VirtIO NIC.
- Для Linux: перевірте, що initramfs містить модулі VirtIO, перекладіть fstab на UUID якщо потрібно, потім переключайте контролери.
- Лише після вдалого завершення: стандартизуйте шаблони і документуйте ваш маппінг NIC/VLAN, щоб наступна міграція не була археологією.