如何在Windows中使用Modifyhd命令更改固定大小的VDI?


70

我试图弄清楚如何更改VDI文件的大小。我是VirtualBox的新手,我需要学习很多东西。但是我认为我掌握了基本知识。我已经作为第一位客人安装了Windows 7。主机也是Windows7。我不确定要分配多少磁盘空间,因此我选择了40 GB的VDI大小和固定大小的VDI以提高性能。但是我现在改变了主意,我想再添加10 GB。我一直在该程序中单击并阅读“帮助”菜单的内容,但没有帮助。它说明了磁盘控制器,SAS,SATA,SCSI,yada,yada,但不是我要的内容。

我在万维网上搜索了答案,VirtualBox论坛说,如果您想使用最简单的方法(某些mod会粘贴),则应该使用Gparted。一些用户讨论使用dd命令。但这就是Linux的全部。另外,SU上还有很多问题,涉及增加和减小VDI文件的大小,但是它们都是关于使用Linux作为主机以及Windows作为来宾的。

我找到了一篇不错的博客文章,内容涉及如何使用modifyhdVBoxManage命令。这个家伙也在Linux作为主机OS上做到这一点。他甚至希望VDI文件的大小与我的VDI文件大小相同(50 GB),这是一个巧合。所以我想无论如何都要尝试一下,要么尝试一下,要么尝试一下。可能出什么问题了?好吧,这是我得到的丑陋惊喜。

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" --resize 51200
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage.exe: error: Resize hard disk operation for this format is not impleme
nted yet!

C:\Program Files\Oracle\VirtualBox>

一种

现在说什么?!...无法调整VDI格式的虚拟硬盘的大小?你不说吗 不支持您自己的格式?现在呢...

真的没有简单的方法来更改VDI文件的大小,最好是在VirtualBox中单击几下吗?有什么进展吗?


4
我删除了对VirtualBox质量的抱怨,但对问题没有任何帮助。
sleske

1
为了将来参考,modifyhd现在称为,modifymedium但仍向后兼容-请参阅virtualbox.org/manual/ch08.html#vboxmanage-modifyvdi
djule5 '16

Answers:


121

摘要:

  • 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即可在其中扩展分区。

屏幕截图

一种 b C d Ë F G

参考



好眼睛!我已经更正了Modifyhd参数。谢谢您引起我的注意。
萨米尔2014年

2
一个非常好的书面答案!恕我直言,这应该获得很多选票。
约翰·卡尔森

+1:是像您这样的人以及您自由共享的知识,这使StackExchange生态系统成为了绝佳的资源!
Homunculus Reticulli 2015年

1
如果由于使用快照而遇到问题,请查看virtualbox.org/ticket/9103。基本上,您需要在快照文件本身上应用modifymedium/ modifyhd操作。
djule5 '16

11

这是一个相当简单的过程,适用于我将Mac(OS X 10.9.4)和Linux(Ubuntu 14.04)作为来宾OS运行的Mac(OS X 10.9.4)上的VirtualBox(v。4.3.16)固定大小的磁盘大小调整为60GB动态磁盘:

在Mac上的终端中,将CD放入带有VDI文件的目录中,然后键入以下内容:

VBoxManage showhdinfo mydisk.vdi  
VBoxManage clonehd mydisk.vdi mydiskClone.vdi  
VBoxManage modifyhd mydiskClone.vdi --resize 61440  
VBoxManage showhdinfo mydiskClone.vdi

在“ VirtualBox应用程序存储”部分,将mydiskClone.vdi添加为第二个HD,然后正常启动VM。

在来宾操作系统的外壳中,键入:

sudo fdisk /dev/sdb
- delete all partitions
- create new partition on full disk

重新启动来宾。恢复后,再次进入外壳并键入:

sudo resize2fs /dev/sdb1

关闭来宾操作系统。

再次在VirtualBox应用程序存储部分中,将mydiskClone.vdi设置为启动磁盘。然后启动来宾操作系统,并使用文件浏览器中“计算机”的属性来验证新的磁盘大小。


这个答案没有道理。您首先在/ dev / sdb上创建一个大分区,然后调整其大小,但首先不创建文件系统。您是否忘记了复制原始分区的步骤?
sleske

5

克隆实际上是一个更好的解决方案,并且有一种更简单的方法。

