مجازی سازی و ابر

مهاجرت از VMware به Proxmox VE: Import Wizard و روش دستی

مهاجرت از VMware ESXi به Proxmox VE 9 با Import Wizard، OVF یا qm disk import؛ آماده سازی ویندوز و لینوکس، درایور VirtIO، BIOS یا UEFI و برنامه‌ی بازگشت.

نوشته‌ی تیم پیکوگاید آخرین بازبینی فنی: ۱۲ دقیقه مطالعه
در این صفحه
  1. پیش نیازها
  2. برنامه ریزی
  3. آماده سازی ماشین در VMware
  4. همه‌ی ماشین‌ها
  5. ویندوز
  6. لینوکس
  7. روش ۱: Import Wizard
  8. افزودن ESXi به عنوان storage
  9. وارد کردن ماشین
  10. Live import
  11. تنظیم‌های پیشنهادی بعد از import
  12. روش ۲: خروجی OVF و qm importovf
  13. روش ۳: کپی VMDK و qm disk import
  14. ویندوز بعد از مهاجرت: رفتن به VirtIO SCSI
  15. لینوکس بعد از مهاجرت
  16. BIOS یا UEFI
  17. چک لیست بعد از مهاجرت
  18. تست و برنامه‌ی بازگشت
  19. مشکلات رایج

سریع‌ترین روش رسمی، Import Wizard خود Proxmox VE است: هاست ESXi را به عنوان یک storage اضافه می‌کنید، Proxmox فهرست ماشین‌های آن را می‌خواند و هر ماشین را با دیسک‌ها و بیشتر تنظیم‌هایش به یک ماشین KVM تبدیل می‌کند. این ابزار در Proxmox VE 8.2 (اردیبهشت ۱۴۰۳) اضافه شد و مستندات 9.2 هنوز آن را technology preview می‌نامد. روش‌های جایگزین qm importovf و qm disk import هستند. بخش اصلی کار آماده سازی سیستم عامل مهمان است: درایور VirtIO در ویندوز، initramfs و نام کارت شبکه در لینوکس، و یکسان بودن BIOS یا UEFI با مبدأ. دلیل رایج این مهاجرت، مدل لایسنس جدید VMware بعد از Broadcom است (مقایسه‌ی VMware، Proxmox و Hyper-V).

پیش نیازها

  • Proxmox VE 8 یا بالاتر با آخرین به روزرسانی‌ها؛ این راهنما 9.2 را فرض می‌کند (نصب Proxmox VE).
  • دسترسی شبکه از Proxmox به رابط مدیریت ESXi و یک حساب مدیر روی ESXi.
  • فضای کافی روی storage مقصد.
  • بکاپ سالم از هر ماشین پیش از شروع (قاعده‌ی بکاپ ۳-۲-۱).
  • ISO درایورهای virtio-win در storage local برای ماشین‌های ویندوزی.

برنامه ریزی

برای هر ماشین این موارد را فهرست کنید: سیستم عامل و نسخه، firmware (BIOS یا EFI)، تعداد و اندازه‌ی دیسک‌ها و نوع datastore، snapshotها، vTPM و رمزنگاری، IP ثابت یا رزرو DHCP، وابستگی به ماشین‌های دیگر و زمان قطعی مجاز. محدودیت‌های Import Wizard طبق مستندات رسمی:

مورد وضعیت اقدام
ESXi 6.5 تا 8.0 آزموده شده
vCenter به عنوان مبدأ کار می‌کند، ولی ۵ تا ۱۰ برابر کندتر مستقیم به هاست ESXi وصل شوید
دیسک روی vSAN import نمی‌شود اول دیسک را به datastore دیگری منتقل کنید
دیسک رمز شده با Storage Policy import نمی‌شود policy رمزنگاری را بردارید
vTPM وضعیتش منتقل نمی‌شود BitLocker یا رمزنگاری کامل دیسک را غیرفعال کنید یا کلید بازیابی را آماده داشته باشید
snapshot import بسیار کندتر snapshotها را حذف (consolidate) کنید
datastore با نویسه‌ای مثل + در نام ممکن است کار نکند نام datastore را عوض کنید

