สรุป:
VBoxManage.exe modifyhd --resize สามารถเพิ่ม (แต่ไม่ลดลง) ขนาดโลจิคัลของดิสก์อิมเมจ (ขนาดที่เห็นโดย guest OS)
VBoxManage.exe modifyhd inputfile.vdi --compactสามารถลดขนาดอิมเมจของฟิสิคัลดิสก์ (ขนาดของไฟล์อิมเมจบนดิสก์ตามที่โฮสต์ระบบปฏิบัติการเห็น) อย่างไรก็ตามสิ่งนี้ไม่ได้เปลี่ยนขนาดของดิสก์แบบลอจิคัล โปรดทราบว่าจะใช้งานได้ต่อเมื่อพื้นที่ว่างเป็นศูนย์ใน guest OS ก่อน
modifyhd ใช้งานได้เฉพาะกับตัวแปรรูปแบบไดนามิก ("ภาพที่จัดสรรแบบไดนามิก")
modifyhd ใช้ได้กับรูปแบบภาพ VDI และ VHD เท่านั้น
- หากคุณใช้สแน็ปช็อตคุณจะต้องโคลน VDI สแน็ปช็อตล่าสุดจากโฟลเดอร์ย่อย "Snapshots"
สำหรับรายละเอียดดูหัวข้อ8.23 VBoxManage แก้ไขhdในคู่มือ
เหตุผลที่การลดขนาดดิสก์โลจิคัลของ VDI ยังไม่ถูกนำไปใช้งานเพื่อป้องกันความเสียหายของข้อมูลที่อาจเกิดขึ้นและคุณจะมี VM ที่ไม่สามารถบูตได้ซึ่งเป็นผลมาจากมัน ดังนั้นเมื่อใช้--resizeตัวเลือกขนาดดิสก์ใหม่ต้องมากกว่าขนาดปัจจุบัน ไม่อนุญาตให้น้อยกว่าหรือเท่ากับขนาดปัจจุบัน กล่าวอีกนัยหนึ่งดิสก์ 40 GB สามารถปรับขนาดเป็น 41 GB หรือมากกว่านั้นเท่านั้นไม่สามารถปรับขนาดเป็น 40 GB (นั่นเป็นเพียงใบ้) หรือ 39 GB หรือน้อยกว่านั้น
VirtualBox เวอร์ชันเก่าสร้างไฟล์ VDI เป็น varient รูปแบบ "คงที่" การตั้งค่าเริ่มต้นใหม่ในขณะนี้คือการสร้างชุดรูปแบบ "ไดนามิก" เมื่อสร้างไฟล์ VDI (ภาพดิสก์เสมือน) ใหม่ (ฉันเดาว่าเป็นกรณีนี้ตั้งแต่มีการเปิดตัวตัวแปรรูปแบบไดนามิกซึ่งเป็นเวอร์ชั่นที่เปิดตัว)
ดังนั้นสิ่งที่ข้อผิดพลาด "การดำเนินการสำหรับรูปแบบนี้ยังไม่ได้ใช้งาน" หมายความว่าไฟล์ VDI ของคุณใช้ตัวแปรรูปแบบ "คงที่" ในการแก้ไขปัญหานี้คุณจะต้องทำการโคลนไฟล์ VDI ของคุณโดยใช้clonehdคำสั่ง ในการดูรูปแบบไฟล์ VDI ของคุณในขณะนี้คุณสามารถใช้showhdinfoคำสั่ง
ตัวอย่างการทำงาน
แสดงข้อมูล VDI เกี่ยวกับดิสก์ปัจจุบัน
คำสั่งอินพุต: vboxmanage.exe showhdinfo path\inputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID: 132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity: 40960 MBytes
Size on disk: 40962 MBytes
In use by VMs: sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)
C:\Program Files\Oracle\VirtualBox>
ดูว่ามันบอกว่า "เริ่มต้นคงที่"? นั่นเป็นสาเหตุที่ทำให้เกิดข้อผิดพลาดด้านบนเมื่อคุณพยายามปรับขนาด
โคลนไฟล์ VDI เก่าเป็นไฟล์ VDI ใหม่
คำสั่งอินพุต: vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c
C:\Program Files\Oracle\VirtualBox>
Voila! ไฟล์เก่าถูกโคลนไปยังไฟล์ใหม่แล้ว เนื่องจากการตั้งค่าเริ่มต้นใน VirtualBox เวอร์ชันใหม่คือการใช้ชุดรูปแบบ "ไดนามิก" คุณไม่จำเป็นต้องกำหนดรูปแบบดังกล่าวอย่างชัดเจน แม้ว่าหากคุณกำลังทำงานกับ VirtualBox เวอร์ชันเก่ากว่าคุณอาจต้องการตั้งค่าตัวเลือกเป็น "ไดนามิก" (หากมีให้ทั้งหมด) เพื่อให้แน่ใจว่ามีความเข้ากันได้และ / หรือความยืดหยุ่นที่ดีกว่ากับ VirtualBox รุ่นอนาคต
แสดงข้อมูล VDI เกี่ยวกับดิสก์ที่โคลน
คำสั่งอินพุต: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
ดูว่าตอนนี้พูดว่า "เริ่มต้นแบบไดนามิก"? ดีแค่ไหน!
(ในหมายเหตุด้านล่าง! เหตุผลที่มันบอกว่าขนาดทางกายภาพที่ 7806 MB นี่เป็นเพราะฉันได้ใช้--compactตัวเลือกในไฟล์ VDI ดั้งเดิมในความพยายามที่จะบังคับให้มีการแปลงเป็นรูปแบบไดนามิกตัวแปรสิ่งที่ฉันอ่านในฟอรัม VirtualBox จะได้ทำงานกับรุ่นที่เก่ากว่าดังนั้นฉันคิดว่าฉันอาจลองทำเช่นนั้นมันใช้งานไม่ได้)
การปรับขนาดดิสก์ที่โคลน
คำสั่งอินพุต: vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:\Program Files\Oracle\VirtualBox>
ที่ประสบความสำเร็จ! ไม่มีรูปแบบการพล่ามไม่มีอีกต่อไป เพียงจำไว้ว่าต้องปรับขนาดดิสก์ที่โคลนใหม่และไม่ใช่ดิสก์ดั้งเดิม โปรดทราบว่าขนาดจะแสดงเป็น MB ฉันเชื่อว่าคุณสามารถใช้เช่น51200เดียวกับ50G(หรืออาจเป็น "GB") นอกจากนี้ยังมีตัวเลือก--resizebyteที่สามารถใช้เพื่อแสดงขนาดเป็นไบต์
แสดงข้อมูล VDI เกี่ยวกับดิสก์โคลนที่ปรับขนาดแล้ว
คำสั่งอินพุต: vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 51200 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
แค่นั้นแหละ! จากที่นี่คุณต้องทำคือเพิ่มไดรฟ์โคลนนี้เป็น VDI ใหม่ของคุณสำหรับ VM คุณทำเช่นนั้นใน VirtualBox ฉันจะไม่เข้าไปในนั้น หากคุณสามารถอ่านและทำความเข้าใจในเรื่องนี้ได้คุณอาจไม่จำเป็นต้องชี้นำอีกต่อไป คุณสามารถลบไฟล์ "ถาวร" เก่าหรือทิ้งไว้เป็นข้อมูลสำรอง ตรวจสอบให้แน่ใจว่าคุณทดสอบไฟล์ VDI ใหม่ก่อนที่จะลบไฟล์ต้นฉบับ
บันทึก! คุณจะไม่เห็นขนาดใหม่ของดิสก์ที่ลอกแบบมาทันที คุณต้องบูต VM ด้วยจากนั้นคุณต้องใช้เครื่องมือการจัดการพาร์ติชันของคุณเพื่อขยายพาร์ติชันของคุณเพื่อเติมดิสก์เสมือน (หรือสร้างพาร์ติชันเพิ่มเติม) สำหรับ Windows ให้เรียกใช้diskmgmt.mscแล้วคุณจะสามารถขยายพาร์ติชันในนั้นได้
ภาพหน้าจอ

การอ้างอิง