我已经用完了虚拟机磁盘(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映像的大小?


当前回答

这里所有的办法都试过了,但似乎都不管用。经过几个小时的挖掘,我发现了这篇博客文章,就像魔法一样,一切都起作用了。我需要做一些调整,所以这是修改后的版本。使用Docker 17.06.0-ce版本测试,构建02c1d87。

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

Download GParted Live CD/USB/HD/PXE Bootable Image. Stop the Docker virtual machine docker-machine stop default. Boot2Docker package installer ships with a VMDK volume, which VirtualBox’s native tools cannot resize. In order to resize the Docker disk volume, first clone the VDI volume from the default VMDK volume vboxmanage clonehd /full/path/to/disk.vmdk /full/path/to/disk_resized.vdi --format VDI --variant Standard. Resize the newly cloned VDI volume to the desired capacity. We recommend at least 64GB vboxmanage modifyhd /full/path/to/disk_resized.vdi --resize <size in MB>. Launch the VirtualBox application, select default VM and click on the “Settings” gear on top. Click on the “Storage” icon. Remove the default VMDK volume. Add a new IDE controller. Mount the GParted ISO via the “Add CD/DVD Device” option. Mount the cloned VDI volume via the “Add CD/DVD Device” option. If you are running Docker on a computer with a solid-state hard drive, please make sure the “Solid-state Drive” option is selected for the cloned VDI volume. Click on the “Start” icon to boot up the Docker virtual machine, which will launch the GParted ISO. Select “GParted Live (Default settings)”. Set the policy for handling keymaps to “Don’t touch keymap”. Set language preference to option “33”, which maps to “US English”. Select option “1” to run “Forcevideo” and configure X manually. Keep the default resolution of “1024×760” by selecting option “2”. Keep the default “vesa” as the VGA card. Keep the default colour depth of “24” by selecting option “0”. Once GParted launches, click on the “Resize/Move” icon. Set the new disk volume size to desired size by dragging the slider. In this example, the maximum size is 127,035MB. Click on the “Resize/Move” button to start the process. Confirm the resizing operation by clicking on the “Apply” button. Power off the machine after the resizing operation finishes. Remove the GParted ISO. Log into the Docker virtual machine to verify that the volume resizing was successful by starting machine docker-machine start default If you experience network issues, restart the docker-machine

其他回答


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

Windows资源管理器和“复制地址为文本”通过地址栏应该帮助你得到你需要的路径。

在windows系统中,用户下面的VirtaulBox VM目录可能包含您为虚拟机配置的设置的XML格式的数据库文件。重命名这个文件,扩展名为.bak(扩展名为.vbox)。用.bak扩展名重命名原始的.vmdk文件,以避免另一个错误。现在,您可以安全地执行第三步,而不会出现将机器转换回.vmdk格式的错误消息或“重复磁盘”错误。

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

您将看到一个UID令牌。通过从Windows命令解释器窗口中拖拽高亮显示并使用快捷键Ctrl+C复制此令牌。

在文本编辑器(如notepad++)中打开.vbox.bak文件。您将看到一个类似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令牌,并粘贴从命令窗口复制的UID令牌。确保你把括号放在适当的位置!

保存该文件,并退出文本编辑器。重命名.vbox.bak文件以返回其预期扩展名.vbox。


步骤2 -清除垃圾

现在可以安全地删除目录中剩余的.bak文件了。剩下的是一个调整大小的.vmdk,更新了.vbox数据库,同时保留了之前保留的VirtualBox管理器设置。


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

现在,您可以启动VirtualBox虚拟机管理器并执行您的虚拟机,使用操作系统的适当工具来填充新的空闲空间。

For Windows VMs, use diskpart from the command prompt booted from the Windows Recovery Consule (recovery partition) to SELECT DISK 1, LIST PARTITION and gather the partition number of your C:\ drive, then SELECT PARTITION #. You can use the EXTEND SIZE=mb to resize the Windows C:\ drive to the appropriate value. Make sure you leave room for the recovery and boot partitions! It's safe to subtract 4096 MB from your new virtual disk size to get this value, because of shadow copy and windows recovery files.

对于Linux虚拟机,可以在以下地址找到一个gparted的活动iso文件,可以用虚拟机的磁盘文件引导:http://gparted.org/。它将直接引导您进入一个基于图形用户界面的gparted-gtk,从那里您可以填充空闲空间。

对于PPC / Mac虚拟机,查找器中的磁盘实用程序将帮助您填充空闲空间,但您可能要考虑gparted Linux选项,因为目前在VirtualBox中引导MacOSX的唯一方法是hackintosh,并且在引导到MacOSX时不能扩展卷。您可能还想临时调整VM的gparted设置,以引导它。MacOSX分区被gparted识别为HFS -“堆文件系统”分区。


第四步-猫的照片

因为互联网。,)你完成了。使用VirtualBox for Windows享受您新的调整大小的虚拟.vmdk磁盘映像!

如果您希望结束返回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)。

附注:如果你的新大小太小,即使你的新vdi文件也会得到同样的错误。

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

将VMDK镜像克隆为VDI格式 VBoxManage clonehd”源代码。vmdk”“克隆。Vdi”——格式化Vdi 调整VDI映像的大小 VBoxManage modifyhd "克隆。Vdi”——调整大小51200 克隆回VMDK格式 VBoxManage clonehd克隆。vdi”“调整大小。Vmdk "——格式化Vmdk

如果可以使用VDI映像,则步骤3是可选的。

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

最后,您可能还需要在客户操作系统中更改磁盘大小:

运行客户操作系统,调整磁盘分区大小。如果您正在运行Linux,则可以使用gparted或kparted。

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


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

在主机上:

Open a terminal window. On Windows: Open the command prompt cmd. Go to the directory with the virtual disk you want to resize. For example: cd "My VMs" Create a new VirtualBox disk with your desired filename, size (in megabytes) and format (either Standard (dynamic) or Fixed). For example, to create a 50 GB fixed-format disk called MyNewDisk.vdi: VBoxManage createmedium --filename "MyNewDisk.vdi" --size 50000 --variant Fixed If VBoxManage is not recognized as a command, specify the full path to it. It can be found in the VirtualBox installation directory. On Windows the above command would become: "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createmedium --filename "MyNewDisk.vdi" --size 50000 --variant Fixed Copy the original disk to the new disk. VBoxManage clonemedium "MyOriginalDisk.vdi" "MyNewDisk.vdi" --existing The resize is done! You can check the properties of the new disk if you want: VBoxManage showmediuminfo "MyNewDisk.vdi" Change the virtual machine to use the new disk instead.

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

因为这是一个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。