การปรับขนาดฮาร์ดดิสก์เสมือนของเครื่องเสมือนแบบไดนามิกพร้อมใช้งานตั้งแต่ Hyper-V ใน Windows Server 2012 R2 ฟีเจอร์ Online VHDX Resize ช่วยให้คุณเพิ่มหรือลดขนาดไฟล์ vhdx ของเครื่องเสมือนได้แบบออนไลน์ (โดยไม่ต้องหยุด VM) ในบทความนี้ เราจะดูวิธีขยายหรือลดขนาดฮาร์ดดิสก์ของเครื่องเสมือนใน Hyper-V ที่ทำงานบน Windows 10 หรือ Windows Server 2016 (คำแนะนำใช้ได้กับเวอร์ชัน Hyper-V ที่รองรับทั้งหมด รวมถึง Hyper-V Server ฟรี)
คุณสมบัติหลักและข้อจำกัดของ Online VHDX Resize ใน Hyper-V:
- สามารถปรับขนาดได้ทุกประเภทของ Virtual Disk ของ Hyper-V: แบบคงที่ (Fixed), แบบไดนามิก (Dynamic), และแบบ Differential
- สามารถปรับขนาด VHDX disk (รวมถึง System drive ของ Guest OS) แบบ Real-time ไม่ต้องหยุด VM; รองรับเฉพาะ VHDX เท่านั้น VHD ไม่รองรับและต้องแปลงเป็นรูปแบบ VHDX ก่อน
- VHDX disk ต้องเชื่อมต่อกับ VM ผ่าน Virtual SCSI Controller (ไม่รองรับการขยายออนไลน์ของดิสก์บน IDE Controller VM จะต้องปิดเครื่องเพื่อเปลี่ยนขนาดดิสก์)
- Online VHDX Resize ทำงานได้ทั้ง Generation 1 และ Generation 2 ของ Hyper-V VM
- ทั้ง Windows และ Linux สามารถเป็น Guest OS ได้
- รองรับทั้งการขยายและการย่อขนาด Virtual Disks
- สามารถปรับขนาด vhdx disk จาก Hyper-V GUI, PowerShell หรือ Windows Admin Center
- ไม่รองรับการปรับขนาด Shared VHDX (AVHDX) disks ที่ใช้ใน Cluster
- ไม่สามารถเปลี่ยนขนาด Virtual Disk ที่มี Snapshot ถูกสร้างไว้ (เช่น ระหว่างการ Backup)
การขยายฮาร์ดดิสก์ VM ใน Hyper-V
คุณสามารถเพิ่มขนาด Virtual VHDX disk โดยใช้คอนโซล Hyper-V Manager
- เลือกเครื่องเสมือนใน Hyper-V Manager ไปที่ VM Settings -> ขยาย SCSI Controller;
- เลือก Virtual Disk และคลิกปุ่ม Edit;
หากปุ่ม Edit ไม่ทำงาน และมีคำเตือนว่า "Edit is not available because checkpoint exist for this virtual machine" คุณต้องลบ Snapshot ทั้งหมด อาจต้องปิดใช้งานตัวเลือก Production Checkpoint ในคุณสมบัติ VM 
- ใน Wizard Edit Virtual Hard Disk ที่ปรากฏขึ้น เลือก Expand;

- ระบุขนาดใหม่ของ Virtual Hard Disk (ในตัวอย่างเราจะขยายขนาดดิสก์เป็น 170 GB);

- ไปที่คอนโซลของ Guest OS ที่ดิสก์ถูกขยาย มาดูวิธีเพิ่มขนาด System Partition ใน Windows Guest OS เปิดคอนโซล Disk Manager จะเห็นพื้นที่ Unallocated เพิ่มขึ้น 43 GB บนดิสก์;

- คลิกขวาที่ Partition ที่ต้องการขยายและเลือก Extend Volume (คุณสามารถขยาย Volume ได้เฉพาะทางซ้ายของพื้นที่ Unallocated) ระบุว่าต้องการเพิ่มขนาด Volume ปัจจุบันเท่าไหร่;
บางครั้งการขยาย Volume อาจถูกบล็อคโดย Windows Recovery Partition - หลังจากเสร็จสิ้นขั้นตอน Extend ขนาด Volume จะเพิ่มขึ้น ใน Guest Linux OS คุณสามารถขยายดิสก์โดยใช้เครื่องมือ parted
วิธีย่อขนาด Hyper-V Virtual Disk (VHDX)
ตอนนี้มาดูวิธีลดขนาด Virtual vhdx disk บน Hyper-V
- ก่อนย่อ Virtual Disk จากคอนโซล Hyper-V จำเป็นต้องลดขนาด Logical Partition บนดิสก์ภายใน Guest OS ให้ว่างพื้นที่บางส่วนและแปลงเป็น Unallocated Volume เปิด Disk Manager ใน Guest OS เลือก Volume และคลิก Shrink Volume;
หมายเหตุ ตัวเลือก Shrink Volume จะพร้อมใช้งานก็ต่อเมื่อมีพื้นที่ว่างบน Partition - ระบุปริมาณพื้นที่ที่ต้องการย่อ Partition (ในตัวอย่างเราระบุ 50 GB);