从文件菜单中,选择虚拟媒体管理器,然后单击复制。源将是您的原始固定大小的vdi硬盘,而目的地将是您选择的新内容(包括新选项)。


这是sammyg答案的一部分。
Efren'2

4

好的,所以我做到了没有克隆

我有一个100GB的VDI文件(固定格式),上面装有Ubuntu。工作正常。我想通过缩小VM释放主机中的一些空间。

脚步:

  1. 清理

删除不需要的文件。45GB免费。我只需要释放30GB。

  1. 修复来宾操作系统

我只有一个分区,因此无法在来宾Ubuntu内部执行任何操作。在虚拟机中挂载Ubuntu Live并从中启动。

用于gparted将分区缩小到70GB。在中未使用的空间中创建了一个新分区ext4

  1. 清除可用空间

新分区中的可用空间(30GB)。

遵循本指南:在Ubuntu上使用Zerofree将虚拟硬盘驱动器作为Guest和Host OS进行压缩

我的新分区是/dev/sda3

$ sudo apt-get install zerofree
$ sudo init 1

...

# mkdir /tmp3
# mount -o ro -t ext4 /dev/sda3 /tmp3
# zerofree -v /dev/sda3
  1. 压缩VDI

    VBoxManage Modifyhd“ ubuntu.vdi”紧凑

花费了一段时间,但成功了!


1
您确定这可行吗?根据VirtualBox手册,--compact仅适用于动态分配的图像,不适用于固定大小的图像。
sleske

1
@ ATOzTOA:如果磁盘映像文件增加,则它不是“固定格式”映像,而是“动态分配”映像,这就是您在回答中所写的内容。
sleske

3
不,那是动态分配的图像。引用手册的内容:“如果创建固定大小的映像,则会在主机系统上创建一个映像文件,该映像文件的大小与虚拟磁盘的容量大致相同。” virtualbox.org/manual/ch05.html#vdidetails
sleske 2015年

1
“固定尺寸的图像表示它不能超过指定的尺寸。” 没有。“固定大小”表示大小是固定的,因此始终相同。阅读文档。
sleske 2015年

1
如果有人正在阅读此书,并且不确定谁是正确的。@sleske是正确的。固定尺寸的图像与他们所说的完全一样。固定为创建图像时指定的尺寸。在基准测试中,与动态分配的图像相比,这提供了更高的性能,因此,将VBox用于高清密集型任务的任何人都应该考虑使用这种格式,尽管有其局限性。
杰克

2

这里晚会有点晚,但是我会加2美分。首先,我要说的是,这是一个复杂的过程,将使大多数临时用户难以理解。为什么Oracle没有在VBox GUI中包括它是一个谜。

步骤1:使用Windows命令行(VBoxmanage)增大驱动器大小。这里的一个提示是使用vdi驱动器的ID,而不是无休止地尝试输入文件位置并获取错误消息。

步骤2:然后,您需要扩展主分区以利用新空间。下载gparted iso,并使用Vpart作为IDE源在VBox中创建一个新的虚拟机。然后,使用现有的VDI驱动器作为sata磁盘。不要为此计算机创建虚拟驱动器。启动新计算机,您将运行gparted Gui。这可能需要重新启动几次才能使自己理清。

gparted运行后,您将看到要调整大小的vdi驱动器的分区。重要说明:您将必须删除扩展分区并交换文件空间,才能增加主分区的大小,因此不要为PP分配所有新空间。完成此操作后,您将必须为新的扩展分区指定剩余空间,并在其中创建新的交换文件空间。我发现这比在命令行中轻松进行容易得多。

这不是小菜一碟,但确实可行……我花了半天的时间研究网络才能弄清楚这一点。在VBox上运行win8.1 / Ubuntu

威利


2

