คำตอบสั้น ๆ: ทำ P2V ย้ายเซิร์ฟเวอร์จริงในออฟฟิศขึ้นคลาวด์ สำรวจเครื่องเดิม เลือกแปลงทั้งเครื่องหรือสร้างใหม่ ใช้ Disk2vhd กับ virt-v2v วาง Cutover และทางถอยกลับ
คู่มือนี้อธิบาย P2V ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
P2V (Physical to Virtual) คือการย้ายเซิร์ฟเวอร์ที่เป็นเครื่องจริงในออฟฟิศ เช่น File Server, เครื่องโปรแกรมบัญชี หรือเครื่องฐานข้อมูลที่ตั้งอยู่ใต้โต๊ะ ให้ไปทำงานเป็นเครื่องเสมือนบนคลาวด์ ทำได้สองแนวทาง คือแปลงทั้งเครื่องเป็นไฟล์ดิสก์ (Image) แล้วนำไปบูตบนคลาวด์ หรือสร้างเครื่องใหม่บนคลาวด์แล้วย้ายเฉพาะข้อมูลและโปรแกรม งาน P2V ที่ราบรื่นไม่ได้อยู่ที่เครื่องมือ แต่อยู่ที่การสำรวจเครื่องเดิมให้ครบและการวางช่วงสลับระบบ (Cutover) ให้สั้น
คู่มือนี้เหมาะกับผู้ดูแลไอทีของบริษัทที่ต้องย้ายเซิร์ฟเวอร์ในออฟฟิศขึ้นคลาวด์โดยหยุดงานให้น้อยที่สุด เมื่อทำครบ คุณจะมีรายการสิ่งที่เครื่องเดิมทำอยู่ทั้งหมด เลือกได้ว่าเครื่องไหนควรแปลงทั้งเครื่องหรือสร้างใหม่ ทดลองแปลงและบูตเครื่องทดสอบได้ มีแผน Cutover ที่หยุดงานไม่กี่ชั่วโมงนอกเวลาทำการ และมีทางถอยกลับเมื่อมีปัญหา
สิ่งที่ต้องเตรียม
- สิทธิ์ Administrator หรือ root บนเครื่องเดิม และรายชื่อผู้ใช้หลักของแต่ละระบบที่จะช่วยทดสอบหลังย้าย
- ข้อมูลไลเซนส์ของ Windows Server, SQL Server และโปรแกรมที่รันอยู่ โดยเฉพาะไลเซนส์แบบ OEM ที่มากับเครื่องและไลเซนส์ที่ผูกกับ USB Dongle หรือ MAC Address
- ช่องทางเชื่อมออฟฟิศกับคลาวด์ระหว่างย้าย เช่น VPN และความเร็วอัปโหลดของอินเทอร์เน็ตออฟฟิศ เพราะจะกำหนดว่าส่งไฟล์ Image ขนาดหลายร้อย GB ได้ในกี่ชั่วโมง
- ดิสก์ภายนอกหรือ Network Share ที่มีพื้นที่ว่างมากกว่าข้อมูลที่ใช้จริงบนเครื่อง สำหรับเก็บไฟล์ Image
- Backup ล่าสุดของเครื่องเดิมที่ทดลองกู้ได้แล้ว และช่วงเวลาหยุดระบบที่ผู้บริหารอนุมัติ
ขั้นตอนที่ 1: สำรวจทุกอย่างที่เครื่องเดิมทำอยู่ก่อนเริ่ม P2V
ปัญหาหลังย้ายส่วนใหญ่ไม่ได้มาจากเครื่องบูตไม่ขึ้น แต่มาจากงานเล็ก ๆ ที่ไม่มีใครจดไว้ เช่น สคริปต์ส่งไฟล์ให้ธนาคารตอนตีสอง หรือเครื่องพิมพ์ที่สั่งงานผ่านเซิร์ฟเวอร์ ให้เก็บข้อมูลด้วยคำสั่งต่อไปนี้แล้วบันทึกผลไว้ในเอกสาร P2V ของเครื่องนั้น
Windows Server (PowerShell แบบ Administrator)
systeminfo | Select-String 'OS Name','OS Version','Total Physical Memory'
Get-Service | Where-Object Status -eq 'Running' | Sort-Object DisplayName
Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' -and $_.TaskPath -notlike '\Microsoft\*' }
Get-NetTCPConnection -State Listen | Sort-Object LocalPort -Unique | Select-Object LocalAddress, LocalPort, OwningProcess
Get-SmbShare
Get-Volume
manage-bde -status
Linux
cat /etc/os-release
systemctl list-units --type=service --state=running
sudo ss -tlnp
sudo crontab -l; ls /etc/cron.d /etc/cron.daily
df -hT; lsblk -f
นอกจากผลคำสั่ง ให้ตรวจสิ่งที่คำสั่งมองไม่เห็นด้วย ได้แก่ อุปกรณ์ USB ที่เสียบอยู่ (Dongle ไลเซนส์ เครื่องสแกนนิ้ว) เครื่องอื่นในออฟฟิศที่อ้างถึงเซิร์ฟเวอร์ด้วย IP ตรง ๆ เช่น Mapped Drive \\192.168.1.10\share หรือ ODBC DSN ในเครื่องพนักงาน และค่าในไฟล์ hosts อุปกรณ์ USB ย้ายตามขึ้นคลาวด์ไม่ได้ ต้องคุยกับผู้ขายโปรแกรมเรื่องไลเซนส์แบบอื่นก่อนเริ่มงาน
ขั้นตอนที่ 2: เลือกระหว่างแปลงทั้งเครื่องกับสร้างใหม่
ใช้ผลสำรวจตัดสินทีละเครื่อง ไม่จำเป็นต้องทำ P2V ทุกเครื่องด้วยวิธีเดียวกัน แนวทางที่ใช้ได้กับงานส่วนใหญ่มีดังนี้
- สร้างใหม่แล้วย้ายข้อมูล เหมาะกับ Linux, File Server, เว็บ และฐานข้อมูลที่ Backup/Restore ได้ ได้ระบบปฏิบัติการสะอาด รุ่นที่ยังได้รับอัปเดต และไม่พาไดรเวอร์ของฮาร์ดแวร์เดิมติดไป ใช้คู่มือ ย้าย Linux Server ด้วย rsync หรือ ย้าย File Server ด้วย Robocopy
- P2V แบบ Image ทั้งเครื่อง เหมาะกับเครื่องที่ติดตั้งโปรแกรมเฉพาะซึ่งหาตัวติดตั้งไม่ได้แล้ว หรือผู้ขายเลิกสนับสนุน ข้อเสียคือพาปัญหาเดิมทั้งหมดติดไปด้วย และต้องจัดการไดรเวอร์ให้บูตบนเครื่องเสมือนได้
เรื่องไลเซนส์ต้องตรวจทุกครั้ง ไลเซนส์ Windows แบบ OEM ผูกกับเครื่องที่ซื้อมา โดยทั่วไปย้ายไปเครื่องอื่นไม่ได้ ถ้าเลือกสร้างใหม่บนคลาวด์มักใช้ไลเซนส์ที่ผู้ให้บริการจัดให้ ส่วนการนำ Image ไปใช้ต่อ ให้ยืนยันสิทธิ์กับผู้ขายไลเซนส์ก่อน ถ้าเครื่องเดิมเป็น VM บน VMware อยู่แล้ว ไม่ต้องทำ P2V ให้ใช้วิธีใน VMware VM Export แทน
ขั้นตอนที่ 3: สร้าง Image สำหรับ P2V จากเครื่องที่ยังทำงานอยู่
สำหรับ Windows ใช้ Disk2vhd ของ Microsoft Sysinternals ซึ่งใช้ Volume Shadow Copy สร้างภาพดิสก์ ณ เวลาหนึ่งได้โดยไม่ต้องปิดเครื่อง เหมาะกับการทำ Image ทดลองก่อนวันจริง
- ดาวน์โหลด Disk2vhd จาก หน้า Disk2vhd บน Microsoft Learn แล้วเปิด
disk2vhd64.exeด้วยสิทธิ์ Administrator - เลือก Use Vhdx และ Use Volume Shadow Copy
- ติ๊กทุก Volume ของดิสก์ระบบ รวมถึงพาร์ทิชันขนาดเล็กอย่าง System Reserved หรือ EFI ที่ใช้บูต
- ตั้ง VHD File name ให้อยู่บนดิสก์ภายนอกหรือ Network Share เช่น
E:\p2v\file-01.vhdxแล้วคลิก Create
ข้อจำกัดที่ต้องรู้ตามเอกสารของ Disk2vhd คือ แปลง Volume ที่เปิด BitLocker ไม่ได้ ต้องปิด BitLocker และรอถอดรหัสเสร็จก่อน และห้ามนำไฟล์ VHDX ไปเชื่อมต่อบนเครื่องต้นทางเอง เพราะ Windows จะเปลี่ยน Disk Signature จนเครื่องเสมือนหาดิสก์บูตไม่เจอ
สำหรับ Linux แนะนำแนวทางสร้างใหม่มากกว่า P2V แบบ Image ถ้าจำเป็นต้องทำ Image จริง ให้บูตเครื่องจาก USB แบบ Live หรือ Clonezilla เพื่อคัดลอกดิสก์ขณะที่ระบบไฟล์ไม่ได้ถูกใช้งาน การ dd ดิสก์ขณะระบบทำงานได้ไฟล์ที่ข้อมูลไม่สอดคล้องกัน โดยเฉพาะฐานข้อมูล
ขั้นตอนที่ 4: แปลง Image ของ P2V ให้บูตบนคลาวด์ได้
จุดที่ P2V ต่างจากการย้าย VM คือเรื่องไดรเวอร์ เครื่องจริงใช้ไดรเวอร์ดิสก์และการ์ดเครือข่ายของผู้ผลิตฮาร์ดแวร์ แต่คลาวด์ที่ใช้ KVM อย่าง OpenStack หรือ Proxmox มักใช้ไดรเวอร์ virtio ถ้า Windows ไม่มีไดรเวอร์ดิสก์ virtio ตอนบูต จะหยุดที่หน้าจอ INACCESSIBLE_BOOT_DEVICE เครื่องมือที่จัดการเรื่องนี้ให้คือ virt-v2v บนเครื่อง Linux ที่ใช้แปลง ซึ่งจะติดตั้งไดรเวอร์ virtio จาก virtio-win ลงใน Windows และแปลงไฟล์เป็น qcow2
# Rocky Linux 9: virt-v2v และ virtio-win อยู่ใน AppStream
sudo dnf install -y virt-v2v virtio-win
# ถ้า dnf หาแพ็กเกจ virtio-win ไม่เจอ ให้ดาวน์โหลด virtio-win.iso แล้วชี้ตำแหน่งแทน
# export VIRTIO_WIN=/srv/iso/virtio-win.iso
mkdir -p /srv/p2v/out
virt-v2v -i disk /srv/p2v/file-01.vhdx -o local -os /srv/p2v/out -of qcow2 -on file-01
ถ้าเครื่องเดิมมีหลายดิสก์ ให้ใส่ไฟล์ดิสก์ทุกไฟล์ต่อท้าย -i disk ในคำสั่งเดียวกัน (รุ่นเก่าของ virt-v2v บางรุ่นรับได้ทีละดิสก์ ตรวจรุ่นด้วย virt-v2v --version และหน้า man virt-v2v ของเครื่อง) ถ้าต้องการแปลงดิสก์ข้อมูลแยกต่างหาก ใช้ qemu-img convert -p -f vhdx -O qcow2 และบน Windows 8 ขึ้นไปต้องปิด Fast Startup และ Hibernate ด้วย powercfg /h off ก่อนสร้าง Image ตามข้อกำหนดของ virt-v2v
วิธีนำไฟล์ดิสก์ขึ้นแต่ละแพลตฟอร์มต่างกัน ก่อนอัปโหลดให้เปิด Ticket ถามทีมงานของผู้ให้บริการว่ารับไฟล์รูปแบบใด ขนาดเท่าไร และส่งทางไหน แล้วบูตเป็นเครื่องทดสอบที่ไม่ต่อเครือข่ายเดียวกับเครื่องจริง เพื่อไม่ให้ชื่อเครื่องและ IP ชนกัน