- หลังจากลดขนาด Partition ใน Guest OS แล้ว ให้เปิดคอนโซล Hyper-V และไปที่การตั้งค่า Virtual Disk กดปุ่ม Edit;
- ใน Wizard Edit Virtual Hard Disk เลือก Shrink แล้วระบุขนาดใหม่สำหรับไฟล์ vhdx โปรดทราบว่าคุณไม่สามารถทำให้ดิสก์เล็กลงกว่าข้อมูลที่อยู่บนมันได้ (ตรวจสอบค่า Minimum) ในกรณีของเรา สามารถลดขนาดดิสก์จาก 40 เป็น 31 GB;
ก่อนย่อไฟล์ VHDX ลองทำการ Defragment ด้วย Hyper-V Optimization ในฟอร์มก่อนหน้า ให้เลือกตัวเลือก Compact หรือใช้คำสั่ง PowerShell เพื่อ Optimize และ Defragment Hyper-V Dynamic Virtual Disk: Optimize-VHD -Path 'C:\VM\VHDHyper-V\fs01.vhdx'
- เสร็จสิ้น
การปรับขนาดไฟล์ Virtual Hard Disk ใน Hyper-V ด้วย PowerShell
คุณสามารถปรับขนาด VHDX disk บน Hyper-V Host โดยใช้ PowerShell ใช้ cmdlet Resize-VHD (อย่าสับสนกับ Resize-VirtualDisk cmdlet ซึ่งเป็น cmdlet จัดการดิสก์ Built-in ของ Windows)
หมายเหตุ คุณไม่ต้องปิดเครื่องเสมือนเพื่อปรับขนาด Virtual Disk โดยใช้คำสั่ง Resize-VHD ใน Hyper-V เวอร์ชันปัจจุบัน
ขั้นแรก ต้องได้ Full Path ไปยัง VHDX disk ของเครื่องเสมือน:
Get-VM -VMName fs01 | Select-Object VMId | Get-VHD
Cmdlet เหล่านี้ยังคืนค่าขนาดจริงของไฟล์ VHDX บน Storage (FileSize) และขนาดสูงสุดที่มันสามารถรับได้ (Size) MinimumSize คือขนาด VHDX disk ขั้นต่ำที่ไฟล์ Virtual Disk สามารถลดลงได้

เพื่อเพิ่มขนาด VHDX disk ให้ระบุขนาดใหม่:
Resize-VHD -Path 'C:\VM\fs01\VHD\fs01.vhdx' -SizeBytes 50Gb
หากคุณระบุขนาดใหม่ของ Virtual Disk น้อยกว่าที่มันใช้อยู่บนดิสก์ จะเกิดข้อผิดพลาด: Resize-VHD : Failed to resize the virtual disk
คุณเพียงต้องปรับขนาด Partition ใน Guest OS ให้เสร็จสมบูรณ์
คุณสามารถขยายดิสก์บน Windows แบบ Remote โดยใช้ PowerShell Remoting เชื่อมต่อกับ Remote VM โดยใช้ cmdlet Invoke-Command หรือ Enter-PSSession (ผ่านเครือข่ายหรือผ่าน Hyper-V PowerShell Direct):
Enter-PSSession -ComputerName fs01
คุณต้องรับข้อมูลว่าสามารถขยาย Partition ได้มากแค่ไหน และขยายไปถึงขนาดสูงสุดที่มี:
$MaxSize = (Get-PartitionSupportedSize -DriveLetter C).SizeMax
Resize-Partition -DriveLetter L -Size $MaxSize
หากคุณต้องการย่อขนาด Virtual Disk ให้เล็กที่สุดเท่าที่จะเป็นไปได้ ให้รัน:
Resize-VHD -Path 'C:\VM\fs01\VHD\fs01.vhdx' -ToMinimumSize

คำสั่งนี้จะลดขนาด VHDX file สูงสุดลง 6 GB
คำแนะนำสำหรับการปรับขนาด Virtual Disks ใน Hypervisor อื่นๆ พร้อมใช้งานที่ลิงก์ต่อไปนี้: KVM, VMWare