这是我调整/放大/扩展固定VDI图像的方式(我缩小它们的过程在另一个答案中):

  1. 使用VirtualBox创建所需大小的新磁盘(大小必须至少与原始磁盘相同)。为此,请打开来宾VM的VirtualBox设置,导航到“存储”,单击HDD控制器(例如“ SATA”),然后单击“ +”添加硬盘。然后根据需要配置新磁盘。
  2. 下载gparted实时ISO并配置来宾VM从中引导(同样,存储设置)。
  3. 备份来宾VM的当前存储。
  4. 引导来宾VM(应引导到gparted实时环境中)。从gparted环境内部:
    1. 使用gparted应用程序来验证您现有的磁盘为“ / dev / sda”,新的(较大的)磁盘为“ / dev / sdb”(右上角下拉菜单)。
    2. 关闭gparted应用程序。
    3. 用root privs打开一个终端(右键单击桌面-> Terminals->具有root特权的终端)。
    4. 键入以下命令:dd if=/dev/sda of=/dev/sdb status=progress bs=128M并等待其完成。这会将原始磁盘逐字节复制到新磁盘,包括MBR等。(注意:这可能需要一段时间才能完成,具体取决于原始磁盘的大小,主机上磁盘的速度等)。(注意:如果您的来宾VM分配了> 1GB RAM,则可以将'​​bs'参数更改为“ bs = 256M”,这可能会加快复制速度)。
    5. 重新打开gparted应用程序
    6. 从右上角的下拉列表中选择新的(更大)驱动器(应为/ dev / sdb)。
    7. 根据需要扩展分区。要扩展不位于最后的分区,您可能必须移动要扩展的分区之后的分区。根据分区方案的具体情况,您可能需要分多个步骤执行此操作,例如将最后一个分区扩展到最后,然后通过将所有内容移到最后来缩小它。在我的情况下,我的最终分区是linux-swap,所以我只是删除了它,根据需要扩展了主分区,然后在最后重新创建了swap分区(注意复制其原始分区方案)。
    8. 应用更改。
    9. 此时,您应该拥有一个包含所有原始内容的新固定大小磁盘,并且比原始磁盘有更多的空间。您可以在gparted live env中挂载新磁盘并进行验证。
    10. 关闭来宾VM(实时分区),然后从VM驱动器中删除ISO。
  5. 转到访客VM的“ VBox设置”,导航到“存储”,然后从列表中删除原始磁盘(右键单击并选择“删除附件”)。这应该为虚拟机保留新创建的磁盘。注意:此步骤只是从来宾VM的配置中删除磁盘-您的原始来宾VM磁盘(即较小的磁盘)在主机上仍然可用。
  6. 引导虚拟机,尽情享受吧!
  7. (一旦确认一切正常,就可以删除原始VM磁盘。)

虽然以上对我来说很有效,但如果使用LVM,似乎还需要一些步骤。(注意:如果使用LVM,则可以简单地添加所需大小的新磁盘,然后将该磁盘添加到卷组中。)对于使用了LVM的CentOS 6.6,我也不得不增加LVM中的空间。因此,在启动上面创建的新磁盘之后,我按照以下步骤进行了一些操作(其中的不同部分将根据您的设置名称而有所不同):

  1. 获取有关LVM设置的信息:

    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  31.51g    0 
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 31.51g    0 
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 28.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  2. 扩展物理体积(PV)(体积组(VG)将自动反映相同的增长):

    # pvresize /dev/sda2
      Physical volume "/dev/sda2" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    # pvs
      PV         VG          Fmt  Attr PSize  PFree
      /dev/sda2  vg_rhel6bm1 lvm2 a--  39.51g 8.00g
    # vgs
      VG          #PV #LV #SN Attr   VSize  VFree
      vg_rhel6bm1   1   2   0 wz--n- 39.51g 8.00g
    
  3. 扩展逻辑卷(LV):

    # lvextend /dev/vg_rhel6bm1/lv_root /dev/sda2
      Size of logical volume vg_rhel6bm1/lv_root changed from 28.31 GiB (7247 extents) to 36.31 GiB (9295 extents).
      Logical volume lv_root successfully resized
    # lvs
      LV      VG          Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv_root vg_rhel6bm1 -wi-ao---- 36.31g
      lv_swap vg_rhel6bm1 -wi-ao----  3.20g
    
  4. 扩展文件系统:

    之前:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             28G   24G  3.1G  89% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

    命令:

    # resize2fs /dev/mapper/vg_rhel6bm1-lv_root
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/mapper/vg_rhel6bm1-lv_root is mounted on /; on-line resizing required
      old desc_blocks = 2, new_desc_blocks = 3
      Performing an on-line resize of /dev/mapper/vg_rhel6bm1-lv_root to 9518080 (4k) blocks.
      The filesystem on /dev/mapper/vg_rhel6bm1-lv_root is now 9518080 blocks long.
    

    后:

    # df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_rhel6bm1-lv_root
                             36G   24G   11G  69% /
      tmpfs                 939M  232K  939M   1% /dev/shm
      /dev/sda1             477M   85M  368M  19% /boot
    

