如何调整VirtualBox vmdk文件的大小

Bri*_*ian 517 virtualbox

我的虚拟机磁盘空间不足,这是一个vmdk,需要调整虚拟映像的大小.使用命令调整大小

vboxmanage modifyhd Machine-disk1.vmdk --resize 30720
Run Code Online (Sandbox Code Playgroud)

给出了错误

Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!
Run Code Online (Sandbox Code Playgroud)

如何调整vmdk图像的大小?

Luc*_*one 777

如果你想结束退回vmdk硬盘(也许你有兴趣在vwmare中使用磁盘),完整的步骤是:

VBoxManage clonemedium "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifymedium "cloned.vdi" --resize 51200
VBoxManage clonemedium "cloned.vdi" "resized.vmdk" --format vmdk
Run Code Online (Sandbox Code Playgroud)

以上将调整硬盘大小为50GB(50*1024MB).

要完成任务,您还需要调整驱动器的大小!要实现此目的,您可能需要从该iso 下载gparted iso和boot以调整驱动器的大小(从虚拟机设置中选择iso).

PS如果您的新尺寸太小,即使使用新的vdi文件也会出现相同的错误.

  • 这有效!我想补充一点,您也可以跳过第三步并将磁盘保留为VDI格式.我刚刚使用Oracle 12c映像执行此操作,并且没有第三步就可以正常工作.只需在设置中换掉克隆VDI的旧"硬盘"即可.另外 - 别忘了用Gparted调整大小,你很高兴! (15认同)
  • 对于尚未将VirtualBox添加到PATH变量的Windows用户,请记住切换到Virtual Box目录以使用VBoxManage程序,例如"cd C:\ Program Files\Oracle\VirtualBox" (12认同)
  • 执行此操作(并替换原始驱动器)后,UUID不匹配.VirtualBox 5.1.12不会自动更新UUID.我不得不从已知硬盘驱动器列表中删除硬盘驱动器(文件 - >虚拟介质管理器),然后将其重新添加到实例中. (3认同)
  • 我已经将我的ssd中的vm文件符号链接到一个大的ssd.我必须指定符号链接路径`VBoxManage clonehd"〜/ path/to/symlink/packer-centos-6.5-x86_64-disk1.vmdk""/ media/k0pernikus /thatFatSlowDisk/cloned_pa​​cker-centos-6.5-x86_64-disk1.vdi "`如果你指定真正的路径,命令将因"VBoxManage:错误:无法注册硬盘"而崩溃,因为VBox认为它已经在其他地方定义了. (2认同)
  • 哇.我浪费了几个小时试图研究为什么`clonehed`不断创建`--resize`不支持的卷.事实证明,将`--format vdi`附加到`clonehd`是至关重要的! (2认同)

Bri*_*ian 188

我能够通过克隆它然后修改和调整大小来调整vmdk的大小.

