บทความนี้จะแนะนำวิธีลดขนาด Virtual Disk (ไฟล์ VMDK) ของ VM ที่รันบน VMware ESXi ต่างจากการขยายดิสก์ที่ทำ On-the-fly ได้โดยไม่ต้องปิด VM การลดขนาด VMDK บน ESXi Hypervisor ซับซ้อนกว่า และไม่สามารถทำผ่าน vSphere Web Client GUI ได้ vSphere Client ไม่อนุญาตให้ระบุขนาด Virtual Disk ที่เล็กลง
สำคัญ คู่มือนี้ไม่ใช่วิธีที่ได้รับการสนับสนุนอย่างเป็นทางการจาก VMware แต่ผมใช้วิธีนี้หลายสิบครั้ง บทความใช้ VMware ESXi 6.7

ก่อนลดขนาด Virtual Disk ให้ทำดังนี้บน VMware ESXi Host:
- ลบ Snapshot ทั้งหมดของ VM (มิฉะนั้นอาจทำลาย Virtual Disk)
- สร้าง Backup เต็มของ VM หรือ Copy ไฟล์ VMDK และ Flat Files ที่ต้องการลดขนาด:
cp vmname.vmdk backup_vmname.vmdk cp vmname-flat.vmdk backup_vmname-flat.vmdk
ขั้นตอนลดขนาด Virtual Disk ประกอบด้วย 2 ขั้นตอน:
- ลดขนาด Partition ภายใน Guest OS
- ลดขนาดไฟล์ VMDK ของ VMware VM บน VMFS (NFS) Datastore
วิธีลดขนาด Partition ใน Guest OS
ลองลดขนาด Disk Partition ใน Guest OS ก่อน ถ้า VM รัน Windows ใช้ Disk Manager diskmgmt.msc (Operation Shrink Volume รองรับทุก Windows Version ที่ยังได้รับการสนับสนุน; Tool sdelete ใช้ใน Windows เก่าๆ) หรือ Tool ภายนอก (เช่น Acronis Disk Director) หากไม่ทำ อาจทำให้ File System Crash หลังลดขนาด Virtual Disk

สมมติต้องการลดขนาด Disk 40 GB ต้องลด Volume Size ลง 40960 MB (40 GB x 1024) ใส่ค่านี้ใน Wizard Shrink Volume หลังลดขนาด Partition จะมีพื้นที่ Unallocated (40 GB ในตัวอย่าง) ด้านขวาของ Partition

หมายเหตุ: OEM Partition หรือ Windows Recovery Partition บางครั้งอาจขวางการขยายหรือลดขนาด Disk

ใน Linux ลดขนาด Partition ได้ด้วย Parted หากใช้ LVM Logical Volumes สถานการณ์จะต่างออกไป
ลดขนาดไฟล์ VMDK ของ VMware Virtual Machine
จากนั้นลดขนาดไฟล์ VMDK บน VMware VMFS File System
- Shut Down VM ที่ต้องการลดขนาด Disk
- SSH เข้า Console ของ ESXi Host ที่ VM ลงทะเบียนอยู่ (ใช้ Putty หรือ Windows SSH Client Built-in)
- ไปที่ Directory ที่ไฟล์ VMDK ของ VM อยู่ (ดู Path ได้จาก Properties ของ Virtual Disk ใน vSphere Client):
cd /vmfs/volumes/datastore/test-VM