好答案!欢迎光临本站!
djsmiley2k-CoW

1

这是我调整/缩小/缩小固定VDI图像的方式(我扩展它的过程在同一主题的另一个答案中):

首先,简要介绍为什么我需要这样做(因为有很多方案可以缩小VDI,但使用这种方法可能不可行):几年前,我为Windows Server guest虚拟机创建了固定的VDI,并将其大小设置为600GB。我不记得为什么选择这种大小,但是到今天为止,我在该访客中仅消耗了100GB,我想回收剩余的大部分空间。因此,就我而言,我想保留来宾中的所有数据,而只想释放来宾中未使用的空间。

(以下步骤主要是根据我在过去2个小时内所做的事情而做的,因此,如果我在这里错过了一些事情,深表歉意。)

  1. 确定您希望新的大小是多少。自然,您可能想要为访客留出一些超出当前消耗空间的空间。大小必须至少与源/原始磁盘中的数据相同,并四舍五入到最接近的GB。
  2. 使用VirtualBox创建一个新的固定大小的磁盘,其大小与上一步中确定的大小相同。为此,请打开来宾VM的VirtualBox设置,导航到“存储”,单击HDD控制器(例如“ SATA”),然后单击“ +”添加硬盘。然后根据需要配置新磁盘。
  3. 下载gparted实时ISO并配置来宾VM从中引导(同样,存储设置)。
  4. 备份来宾VM的当前存储。
  5. 引导来宾VM(应引导到gparted实时环境中)。从gparted环境内部:

    1. 使用gparted应用程序确定哪个磁盘是“原始”磁盘,哪个磁盘是“新”磁盘。原始分区将至少具有一个分区,而新分区将完全空白。(通常,“原始”磁盘是分配给/ dev / sda的第一个磁盘,而“ new”磁盘是分配给/ dev / sdb的第二个磁盘。)
    2. 使用gparted应用程序将原始/源分区缩小到所需的大小。 完成所有操作后,请记住单击“应用”按钮。(这可能需要一些时间才能完成,具体取决于您的分区大小和磁盘速度。)
    3. 使用gparted应用程序在新磁盘上创建一个分区表(设备->创建分区表...,将类型保留为MSDOS)。
    4. 使用gparted应用程序在新磁盘上创建相同的分区。(为确保它们相同,我使用Partition-> Information ...菜单选项在原始磁盘上提取了每个分区的详细信息,并保存了在创建相同分区时使用的屏幕快照( s)在新/目标磁盘上。)请确保:
      • 创建每个目标分区,使其大小与(新调整的)原始分区相同。
      • 将分区上的所有标志设置为匹配(创建分区后可能需要完成)。
      • 在分区上设置任何标签以匹配。
      • (注意:复制数据后,UUID将自动设置。)
    5. 单击“应用”按钮以提交所有更改。
    6. 记下哪个磁盘是“原始”磁盘,哪个是“新”磁盘,并记下相应分区的编号(例如/ dev / sda1-> / dev / sdb1,/ dev / sda2-> / dev / sdb2, ...)
    7. 关闭gparted应用程序。
    8. 用root privs打开一个终端(右键单击桌面-> Terminals->具有root特权的终端)。
    9. 假设您的“原始”磁盘是/ dev / sda,“新”磁盘是/ dev / sdb(如果不是,请适当调整以下命令),那么我们将一次复制一个分区。对于从上一步记下的每个分区,在终端中输入以下命令:

      # dd if=/dev/sda1 of=/dev/sdb1 status=progress bs=128M
      

      然后等待它完成。这会将字节1从原始磁盘复制到新磁盘上的分区1。
      对其余每个分区重复此命令:

      # dd if=/dev/sda2 of=/dev/sdb2 status=progress bs=128M
      # dd if=/dev/sda3 of=/dev/sdb3 status=progress bs=128M
      # ...
      

      笔记:

      • 这可能需要一段时间才能完成,具体取决于分区的大小,主机上磁盘的速度等)。
      • 如果您的来宾VM分配了大于1GB的RAM,则可以将“ bs”参数更改为“ bs = 256M”,这可能会加快复制速度。
    10. 此时,您应该拥有一个包含所有原始内容的新的固定大小磁盘,以及一个比原始内容小的VDI文件。您可以将新磁盘安装在gparted live env中,并验证数据是否全部存在。
    11. 关闭来宾虚拟机(gparted live),然后从VM驱动器中删除gparted ISO。
  6. 转到访客VM的“ VBox设置”,导航到“存储”,然后从列表中删除原始磁盘(右键单击并选择“删除附件”)。这应该为虚拟机保留新创建的磁盘。注意:此步骤只是从来宾VM的配置中删除磁盘-您的原始来宾VM磁盘(即大型VDI)在主机上仍然可用。
  7. 我为Windows guest虚拟机要做的最后一步是设置/修复MBR和/或BCD。(我还不知道Linux来宾是否需要执行任何此操作。)如果仅从新的VDI引导,则会显示包含此内容的Windows引导管理器错误屏幕(不幸的是,我没有这样做)在解决问题之前先抓取屏幕截图):

    windows failed to start
    status 0xc000000e
    information A required device isn't connected or can't be accessed.
    
  8. 获取Windows安装或修复的ISO(最好是与您的OS版本匹配的ISO),并将来宾VM配置为从中引导(同样,存储设置)。

  9. 启动来宾VM,然后选择从CD / DVD引导。

    1. 由于Windows安装/修复的每个版本都不相同,因此我无法在此为所有人提供确切的步骤。但想法是选择“修复”选项,并找到进入命令提示符的方式。对于Windows Server 2012,我必须:(a)选择我的语言/语言环境;(b)选择左下角的“修复计算机”;(c)选择“疑难解答”;(d)选择“命令提示符”。
    2. 在命令提示符下,运行以下命令(感谢http://loverofcode.blogspot.com/2013/11/fixed-0xc000000e-boot-error.html提供的信息!):

      > bootrec /fixmbr
      > bootrec /fixboot
      > bootrec /rebuildBcd
      

      最后一个命令应该找到Windows安装并提示将其添加到BCD。回答“ Y”。

    3. 退出命令提示符,然后关闭来宾VM。
  10. 转到来宾VM的VBox设置,导航到“存储”,然后从CD / DVD驱动器中删除Windows Install / Repair ISO。
  11. 引导虚拟机,尽情享受吧!
  12. (一旦确认一切正常,就可以删除原始VM磁盘。)

0

我提供了一个扩展到在任何主机操作系统上运行的任何托管操作系统的答案。此答案假定您要增加尺寸(以扩大)。

注意:正如djule5所指出的(请参阅问题后面的注释),modifyhd现在称为modifymedium(但仍向后兼容)。在这里我用modifymedium

1.退出正在运行的虚拟机

是的,此答案适用于VirtualBox VM已使用的VDI文件。

2.在主机上打开一个终端以调整磁盘映像的大小

命令行VBoxManage不想使用VDI文件名来调整磁盘映像的大小。

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage modifymedium my_disk_image.vdi --resizebyte 16260316160                                                                      VBoxManage: error: Cannot register the hard disk '/home/user/vm/my_disk_image.vdi' {181540c7-b791-4b2f-8e01-5feaff04a6eb} because a hard disk '/home/user/vm/my_disk_image.vdi' with UUID {181540c7-b791-4b2f-8e01-5feaff04a6eb} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 179 of file VBoxManageDisk.cpp

因此,请确定您的磁盘映像的UUID。

$ ls -s1 *.vdi
10260316160 my_disk_image.vdi

$ vboxmanage list hdds
UUID:           181540c7-b791-4b2f-8e01-5feaff04a6eb
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /home/user/vm/my_disk_image.vdi
Storage format: VDI
Capacity:       10240 MBytes
Encryption:     disabled

扩展磁盘映像大小。

$ vboxmanage modifymedium 181540c7-b791-4b2f-8e01-5feaff04a6eb --resizebyte 16260316160
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

3.使用分区工具扩展逻辑分区

运行您的托管VM。然后使用分区工具

用于托管GNU / Linux的一些工具:

如果托管系统使用Windows:

4.检查分区的可用空间

您的VDI文件(在主机系统上)的大小可能没有更改,因为您的VM尚未使用多余的空间。玩得开心。


-1

这将对我有用,并且应指定硬盘容量的总量。不是我们需要增加的空间...

C:\ Program Files \ Oracle \ VirtualBox> VBoxManage.exe Modifyhd“ D:\ Virtual Machine \ VirtualBox VMs \ Windows 7(FileZilla Server)\ Windows 7(FileZilla Server).vdi”-调整大小15360

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.