摘要:
VBoxManage.exe modifyhd --resize
可以增加(但不能减少)磁盘映像的逻辑大小(来宾OS看到的大小)。
VBoxManage.exe modifyhd inputfile.vdi --compact
可以减小物理磁盘映像大小(主机操作系统看到的磁盘上映像文件的大小)。但是,这不会更改逻辑磁盘的大小。请注意,这仅在先在来宾OS中将可用空间清零后才起作用。
modifyhd
仅适用于动态格式变体(“动态分配的图像”)。
modifyhd
仅适用于VDI和VHD图像格式。
- 如果使用快照,则必须从“快照”子文件夹克隆最新的快照VDI。
有关详细信息,请参见第8.23节。手册中的VBoxManage Modifyhd。
尚未实现减小VDI的逻辑磁盘大小的原因是为了防止可能发生的数据损坏,并因此导致无法启动的VM。因此,使用该--resize
选项时,新磁盘大小必须大于当前大小。不允许小于或等于当前大小。换句话说,一个40 GB的磁盘只能调整为41 GB或更大的容量,不能将其调整为40 GB(只是愚蠢的)或39 GB或更少的容量。
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>
瞧!现在,旧文件已被克隆到新文件。由于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>
而已!在这里,您要做的就是将此克隆的驱动器添加为VM的新VDI。您可以在VirtualBox中执行此操作。我不会说的。如果到目前为止您已经能够阅读和理解,那么您可能不需要进一步的指导。您可以删除旧的“固定”文件,也可以保留它作为备份。在删除原始源文件之前,请确保测试新的VDI文件。
注意!您不会立即看到克隆磁盘的新大小。您必须使用它来启动VM,然后必须使用分区管理工具来扩展分区以填充虚拟磁盘(或创建更多分区)。对于Windows,只需运行diskmgmt.msc
即可在其中扩展分区。
屏幕截图
参考