زمان قطعی: بدون live import، سرویس از خاموش شدن ماشین روی ESXi تا پایان کپی دیسک‌ها و اولین بوت در Proxmox قطع است. این زمان به اندازه‌ی دیسک، پهنای باند شبکه و سرعت دو storage بستگی دارد؛ آن را با یک ماشین آزمایشی اندازه بگیرید.

انتقال هم‌زمان: API هاست ESXi تعداد اتصال محدودی دارد و هر دیسک در حال import حدود 1 GiB RAM (هشت بلوک 128 MiB) برای cache مصرف می‌کند. مستندات رسمی توصیه می‌کند بیش از چهار دیسک را هم‌زمان import نکنید.

آماده سازی ماشین در VMware

همه‌ی ماشین‌ها

  • تنظیم‌های شبکه (IP، mask، gateway و DNS) را یادداشت کنید.
  • برای رزرو DHCP، یا رزرو را بعداً به MAC جدید تغییر دهید یا MAC قدیمی را روی کارت شبکه‌ی ماشین در Proxmox تنظیم کنید.
  • snapshotها را حذف کنید و یک بکاپ تازه بگیرید.
  • ابزارهای VMware (VMware Tools در ویندوز، open-vm-tools در لینوکس) را پیش از مهاجرت حذف کنید؛ حذفشان بعد از انتقال ممکن است دشوار باشد.

ویندوز

  1. ISO درایورهای virtio-win را به ماشین وصل و virtio-win-gt-x64.msi را اجرا کنید تا درایورهای VirtIO از قبل نصب باشند. ویکی Proxmox در شهریور ۱۴۰۵ نسخه‌ی 0.1.271 را بدون مشکل شناخته شده می‌داند؛ 0.1.302 هنوز در حال آزمایش است.
  2. اگر IP ثابت دارید، آن را یادداشت و در صورت امکان تنظیم ثابت را بردارید. بعد از مهاجرت کارت شبکه عوض می‌شود و ویندوز برای تنظیم همان IP روی کارت جدید هشدار می‌دهد، حتی اگر کارت قبلی دیگر وجود نداشته باشد.
  3. اگر BitLocker کلید را در vTPM نگه می‌دارد، رمزنگاری را غیرفعال کنید یا کلید بازیابی را جدا نگه دارید.
  4. ماشین را کامل خاموش کنید.

لینوکس

ماژول‌های VirtIO باید پیش از مهاجرت در initramfs باشند، وگرنه ماشین روی کنترلر VirtIO SCSI بوت نمی‌شود. اول ببینید درایورها داخل kernel هستند یا ماژول:

grep VIRTIO /boot/config-$(uname -r)

y یعنی درایور داخل kernel است. m یعنی ماژول است و باید در initramfs باشد. در Debian و Ubuntu:

lsinitramfs /boot/initrd.img-$(uname -r) | grep virtio
printf '%s\n' virtio virtio_pci virtio_blk virtio_net virtio_ring virtio_scsi | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u -k all

در RHEL، Rocky و Alma:

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
sudo dracut -f /boot/initramfs-$(uname -r).img $(uname -r) --add-drivers "virtio virtio_pci virtio_blk virtio_net virtio_ring virtio_scsi"

در /etc/fstab دیسک‌ها باید با UUID یا LABEL mount شوند، نه با نامی مثل /dev/sdb1؛ نام دستگاه‌ها با تغییر کنترلر ممکن است عوض شود. blkid مقدار UUID را نشان می‌دهد.

روش ۱: Import Wizard

افزودن ESXi به عنوان storage

در Datacenter → Storage → Add گزینه‌ی ESXi را انتخاب کنید:

فیلد مقدار
ID نام دلخواه، مثلاً esxi01
Server IP یا FQDN هاست ESXi، مثلاً 192.0.2.20
Username و Password حساب مدیر ESXi
Skip Certificate Verification وقتی ESXi گواهی self-signed دارد و CA آن را به trust store سرور اضافه نکرده‌اید