vboxmanage clonehd "virtualdisk.vmdk" "new-virtualdisk.vdi" --format vdi
vboxmanage modifyhd "new-virtualdisk.vdi" --resize 30720
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你.对于任何收到错误的人:`VBoxManage.exe:错误:代码CO_E_SERVER_EXEC_FAILURE(0x80080005)`尝试在Windows上运行此命令时,以非管理员身份运行命令提示符. (4认同)
  • @BradFJacobs,但当然.毕竟,这是合乎逻辑的事情.:P (4认同)
  • 这使文件保留为VDI格式,但没有回答[Brian的](http://stackoverflow.com/users/390708)问题"如何调整vmdk图像的大小?" (4认同)
  • 如果VM有快照,这是否也有效? (3认同)

Cod*_*ops 42

我在Mac主机上有一个Windows 7客户端,这篇文章非常有帮助.谢谢.

我想补充一点,我没有使用gparted.我这样做了:

  1. 启动新的放大的vmdk图像.
  2. 转到"开始"并右键单击"计算机"并选择"管理
  3. 单击磁盘管理
  4. 您应该看到(在我的情况下)C驱动器上有一些灰色的空间
  5. 右键单击C驱动器,然后选择"扩展卷".
  6. 选择尺寸然后去

甜!我更喜欢使用第三方工具,其中包含有关数据丢失的警告.

干杯!


tvi*_*ial 32

VBoxManage可以解决问题,但不要忘记你必须使用GParted或其他工具来分配用VBoxManage创建的可用空间.

看看我的博客文章,获取详细信息和一步一步的截图.


小智 31

实际上,只需要这些命令:

VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd "cloned.vdi" --resize 51200
Run Code Online (Sandbox Code Playgroud)

然后,您可以在Virtualbox GUI存储中选择cloned.dvi.

之后,启动虚拟窗口并展开C盘作为Code Chops的方法.

没有必要将*.vdi文件转换回*.vmdk文件.

  • 我没有投票,但我能理解一个downvote,因为两个顶级答案,都在2012年回答(!)完全相同.这不会增加任何新内容. (5认同)
  • -1同意[nathanvda](http://stackoverflow.com/users/216513),但这个"答案"也没有回答[Brian的](http://stackoverflow.com/users/390708/brian)问题"如何调整vmdk图像?" (2认同)

Dav*_*ann 22

由于这是一个vmdk文件,因此您可以使用VMWare vdiskmanager,如果它可用于您的平台.VMWare 在此处有x86 Linux,Windows和OS X版本.

然后你就做了:

1023856-vdiskmanager-windows-7.0.1.exe -x 30720M Machine-disk1.vmdk
Run Code Online (Sandbox Code Playgroud)

它避免了必须克隆,然后扩展磁盘.现在,缺点是您需要额外的工具,而vmdk是VMWare的磁盘格式,而您仍在使用Virtualbox,因此可能存在不兼容性.

qemu-img也可以工作,但我不确定它是否支持调整vmdk文件的大小.它看起来像:

qemu-img resize Machine-disk1.vmdk +8G
Run Code Online (Sandbox Code Playgroud)

只是提醒一下,两者都有,在调整底层磁盘大小后仍然需要增加分区.所有这些工具基本上都是dd if=/dev/old_disk of=/dev/new_disk bs=16M.


mic*_*ace 14

您可以使用Vmware播放器调整vmdk的大小.如果要将其保留为vmdk格式,则会删除往返转换(在其他帖子中注明).只需确保将vmdk添加到vmware时,请不要在出现提示时单击升级格式,保留当前的格式以防VirtualBox不接受它.


Lon*_*ren 11

缩小图像大小,请使用以下步骤:

  1. 在客户端计算机上 cat /dev/zero > z;sync;sleep 3;sync;rm -f z
  2. 关闭客户端计算机
  3. 在主持人上 VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
  4. 在主持人上 VBoxManage modifyhd cloned.vdi --compact
  5. 在主持人上 VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk


Ako*_*Ako 11

在这里尝试了所有解决方案,但似乎没有任何效果.经过几个小时的挖掘,我发现这篇博文和魔术一切都有效.我不得不做一些调整,所以这里是修改后的版本.使用Docker版本17.06.0-ce测试,构建02c1d87.

一旦开发人员真正开始容纳他们的应用程序,他们通常会生成大量图像并快速填满默认分配给Docker虚拟机的20GB硬盘空间.为了确保Docker虚拟机有足够的磁盘空间,我们应该将/ dev/sda1的大小调整为更合理的数字.

  1. 下载GParted Live CD/USB/HD/PXE可启动映像.
  2. 停止Docker虚拟机docker-machine stop default.

  3. Boot2Docker软件包安装程序附带一个VMDK卷,VirtualBox的本机工具无法调整大小.要调整Docker磁盘卷的大小,请首先从默认VMDK卷克隆VDI卷vboxmanage clonehd /full/path/to/disk.vmdk /full/path/to/disk_resized.vdi --format VDI --variant Standard.

  4. 将新克隆的VDI卷调整为所需容量.我们建议至少64GB vboxmanage modifyhd /full/path/to/disk_resized.vdi --resize <size in MB>.
  5. 启动VirtualBox应用程序,选择defaultVM并单击顶部的"设置"设备.VirtualBox Manager
  6. 单击"存储"图标.删除默认的VMDK卷.在此输入图像描述
  7. 添加新的IDE控制器.IDE控制器
  8. 通过"添加CD/DVD设备"选项安装GParted ISO.添加CD/DVD设备
  9. 通过"添加CD/DVD设备"选项安装克隆的VDI卷.装载量
  10. 如果在具有固态硬盘驱动器的计算机上运行Docker,请确保为克隆的VDI卷选择"固态驱动器"选项.固态硬盘
  11. 单击"开始"图标以启动Docker虚拟机,该虚拟机将启动GParted ISO.选择"GParted Live(默认设置)".GParted Live(默认设置)
  12. 将处理键盘映射的策略设置为"不要触摸键盘映射".键盘布局
  13. 将语言首选项设置为选项"33",映射到"美国英语".美国英语
  14. 选择选项"1"以运行"Forcevideo"并手动配置X.Forcevideo
  15. 选择选项"2",保持默认分辨率"1024×760".1024×760
  16. 将默认的"vesa"保留为VGA卡.如果需要默认值,请留空
  17. 通过选择选项"0"保持默认颜色深度"24". 颜色深浅
  18. GParted启动后,单击"调整大小/移动"图标.的GParted
  19. 通过拖动滑块将新磁盘卷大小设置为所需大小.在此示例中,最大大小为127,035MB.单击"调整大小/移动"按钮以启动该过程.磁盘卷大小
  20. 单击"应用"按钮确认调整大小操作.烘烤它
  21. 调整大小操作完成后关闭机器电源.硬复位,np :)
  22. 删除GParted ISO.你快完成了
  23. 登录Docker虚拟机以通过启动计算机验证卷调整大小是否成功 docker-machine start default
  24. 如果遇到网络问题,请重新启动docker-machine


tee*_*rna 10

正如Luca 的回答中提到的,所需的步骤是:

  1. 将VMDK映像克隆为VDI格式

    VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi

  2. 调整VDI图像的大小

    VBoxManage modifyhd "cloned.vdi" --resize 51200

  3. 克隆回VMDK格式

    VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk

如果您可以使用VDI图像,则步骤3是可选的.

所有这些步骤也可以在VirtualBox图形用户界面中执行File -> Virtual Media Manager.选择要克隆的驱动器,然后选择Copy.将打开一个对话框,允许您选择磁盘格式和选项.要调整VDI图像的大小,只需使用底部的滑块(Properties如果它不可见,请单击它).

最后,您可能还需要更改来宾操作系统中的磁盘大小:

  1. 运行guest虚拟机操作系统并调整磁盘分区的大小.如果您正在运行Linux,则可以使用gpartedkparted.


Rob*_*ith 8


VirtualBox for Windows

保留虚拟机设置的同时调整磁盘文件大小!


第1步 - 调整磁盘文件的大小

启动cmd.exe

cd到的Oracle VM VirtualBox的目录(在64位系统: "C:\Program Files\Oracle\VirtualBox\")

运行这些命令(如上所述):

VBoxManage clonehd "C:\path\to\source.vmdk" "C:\path_to\cloned.vdi" --format vdi
VBoxManage modifyhd "C:\path\to\cloned.vdi" --resize 51200
Run Code Online (Sandbox Code Playgroud)

Windows资源管理器和通过地址栏"将地址复制为文本"应该可以帮助您获得所需的路径.

在Windows系统上,用户下方的VirtaulBox VM目录可能包含您为VM配置的XML格式的数据库文件.使用.bak扩展名(具有.vbox扩展名)重命名此文件..vmdk使用.bak扩展名重命名原始文件以避免其他错误.您现在可以安全地执行第三步而不会出现错误消息,将机器转换回.vmdk格式或"重复磁盘"错误.

VBoxManage clonehd "C:\path_to\cloned.vdi" "C:\path_to\source.vmdk" --format vmdk
Run Code Online (Sandbox Code Playgroud)

您将看到一个UID令牌.通过从Windows Command Interpetor窗口拖动突出显示此标记并使用Ctrl+C键盘快捷键复制此标记.

.vbox.bak在Notepad ++等文本编辑器中打开文件.您将看到一个类似XML的数据库文件.寻找这些线:

<VirtualBox xmlns="http://www.virtualbox.org/" version="1.16-windows">
  <Machine uuid="{some uid}" name="source disk name" OSType="the_vbox_OS" snapshotFolder="Snapshots" lastStateChange="2043-03-23T00:54:18Z">
    <MediaRegistry>
      <HardDisks>
        <HardDisk uuid="{some uid}" location="C:\path_to\source.vmdk" ...
Run Code Online (Sandbox Code Playgroud)

在该行上<HardDisk uuid="{some uid}" location="C:\path_to\source.vmdk" ...,删除括号中的旧UID标记,并粘贴从命令窗口复制的标记.确保将支架留在原位!

保存此文件,然后退出文本编辑器.重命名该.vbox.bak文件以将其恢复为预期的扩展名.vbox.


第2步 - 删除垃圾

现在可以安全地删除.bak目录中剩余的文件.使用先前保留的VirtualBox Manager设置.vmdk,使用更新的.vbox数据库调整大小.


步骤3 - 调整磁盘分区的大小以填充可用空间

您现在可以使用适当的操作系统工具启动VirtualBox VM Manager并执行VM,以填充新的可用空间.

对于Windows VM,请使用diskpart从Windows Recovery Consule(恢复分区)启动的命令提示符SELECT DISK 1,LIST PARTITION然后收集C:\驱动器的分区号SELECT PARTITION #.您可以使用将EXTEND SIZE=mbWindows C:\驱动器的大小调整为适当的值.确保为恢复和启动分区留出空间!由于卷影复制和Windows恢复文件,可以安全地从新的虚拟磁盘大小中减去4096 MB以获得此值.

对于Linux VM,.ISO您可以使用VM的磁盘文件启动gparted 直播,可以在以下位置找到:http: //gparted.org/ 它将直接进入基于图形用户界面的gparted-gtk,您可以从中填写你的自由空间.

对于PPC/Mac虚拟机,Disk UtilityFinder会帮助您填补可用空间,但您可能需要考虑gparted Linux选项,因为目前在VirtualBox中启动MacOSX的唯一方法是hackintosh,并且您无法扩展音量同时启动进入MacOSX.您可能还想暂时调整VM的设置gparted,以使其启动.MacOSX分区被gparted识别为HFS"Heaping File System"分区.


第4步 - 猫照片

因为互联网.;)你结束了..vmdk使用VirtualBox for Windows 享受新调整大小的虚拟磁盘映像!


Dan*_*ker 7

这是一种调整VirtualBox磁盘大小的方法,无论它是固定格式磁盘还是动态格式磁盘.具体来说,它可以防止磁盘固定格式时出现的错误.


⚠️备份虚拟磁盘.你永远不知道会出现什么问题.

在您的主机上:

  1. 打开终端窗口.

    在Windows上:打开命令提示符cmd.

  2. 转到包含要调整大小的虚拟磁盘的目录.例如:

    cd "My VMs"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用所需的文件名,大小(以兆字节为单位)和格式(Standard(动态)或Fixed)创建一个新的VirtualBox磁盘.例如,要创建一个名为的50 GB固定格式磁盘MyNewDisk.vdi:

    VBoxManage createmedium --filename "MyNewDisk.vdi" --size 50000 --variant Fixed
    
    Run Code Online (Sandbox Code Playgroud)

    如果VBoxManage未被识别为命令,请指定它的完整路径.它可以在VirtualBox安装目录中找到.在Windows上,上面的命令将变为:

    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createmedium
        --filename "MyNewDisk.vdi" --size 50000 --variant Fixed
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将原始磁盘复制到新磁盘.

    VBoxManage clonemedium "MyOriginalDisk.vdi" "MyNewDisk.vdi" --existing
    
    Run Code Online (Sandbox Code Playgroud)
  5. 调整大小完成!如果需要,可以检查新磁盘的属性:

    VBoxManage showmediuminfo "MyNewDisk.vdi"
    
    Run Code Online (Sandbox Code Playgroud)
  6. 更改虚拟机以改为使用新磁盘.

接下来,在您的客户操作系统上,您需要调整分区大小以使用新的可用空间.