- แสดงเนื้อหาไฟล์ Config Virtual Disk (*.vmdk) ด้วยคำสั่ง cat:
# cat test_vm_3.vmdk
ขนาด VMDK Disk แสดงในส่วน #Extent description (หลังตัวอักษร RW) ในที่นี้คือ 167772160 (80 GB *1024*1024*1024 / 512)
- ต้องการลด VMDK จาก 80 เป็น 40 GB ต้องระบุ 83886080 (
40 GB*1024*1024*1024 / 512) ใน Extent Description Section ตั้งค่าขนาด Virtual Disk ใหม่ด้วย Text Editor (vi หรือ nano) - ใช้ vi:
# vi test_vm_3.vmdk - เลื่อนลงบรรทัดที่มีขนาด Disk กด
i(เพื่อแก้ไข) ระบุขนาดใหม่ กด ESC ออกจาก Edit Mode แล้วพิมพ์:wq→ Enter เพื่อบันทึก
- จากนั้น Clone หรือ Migrate (ใช้ Storage vMotion) VM ไป Datastore อื่น หลังย้ายไฟล์ VM ขนาด Virtual Disk ใหม่จะแสดงใน Properties Tip. หากมี ESXi Host เดียว, Datastore VMFS เดียว ไม่สามารถใช้ Storage vMotion ได้ ให้ Clone VMDK ด้วยคำสั่ง:
vmkfstools -i test_vm_3.vmdk test_vm_3_newsize.vmdk
ลบ Source VMDK Disk, Clone VMDK ที่เหลืออีกครั้ง และ Rename กลับเป็นชื่อเดิม:
rm test_vm_3.vmdk rm test_vm_3-flat.vmdk vmkfstools -i test_vm_3_newsize.vmdk test_vm_3.vmdk
- ตรวจสอบว่า Properties ของ VM แสดงขนาด Virtual Disk ใหม่แล้ว

- Start VM, Login Guest OS และตรวจสอบว่า Unallocated Area หายไป และขนาด Disk ลดลงแล้ว

Tip. หากใช้ vmkfstools ในขั้นตอนก่อนหน้า ให้ Reconnect Virtual Disk ใน VM Settings เนื่องจากขนาดใหม่อาจไม่แสดงถูกต้อง Note. วิธีอื่นๆ ที่นิยมใช้ลดขนาด VMDK:
- ลดขนาด Virtual Disk โดย Convert VM ด้วย VMware vCenter Converter ระบุขนาด Disk น้อยกว่าต้นทาง (จะแสดงในส่วนถัดไป)
- Clone เนื้อหา Virtual Disk ด้วย Software ภายนอก (เช่น Acronis True Image หรือ Symantec Ghost32) โดยเพิ่ม Disk ใหม่ขนาดเล็กกว่าให้ VM และ Clone เนื้อหา Disk ใหญ่ไปยัง Disk ใหม่ แล้วลบ Disk ใหญ่ทิ้ง
การลดขนาด VMDK ด้วย VMware vCenter Converter Standalone
อีกวิธีหนึ่งคือใช้ Free GUI Tool VMware vCenter Converter Standalone
ข้อเสีย:
- V2V Conversion ช้า
- ต้องมีพื้นที่พอสำหรับ VM ใหม่บน Datastore
- VM ใหม่จะมี MAC Address ใหม่
ข้อดี:
- ไม่ต้องเปิด Console ของ vCenter หรือ ESXi Host
- สร้าง Copy ที่เหมือนกันทุกประการ
- Source Disk ไม่เสียหายแม้จะมี Error ในการตั้งค่า Conversion
Note VM ที่ต้องการ Convert (เปลี่ยนขนาด Disk ฯลฯ) ต้อง Shut Down แล้ว (ใช้ Shut down หรือ Power Off แทน Suspend)
ระบุที่อยู่ ESXi Host

เลือก Source VM

ตั้งค่า VM ใหม่

เข้าโหมดแก้ไข Disk (Data to copy → Edit)

เลือก Copy Mode: Select volumes to copy

ระบุขนาด Disk ใหม่สำหรับ VM ใหม่ ตัวอย่าง ใช้พื้นที่ 48 GB ใน Guest OS แต่ Disk Size 150 GB จะลดเหลือ 60 GB

รันกระบวนการ Convert VM จากนั้น Power Off Source VM และ Power On VM ใหม่ ตรวจสอบว่าขนาด Disk ลดลงแล้ว หลังจากนั้น Original VM อาจลบได้
Note ใน Microsoft Hyper-V เวอร์ชันล่าสุด สามารถใช้ Hyper–V Online VHDX Resize Tool เพื่อ Resize Dynamic (ทั้งขยายและลด) Virtual Disks ได้