这是我的虚拟盒安装目录。
C:\Program Files\Oracle\VirtualBox
这就是我的映像 (linux.vdi) 所在的位置。
C:\Users\hmkhitaryan\dev\vm\linux
现在我想将光盘大小添加到我的虚拟机中,我确实在“虚拟媒体管理器”中缩小了它,现在尝试在终端中执行此操作,正如规范所述,通过此命令
C:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd "C:\Users\hmkhitaryan\VirtualBox VMs\linux.vdi" --resize 133672
并得到这样的错误
C:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd "C:\Users\hmkhitaryan\dev\vm\linux\linux.vdi" --resize 133672
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Failed to resize medium
VBoxManage.exe: error: Shrinking is not yet supported for medium 'C:\Users\hmkhitaryan\dev\vm\linux\linux.vdi'
VBoxManage.exe: error: Details: code VBOX_E_NOT_SUPPORTED (0x80bb0009), component MediumWrap, interface IMedium
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleModifyMedium(struct HandlerArg *)" at line 768 of file VBoxManageDisk.cpp
请任何人帮助我,这个错误的原因可能是什么。
答案1
原因很简单,错误信息中有说明。VirtualBox 目前不支持收缩媒体,只是扩大。
但是,您可以缩小来宾内部的分区,然后使用VBoxManage 修改介质--compact减小 vdi 文件的大小。这将防止它变得大于您新设置的分区大小。
为此,请按照下列步骤操作:
- 进行备份。
- 将 VM 从 iso 引导到实时环境(或进入恢复模式并启动 root shell)。
- 启动分区管理器,例如。格帕特,GNOME 磁盘或使用命令行工具,例如
fdisk
. - 将现有分区缩小到所需的大小。
- 在现有分区之后创建一个新分区,但不要将其格式化为任何文件系统。让它填满磁盘的其余部分。
- 用于
dd
用零填充新分区。例如,如果您之前只有一张磁盘和一个分区,则命令为:dd if=/dev/zero of=/dev/sda2 bs=4M
替换sda2
为新创建的未使用的分区。sudo
如果不在 root shell 中,您很可能必须使用以下命令启动该命令。 - 关闭虚拟机。
VBoxManage
在主机上找到该工具。在 Windows 上,它位于"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
,在那里打开一个 cmd。在 *nix 上,它可能在路径上,所以只需在任何地方打开一个终端即可。- 找到要缩小的 vdi 文件。复制其完整路径,如果包含空格,请用引号 (
"
) 括起来。 - 使用如下命令压缩 vdi:
VBoxManage modifymedium --compact "c:\Users\user\VirtualBox VMs\Ubuntu Desktop\Ubuntu Desktop.vdi"
- 对于 SSD,这将需要几分钟,对于 HDD,甚至需要几个小时。最后,您的 vdi 文件最多应为内部分区的大小,并且永远不应大于该大小。