如何调整VirtualBox vmdk文件的大小


539

我的虚拟机磁盘是vmdk,空间已用完,需要调整虚拟映像的大小。使用命令调整大小

vboxmanage modifyhd Machine-disk1.vmdk --resize 30720

给出错误

Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

如何调整vmdk图像的大小?

Answers:


806

如果您想结束使用vmdk硬盘的存储(也许您也有兴趣在vwmare中使用该磁盘),则完整的步骤是:

VBoxManage clonemedium "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifymedium "cloned.vdi" --resize 51200
VBoxManage clonemedium "cloned.vdi" "resized.vmdk" --format vmdk

以上内容将硬盘大小调整为最大50GB(50 * 1024MB)。

要完成操作,您还需要调整驱动器的大小!为此,您可能需要下载gparted iso并从该iso引导以调整驱动器的大小(从virtualbox设置中选择iso)。

PS:如果您的新大小太小,即使使用新的vdi文件,也会遇到相同的错误。


17
这可行!我要补充一点,您也可以跳过第三步,并将磁盘保持为VDI格式。我只是使用Oracle 12c映像执行此操作,并且无需第三步即可正常工作。只需在设置中将旧的“硬盘驱动器”换成克隆的VDI。另外-别忘了使用Gparted调整大小,这很好!
Avindra Goolcharan 2014年

12
对于尚未将VirtualBox添加到PATH变量的Windows用户,请记住进入Virtual Box目录以使用VBoxManage程序,例如“ cd C:\ Program Files \ Oracle \ VirtualBox”
Cleanshooter 2015年

2
我已将vm文件从我的ssd链接到一个大的ssd。我必须指定符号链接路径。VBoxManage clonehd "~/path/to/symlink/packer-centos-6.5-x86_64-disk1.vmdk" "/media/k0pernikus/thatFatSlowDisk/cloned_packer-centos-6.5-x86_64-disk1.vdi"如果您指定实际路径,该命令将由于崩溃VBoxManage: error: Cannot register the hard disk,因为VBox认为它已经在其他地方定义了。
k0pernikus

2
哇。我浪费了大量时间来研究和研究为什么clonehed不断创建不支持的卷--resize。事实证明,追加--format vdiclonehd至关重要!
datv

5
完成此操作(并更换原始驱动器)后,UUID不匹配。VirtualBox 5.1.12不会自动更新UUID。我必须从已知硬盘驱动器(文件->虚拟媒体管理器)列表中删除硬盘驱动器,然后将其重新添加到实例中。
Chaim Eliyah '17

196

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

vboxmanage clonehd "virtualdisk.vmdk" "new-virtualdisk.vdi" --format vdi
vboxmanage modifyhd "new-virtualdisk.vdi" --resize 30720

4
谢谢你 对于任何遇到错误的人:VBoxManage.exe: error: Code CO_E_SERVER_EXEC_FAILURE (0x80080005)尝试在Windows上运行此命令时,请以非管理员身份运行命令提示符。
Jim W.

4
@BradFJacobs,但是当然。毕竟,这是合乎逻辑的事情。:P
Paul Draper 2014年

4
这样会将文件保留为VDI格式,无法回答Brian的问题“我如何调整vmdk图像的大小?”。
2014年

注意,在调整了vmdk文件的大小之后,您必须通过使用eg引导启动VM中的分区。gparted-live
stephanfriedrich

有关信息:在linux(薄荷)中,它只能在不使用双引号的情况下工作virtualdisk.vmdkvboxmanage clonehd virtualdisk.vmdk "new-virtualdisk.vdi" --format vdi vboxmanage modifyhd "new-virtualdisk.vdi" --resize 30720
lese

43

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

我要补充一点,我没有使用gparted。我这样做:

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

甜!我更喜欢使用带有有关数据丢失警告的第三方工具。

干杯!


32

VBoxManage可以达到目的,但是请不要忘记必须使用GParted或其他工具来分配使用VBoxManage创建的可用空间。

看看我的博客文章以获取详细信息和分步截图。


VBoxManage显然并不能解决问题,我认为您已经混淆了VDI和VMDK文件格式
portforwardpodcast 2015年

请勿混淆,只需看一下链接即可。VMDK必须转换为VDI才能进行处理。
tvial

@tvial-不幸的是,AFAICS,将VMDK转换为VDI的过程将丢失您拥有的所有快照,这对于许多人来说是不可接受的。因此只是说明它“的伎俩”是一个有点夸张的..
朱尔斯

@Jules,我的回答与问题有关。Brian尝试使用VBoxManage,而我不仅在声明它确实在使用。我花了数小时编写带有屏幕截图的分步博客文章。是的,可能缺少有关快照的信息。
tvial

