在VirtualBox中调整vhd硬盘驱动器后无法启动


15

在Windows 7中,我在VirtualBox中设置了另一个Windows 7 VM。它运作得很好。然后,我需要增加vhd HD大小。因此,我使用VBoxManage实用程序来执行以下注释:

VBoxManage modifyhd "c:\VMs\Win7.vhd" --resize 30000

然后,我尝试再次运行VM,但它无法启动,并给我以下错误:

致命:找不到可启动媒体!系统暂停。

然后,我试着看看VHD内部发生了什么,并尝试将其附加到设备管理中,并说它无法附加,因为文件或目录已损坏且无法读取

知道这里出了什么问题,如何在我的VHD文件中保存我的VM?


我刚刚遇到了完全相同的问题,我在网上找不到任何有用的解决方案,所以我开始根据微软的文档手工分析VHD。目前似乎在modifyhd的实现中存在错误,它在扩展块分配表之后没有调整数据块的偏移量。我需要做更多的实验来验证这一点。
billc.cn

在VirtualBox 4.3.10上,我调整了.vhd文件的大小。它看起来不仅没有调整块分配表指针,而且它将块分配表扩展为第一个数据块,覆盖我的MBR和分区表。不要使用VirtualBox来调整.vhd文件的大小!
亚伦

Answers:


12

不幸的是,VBoxManage --resize选项的VirtualBox文档具有误导性。您不仅可以增加磁盘映像的大小,还可以使一切正常运行。必须调整图像中的磁盘分区信息,以便客户操作系统知道磁盘映像正在模拟的“驱动器”的布局。您可以通过下载具有分区编辑器的可引导CD映像并将VM引导到该CD来完成此调整。然后,使用分区编辑器调整磁盘映像的分区以使用添加的空间。

有步骤的一篇精辟论述在这里 ; 跳到第4步。


嗯,那真是太糟糕了。这意味着我刚刚抛弃了3个小时的工作。谢谢(你的)信息。
tugberk

4
我遵循了很好的写法(在我调整了我的vhd并且无法从它启动之后),并且GParted没有在硬盘上显示任何分区,只有50演出的未分配空间。这是否意味着modifyhd将驱动器搞得无法修复?
GSerg 2013年


1

我有同样的问题,我设法使用GParted LiveCD 检索数据

  1. 创建新的VHD以接收复制的数据(创建分区和格式)
  2. 下载GParted LiveCD并在VirtualBox上启动
  3. 选择设备 - >尝试数据救援
  4. 单击确定,然后在扫描单击视图后(这将安装/ tmp / gparted-roview-XXXXXX)
  5. 在终端上,挂载第二个VHD(sudo mount / dev / sdb1 / mnt)
  6. 复制文件(sudo cp -R / tmp / gparted-roview-XXXXXX / * / mnt

之后,您可以关闭虚拟机并在Windows设备管理器上安装VHD。


1

他们在这里解释了问题(用西班牙语)

摘要:

一个。“vboxmanage modifyhd(resize)”在许多系统(Windows NT5,9x,Server和x86版本)中生成错误。结果是分区损坏,很难恢复

湾 您需要执行“vboxmanage modifyhd(resize)”(以调整VDI的大小)在包含与VDI关联的所有文件和文件夹的路径中。看图像

在此输入图像描述

在此输入图像描述

建议:

将“vboxmanage modifyhd”替换为“vboxmanage clonehd”

  1. 创建新的虚拟磁盘VDI(使用您要扩展的大小)。示例:Old.vdi有50gb。New.vdi用100GB创建它

    VBoxManage createhd --filename /path/New.vdi --size 100000

  2. 使用以下命令克隆它:

    vboxmanage clonehd /path/Old.vdi /path/New.vdi - 存在

注意两个VDI不应位于同一路径上

  1. 运行New.vdi并转到Windows计算机管理并扩展磁盘空间(分配空白区域)。如果您不想手动执行此操作,则可以使用任何免费的分区应用程序,例如AOMEI Partition Assistant StandardGParted和许多其他应用程序。

更新答案

0

值得注意的是,我得到了完全相同的问题,这是因为我在guest虚拟机运行时发出了命令modifyhd。官方文档没有说明,您必须先删除快照,并且该访客应该已经停止。

我的计划是在机器运行时调整磁盘大小,因为我有动态卷,也可以随时增加。然而,这是一个坏主意,因为我重新启动机器以获得完整的磁盘大小我在黑暗中留下了损坏的图像,即使没有使用testdisk也无法恢复。Testdisk找到分区,但文件系统严重受损,无法修复。

所以请注意:

  1. 将所有快照合并到基本映像中
  2. 关闭来宾操作系统

我已经在我的机器上重复了一个带有备份映像的程序,并且关闭了guest虚拟机,这很有效。


0

我能够恢复被这个bug破坏的图像。与爱迪生不同,gparted实时图像没有找到任何东西。这是我做的:

  • 首先,因为显然VBox对VHD的支持是错误和可怕的,所以首先将VHD转换为VDI VBoxManage clonehd foo.vhd --format vdi foo.vdi。当我跳过这一步时,我可以从图像中恢复文件,但在重新启动几次后它会再次“破坏”。我猜这个bug真的搞砸了VHD文件,以后I / O“重新打破”它... VBox似乎没有VDI的这些问题所以我放弃了VHD。

  • 启动到Windows预安装环境WinPE。如何做到这一点本身就是一篇文章。如果你不熟悉这里的快捷方式:从Windows安装DVD(Vista或更高版本)启动并在GUI启动后点击shift-F10,它会给你一个命令提示符。

  • 下载testdisk,找到一种方法将它放到你的WinPE图像上(或简单的USB棒可以工作),然后从WinPE环境运行它。(注意:WinPE缺少WOW64,32位应用程序的32位兼容层。因此,我的64位WinPE设置需要64位testdisk二进制文件。)

  • Testdisk找到了分区并恢复了它们。

  • 此时文件已恢复,但引导加载程序因几个问题而失败。首先,我使用的diskpart标记为活动分区(list disksel disk <disk number>sel par 0active)。更进一步,不会启动。回到WinPE并删除\boot,然后运行bcdboot C:\windows /s C:以重新安装引导程序。

  • 最后我跑去chkdisk /R确保图像没问题。花了几个小时,没有发现任何问题。


-1

我有同样的问题,GParted根本没有识别分区,它显示为未分配的空间。此时我明白数据可能已丢失。

然后我记得使用testdisk查找硬盘驱动器上丢失的分区,为什么不在虚拟磁盘上尝试呢?它起作用了。

  1. 从GParted启动,在写这个回复时,GParted里面有“testdisk”。只需运行终端,运行“sudo testdisk / dev / sda”或其在计算机中显示的任何内容。运行“sudo fdisk -l”以显示所有磁盘。
  2. 分析分区表,它将立即发现分区,因为它仍然在第一个扇区。编写新的分区,表,然后按照此链接的说明继续GParted继续恢复:http//www.howtogeek.com/124622/how-to-enlarge-a-virtual-machines-disk-in-virtualbox -或VMware的/
  3. 下次要执行此操作时,请先复制VDISK。
  4. 我在下面的链接中注意到他们创建了新的VHD然后克隆 - 现有:http://tips.kaali.co.uk/2012/03/16/expand-or-increase-the-size-of-virtual- box-vdi-dis / 我还没试过,但我按照上面的说明恢复了我的磁盘。

希望这有助于某人。


请引用参考链接中答案的基本部分,因为如果链接页面发生变化,答案可能无效。
DavidPostill
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.