摘要:
VBoxManage.exe modifyhd --resize
可以增加(但不能减少)磁盘映像的逻辑大小(客人操作系统看到的大小)。
VBoxManage.exe modifyhd inputfile.vdi --compact
可以减少物理磁盘映像的大小(主机操作系统看到的磁盘上映像文件的大小)。但这不会改变逻辑磁盘的大小。请注意,只有在客户操作系统中的空闲空间已被清零的情况下,这才会起作用。
modifyhd
仅适用于动态格式变体(“动态分配的映像”)。
modifyhd
仅适用于 VDI 和 VHD 映像格式。
- 如果您使用快照,您必须从 “快照 "子文件夹中克隆最新的快照VDI。
详情请参见手册中的 8.23. VBoxManage modifyhd 。
尚未实施减少 VDI 逻辑磁盘大小的原因是为了防止可能发生的数据损坏,您将因此而无法启动虚拟机。因此,当使用--resize
选项时,新磁盘大小必须大于当前大小。它不允许小于或等于当前大小。换句话说,一个40GB的磁盘只能调整为41GB或大于41GB,不能调整为40GB(这简直是傻子)或39GB或小于39GB。
旧版本的VirtualBox将VDI文件创建为 "固定 "格式的变量。新的默认设置是在创建新的VDI(虚拟磁盘镜像)文件时创建 "动态 "格式变量。(我猜测这是自引入动态格式变体以来的情况,不管是哪个版本引入的。)
所以,"对该格式的操作尚未实现 "的错误信息意味着你的VDI文件使用了 "固定 "格式变体。要解决这个问题,您必须使用clonehd
命令克隆您的VDI文件。要查看你的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>
Voilà! 旧文件现在已经被克隆到一个新文件中。由于新版本的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是物理大小,是因为我在原始VDI文件上使用了--compact
选项,试图强制转换为动态格式变量。只是我在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。你可以在VirtualBox里面进行。我就不多说了。如果你已经能够阅读和理解这些,那么你可能不需要进一步的指导。你可以删除旧的 "固定 "文件,或者留下它作为备份。确保你在删除原源文件之前测试新的VDI文件。
注意!您不会立即看到克隆磁盘的新大小。你必须用它来启动虚拟机,然后你必须使用你的分区管理工具来扩展你的分区以填充虚拟磁盘(或创建更多分区)。对于Windows来说,只要运行diskmgmt.msc
,你就可以在里面扩展分区。
Screen Screen
Reference