好吧,当然,但这不是最好的解决方案。为将在不转换为VDI的情况下调整VMDK大小的软件提供建议的答案(例如,@ micwallace和@davidehrman提供的答案)对于许多人来说显然是更好的解决方案(并且不清楚原始的问询者是否是其中之一) )。
Jules

31

实际上,仅需要以下命令:

VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd "cloned.vdi" --resize 51200

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

之后,启动虚拟窗口并展开您的C盘,作为代码分割的方法。

不必将* .vdi文件转换回* .vmdk文件。


5
我没有投票,但我能理解投票是因为两个最高答案,都在2012年回答(!)完全相同。这不会添加任何新内容。
nathanvda 2014年

2
-1同意nathanvda,但是这个“答案”也不能回答Brian的问题“我如何调整vmdk图像的大小?”。
2014年

22

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

然后,您只需执行以下操作:

1023856-vdiskmanager-windows-7.0.1.exe -x 30720M Machine-disk1.vmdk

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

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

qemu-img resize Machine-disk1.vmdk +8G

提醒一下,在调整基础磁盘的大小之后,您仍然必须同时扩大分区。所有这些工具本质上都是dd if=/dev/old_disk of=/dev/new_disk bs=16M


1
最佳答案,无需克隆。
WiringHarness '16

+1这对于调整Windows VM的大小非常有用,我什至不需要启动即可恢复,我的安装使我可以在启动后重新设置磁盘管理中的大小。
benh57 '18

这对我调整Windows10上的ubuntu图像大小更好。扩展磁盘后,我什至不必扩展分区(这是我的根分区)。
停泊

下载vdiskmanager的链接对我不起作用。我从download3.vmware.com/software/fusion/file/…下载了VMWare融合试用版,然后挂载了.dmg文件。然后,可以在/ Volumes / VMware \ Fusion / VMware \ Fusion.app/Contents/Library/vmware-vdiskmanager中使用vdiskmanager工具。
user674669

16

在这里尝试了所有解决方案,但似乎没有任何效果。经过数小时的挖掘,我发现了此博客文章,并且像魔术一样一切正常。我不得不稍作调整,所以这里是修改后的版本。已在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管理器
  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

非常详细和有帮助。谢谢。在gopted optin中,我遵循了强制视频路径,但没有成功。该自动X选项,虽然工作。
mshsayem

15

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


1
谢谢,就是那样。我认为首先必须放入VM中才能调整大小,但这只是一小步。另外,不要在VMWare中启动VM,更改的硬件对我造成了蓝屏。
安德里亚斯·里夫

很棒的提示!它也非常快(大约1秒钟),并保持了“拆分为2GB文件”的设置。谢谢!!
Osmar

如何将VMDK放入VMware Player?听起来这是一个不错的解决方案,但还不完善
thaspius

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

11

如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. 运行来宾操作系统并调整磁盘分区的大小。如果您正在运行Linux,则可以使用gpartedkparted

9

Windows版VirtualBox

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


步骤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

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

在Windows系统上,用户下面的VirtaulBox VM目录可能包含XML格式的数据库文件,其中包含为VM配置的设置。重命名此文件,带有.bak扩展名(具有.vbox扩展名)。还要.vmdk使用.bak扩展名重命名原始文件,以避免出现另一个错误。现在,您可以安全地执行第三步,而不会出现错误消息以将计算机转换回.vmdk格式,也不会出现“复制磁盘”错误。

VBoxManage clonehd "C:\path_to\cloned.vdi" "C:\path_to\source.vmdk" --format vmdk

您将获得一个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" ...

在此行中<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 1LIST PARTITION并收集C:\驱动器的分区号,然后单击SELECT PARTITION #。您可以使用将EXTEND SIZE=mbWindows C:\驱动器的大小调整为适当的值。确保为恢复和引导分区留出空间!由于卷影复制和Windows恢复文件的缘故,从新的虚拟磁盘大小中减去4096 MB可以安全地获得此值。

对于Linux VM.ISO可以在以下位置找到可以通过VM的磁盘文件启动的gparted 实时版本:http : //gparted.org/ 。它将直接带您进入基于图形用户界面的gparted-gtk,您可以在其中填充您的可用空间。

对于PPC / Mac VMDisk Utility通过Finder可以帮助您填充可用空间,但是您可能要考虑使用gparted Linux选项,因为当前在VirtualBox中启动MacOSX的唯一方法是hackintosh,并且您无法扩展其容量引导到MacOSX时。您可能还需要临时调整VM的设置gparted,以使其启动。MacOSX分区被gparted识别为HFS“堆文件系统”分区。


第4步-猫照片

因为上网。;)您完成了。.vmdk使用适用于Windows的VirtualBox 享受新调整大小的虚拟磁盘映像!