وارد کردن ماشین

  1. storage ESXi را در درخت سمت چپ انتخاب کنید تا فهرست ماشین‌ها نمایش داده شود.
  2. آماده سازی را تمام و ماشین را روی ESXi خاموش کنید.
  3. ماشین را انتخاب و Import را بزنید.
  4. VM ID، storage مقصد دیسک‌ها و bridge شبکه (مثلاً vmbr0) را انتخاب کنید.
  5. در تب Advanced می‌توانید برای هر دیسک storage جدا، برای هر کارت شبکه مدل و bridge جدا و برای CD-ROM یک ISO تعیین کنید، یا بعضی دیسک‌ها و کارت‌ها را از import کنار بگذارید.
  6. در تب Resulting Config تنظیم نهایی را ببینید؛ به خصوص bios، bus دیسک‌ها و مدل کارت شبکه.
  7. Import را شروع کنید و پیشرفت را در task log دنبال کنید.

Live import

با گزینه‌ی Live Import ماشین در Proxmox همان ابتدای کار روشن می‌شود: داده‌هایی که سیستم عامل برای بوت لازم دارد زودتر و بقیه در پس زمینه کپی می‌شود. ماشین روی ESXi همچنان باید خاموش باشد، پس قطعی کوتاه‌تر می‌شود ولی صفر نیست. در ابتدای کار I/O کمی کندتر است.

تنظیم‌های پیشنهادی بعد از import

بخش پیشنهاد رسمی
CPU host اگر همه‌ی نودها پردازنده‌ی یکسان دارند؛ وگرنه یک مدل x86-64-v*
دیسک bus از نوع SCSI با کنترلر VirtIO SCSI single؛ Discard و IO thread روشن
شبکه VirtIO (ویندوز درایور NetKVM لازم دارد)
حافظه Ballooning Device روشن
Guest agent نصب در مهمان و روشن کردن در Options
qm set 120 --cpu x86-64-v2-AES --scsihw virtio-scsi-single

روش ۲: خروجی OVF و qm importovf

اگر Import Wizard به ESXi دسترسی ندارد، ماشین را با ovftool (نسخه‌ی Linux 64-bit از سایت VMware) به OVF تبدیل کنید. این ابزار را می‌توانید روی خود سرور Proxmox اجرا کنید؛ برای باز کردن zip آن apt install unzip لازم است.

./ovftool vi://root@192.0.2.20/Server /mnt/export/

بعد در پوشه‌ای که Server.ovf و فایل‌های vmdk قرار دارند:

qm importovf 120 Server.ovf local-zfs --dryrun
qm importovf 120 Server.ovf local-zfs

--dryrun فقط تنظیم‌های خوانده شده را نشان می‌دهد و ماشینی نمی‌سازد. qm importovf پردازنده، RAM و دیسک‌ها را از OVF می‌خواند، ولی کارت شبکه نمی‌سازد؛ آن را دستی اضافه کنید. روی storage فایلی، --format قالب دیسک را تعیین می‌کند (raw، qcow2 یا vmdk). برای ویندوز bus دیسک را از SCSI به SATA ببرید: دیسک را Detach کنید و روی دیسک Unused با Edit bus را SATA بگذارید. فایل OVA یا OVF را از رابط وب هم می‌توانید وارد کنید، اگر روی storage فایلی با content type از نوع import باشد.

روش ۳: کپی VMDK و qm disk import

Proxmox باید به فایل‌های *.vmdk و *-flat.vmdk دسترسی داشته باشد. ساده‌ترین راه یک share مشترک (مثلاً NFS) است که هم ESXi و هم Proxmox به آن وصل‌اند. در Proxmox یک ماشین با تنظیم‌های مورد نظر بسازید، دیسک پیش فرضش را حذف کنید و دیسک VMware را import کنید:

cd /mnt/pve/nfs-share/Server
qm disk import 121 Server.vmdk local-zfs --target-disk sata0
qm set 121 --boot order=sata0