感谢您的综合步骤,它们非常有用!我做了一些变化:我使用磁盘分区工具来扩展Win10 VM上的磁盘卷。此外,缺少详细的步骤,该步骤是将克隆的vmdk磁盘重新添加到VM配置中。而已。干杯!
j4v1

克隆之前将虚拟机配置文件“ .vbox”重命名为“ .vbox.bak”的步骤非常重要!如果不是,克隆操作将失败
Andres

如果您从失败的VBoxManage命令中获取错误,这可能是“最完整的”答案。就我而言,即使我将配置文件重命名为“ * .vbox.bak”,VBox仍会以某种方式保留状态(通过注册表?)。所以我只需要使用其他的VBoxManage命令。例如,要查看虚拟磁盘: vboxmanage list hdds。要删除不需要的内容: vboxmanage closemedium disk <filename.vmdk>。查看SATA端口号,设备号: vboxmanage showvminfo <vmName>。要分离盘: vboxmanage storageattach <vmName> --storagectl SATA --port <p#> --device <d#> --medium none
electromaggot

7

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


Backup️备份虚拟磁盘。您永远都不知道可能出什么问题。

在您的主机上:

  1. 打开一个终端窗口。

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

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

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

    VBoxManage createmedium --filename "MyNewDisk.vdi" --size 50000 --variant Fixed

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

    "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createmedium
        --filename "MyNewDisk.vdi" --size 50000 --variant Fixed
  4. 将原始磁盘复制到新磁盘。

    VBoxManage clonemedium "MyOriginalDisk.vdi" "MyNewDisk.vdi" --existing
  5. 调整大小!您可以根据需要检查新磁盘的属性:

    VBoxManage showmediuminfo "MyNewDisk.vdi"
  6. 将虚拟机更改为使用新磁盘。

接下来,在来宾OS上,您需要调整分区的大小以使用新的可用空间。



3

快速简单的选择:

  1. 关机
  2. 创建具有所需大小的新虚拟盒磁盘
  3. 将内容从旧磁盘移动到新磁盘内部:

    vboxmanage clonehd "source-disk.vmdk" "new-disk.vmdk" --existing
    
  4. 开机

  5. 您可能需要在OS中调整分区大小以填充其余磁盘

警告

如果新磁盘比源磁盘短,您将丢失源磁盘上新磁盘大小位置的数据

您可以在步骤1之前在OS内部源磁盘的末尾阻止这种释放增量空间的操作,其中增量= size(源磁盘)-size(新磁盘)。


0

扔掉然后重新开始。忽略所有这些答案-不要浪费时间。


OK,那么如何从更大的驱动器(例如Vagrant)中启动VM?
克里斯·巴恩斯

-4

下载/安装/使用VMWare工作站并基于当前的vmdk文件创建新的VM,然后可以调整vmdk的大小。有关此问题的详细信息,请参阅Google for VMWare。


-4

您只需按照以下步骤操作:

  1. 关闭机器电源。
  2. 右键单击虚拟机名称>设置>存储
  3. 单击控制器:SATA>添加硬盘。
  4. 选择新的硬盘驱动器类型大小,然后单击创建。
  5. 丢弃机器状态。
  6. 插入Ubuntu Live CD。
  7. 从ubuntu live CD启动。
  8. 打开“ gparted”(已安装,无需安装)。
  9. 检查系统是否看到您新创建的硬盘。
  10. 打开终端。
  11. 输入以下代码。
  12. sudo dd if = / dev / sdb of = / dev / sdb(第一个是旧分区路径,第二个是新分区路径)。
  13. 等待其完成数据复制(根据您的主机规格,此步骤可能需要一些时间)。
  14. 复制完成后,返回gparted并选择刷新设备。
  15. 在执行dd命令之后,选择新分区/ dev / sdb,它必须是旧分区的典型分区。
  16. 它将展开的空间显示为未定位的数据。
  17. 删除交换分区/扩展分区。
  18. 右键单击根分区/ dev / sdb>调整大小
  19. 分配整个空间,而无需交换分配。
  20. 创建新的扩展分区>选择扩展>创建
  21. 创建新的linux-swap分区>选择linux-swap>创建
  22. 现在关闭跑步机。
  23. 右键单击计算机>设置>存储。
  24. 弹出ubuntu live CD。
  25. 右键单击旧硬盘>删除附件。
  26. 现在,您可以从新创建的硬盘启动虚拟机。
  27. 通过输入df -kh命令检查存储。
  28. 它必须显示新的尺寸。

恭喜,享受您的自由空间。
该视频将帮助您:https : //youtu.be/ikSIDI535L0


是的,这完全适合UBUNTU
Mohammad Nimer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.