برای لینوکس scsi0 و برای ویندوزی که هنوز درایور VirtIO ندارد sata0 را بدهید. بدون --target-disk دیسک به صورت unused0 اضافه می‌شود و باید آن را در Hardware با Edit به ماشین وصل کنید.

روش Attach Disk & Move Disk در ویکی رسمی ماشین را مستقیم از vmdk روی share بوت و دیسک را در حال کار به storage نهایی منتقل می‌کند؛ قطعی کمتری دارد، ولی مراحلش بیشتر است.

ویندوز بعد از مهاجرت: رفتن به VirtIO SCSI

ویندوز فقط وقتی از VirtIO SCSI بوت می‌شود که قبلاً یک دیسک روی این کنترلر دیده باشد. اگر دیسک بوت را مستقیم روی VirtIO SCSI ببرید، صفحه‌ی آبی INACCESSIBLE BOOT DEVICE ظاهر می‌شود. روش رسمی با یک دیسک موقت:

  1. ماشین را با دیسک بوت روی SATA (یا IDE) روشن کنید. اگر درایور NetKVM هنوز نصب نیست، کارت شبکه را موقتاً Intel E1000 بگذارید.
  2. ISO virtio-win را به CD-ROM وصل کنید و اگر درایورها را از قبل نصب نکرده‌اید، virtio-win-gt-x64 را اجرا کنید. virtio-win-guest-tools هم QEMU Guest Agent را نصب می‌کند.
  3. ماشین را خاموش کنید، SCSI Controller را VirtIO SCSI single بگذارید، یک دیسک موقت 1 GB با bus از نوع SCSI اضافه و ماشین را روشن کنید. ویندوز دیسک جدید را می‌بیند؛ اگر درایورش را خودکار نصب نکرد، در Device Manager آن را از CD نصب کنید.
  4. ماشین را خاموش کنید. دیسک موقت را Detach و Remove کنید. دیسک بوت را Detach و دوباره با bus از نوع SCSI وصل کنید.
  5. در Options → Boot Order دیسک بوت را اول بگذارید و ماشین را روشن کنید. اگر بوت نشد، دیسک را به SATA برگردانید و مراحل را تکرار کنید. اگر چند دیسک را منتقل کرده‌اید، شاید لازم باشد آن‌ها را در Disk Management به حالت Online ببرید.
  6. کارت شبکه را VirtIO کنید و IP را روی کارت جدید تنظیم کنید.
  7. در Options گزینه‌ی QEMU Guest Agent را روشن کنید، ماشین را کامل خاموش و روشن کنید و سرویس را بررسی کنید:
Get-Service QEMU-GA

لینوکس بعد از مهاجرت

  • بوت نمی‌شود و به shell initramfs یا dracut می‌رود: ماژول virtio_scsi در initramfs نیست. ماشین را از ورودی rescue بوت کنید (initramfs آن معمولاً درایورهای بیشتری دارد)، یا دیسک را موقتاً روی SATA ببرید، initramfs را طبق بخش آماده سازی بسازید و به SCSI برگردید.
  • نام کارت شبکه عوض شده: نامی مثل ens192 یا ens160 در VMware معمولاً در Proxmox به ens18 تبدیل می‌شود. نام جدید را ببینید و در تنظیمات شبکه جایگزین کنید:
ip -br link
sudo sed -i 's/ens192/ens18/g' /etc/netplan/*.yaml    # Ubuntu با netplan
sudo netplan apply

در Debian همین تغییر را در /etc/network/interfaces بدهید و systemctl restart networking را اجرا کنید.

  • Guest agent: بسته‌ی qemu-guest-agent را نصب و سرویسش را فعال کنید. از سرور Proxmox با qm agent 121 ping ارتباط را بسنجید.

BIOS یا UEFI

firmware ماشین در Proxmox باید با مبدأ یکی باشد: ماشین Legacy BIOS با SeaBIOS و ماشین EFI با OVMF (UEFI). OVMF به یک EFI Disk نیاز دارد تا تنظیم‌های بوت ذخیره بمانند. نوع firmware ماشین را در تنظیمات آن روی ESXi، بخش VM Options → Boot Options، ببینید.

بعضی سیستم عامل‌ها در UEFI فقط مسیر بوت اختصاصی خودشان را ثبت می‌کنند، نه مسیر پیش فرض /EFI/BOOT/BOOTX64.EFI. اگر ماشین با OVMF به EFI Shell رفت، هنگام بوت یک بار Esc بزنید، EFI Firmware Setup → Boot Maintenance Manager → Boot Options → Add Boot Option را باز کنید و فایل بوت را انتخاب کنید؛ مثلاً EFI/debian/grubx64.efi.

چک لیست بعد از مهاجرت

  • ماشین بوت می‌شود و سرویس‌ها بالا هستند.
  • IP، gateway و DNS درست است و کاربران به سرویس وصل می‌شوند.
  • guest agent کار می‌کند و IP ماشین در Summary نمایش داده می‌شود.
  • ISO درایور از CD-ROM جدا و دیسک موقت حذف شده است.
  • فعال سازی ویندوز و لایسنس نرم افزارهای وابسته به سخت افزار بررسی شده است.
  • job بکاپ ماشین در Proxmox ساخته و یک restore آزمایشی انجام شده است.
  • مانیتورینگ و هشدارها به ماشین جدید اشاره می‌کنند.

تست و برنامه‌ی بازگشت

  • اول یک ماشین آزمایشی، بعد ماشین‌های غیرحیاتی و در آخر سرویس‌های اصلی را منتقل کنید. زمان هر انتقال را ثبت کنید تا پنجره‌ی قطعی ماشین‌های بعدی را دقیق‌تر تعیین کنید.
  • ماشین مبدأ را روی ESXi خاموش و دست نخورده نگه دارید تا دوره‌ی بررسی تمام شود.
  • بازگشت: ماشین را در Proxmox خاموش و ماشین مبدأ را روی ESXi روشن کنید. داده‌ای که بعد از مهاجرت روی ماشین جدید نوشته شده روی ماشین قدیمی نیست؛ اگر لازم است، آن را دستی منتقل کنید.
  • ماشین مبدأ را فقط بعد از پایان دوره‌ی بررسی و بکاپ گرفتن از ماشین جدید حذف کنید.

مشکلات رایج

  • فهرست ماشین‌ها در storage ESXi خالی است یا خطای اتصال می‌دهد: گواهی ESXi self-signed است؛ Skip Certificate Verification را فعال کنید و نام کاربری و رمز را بررسی کنید.
  • خطای 503 Service Unavailable یا کند شدن import: API هاست ESXi به محدودیت نشست رسیده است. importها را پشت سر هم اجرا کنید. در ESXi 7.0 می‌توانید Config.HostAgent.vmacore.soap.maxSessionCount را در Host → Manage → System → Advanced Settings بزرگ‌تر یا 0 (بدون محدودیت) کنید.
  • شبکه وصل نمی‌شود: نام کارت شبکه در لینوکس عوض شده، درایور NetKVM در ویندوز نصب نیست، یا رزرو DHCP هنوز به MAC قدیمی اشاره می‌کند.

منابع

  1. Proxmox VE Wiki — Migrate to Proxmox VE pve.proxmox.com
  2. Proxmox VE Administration Guide — QEMU/KVM Virtual Machines (Importing Virtual Machines) pve.proxmox.com
  3. Proxmox VE — qm(1) manual page pve.proxmox.com
  4. Proxmox VE Wiki — Windows VirtIO Drivers pve.proxmox.com
  5. Proxmox VE Wiki — Paravirtualized Block Drivers for Windows pve.proxmox.com
  6. Proxmox VE Wiki — Paravirtualized Drivers for Linux pve.proxmox.com
  7. Proxmox VE Wiki — OVMF/UEFI Boot Entries pve.proxmox.com
  8. Proxmox VE Roadmap — release notes 8.2 and 9.2 pve.proxmox.com