从损坏的 Virtualbox 机器 .vdi 中恢复文件

719*_*016 25 virtualbox vdi

我在 virtualbox 上运行的 Ubuntu 12.04.1 在我安装软件时空间不足,现在它没有重新启动。我有文件需要从中恢复。我的ubuntu64.vdiWindows 7(主机)笔记本电脑上有该文件,我想知道是否有任何方法可以从 vdi 文件中恢复文件。

同时,我在同一台笔记本电脑的 virtualbox 上生成了一台新的 12.04.1 机器,我将使用那台机器而不是那台无聊的机器。

我可以将 borked 添加vdi到工作磁盘列表中。然后我使用 gnome nautilus 来挂载 borked 磁盘。

我可以在那里找到文件,但它们大约有 2 个月大。我认为这与我最后一次对机器进行 virtualbox 快照相吻合,但不是我最后一次得到一台可以工作的机器,那是昨天。有没有办法在vdi昨天崩溃之前安装它?

编辑:

这是Virtual Media Manager告诉我有关我的ubuntu64.vdi文件的内容: 在此处输入图片说明

编辑2:

我将我的复制ubuntu.vdi到具有足够磁盘空间的外部 USB。我尝试使用 Windows 克隆它,但出现错误:

在此处输入图片说明

我通过 USB 驱动器的共享文件夹从工作 VM 尝试了相同的操作,并开始克隆。花了一段时间,但成功完成:

root@precise64:/media/sf_E_DRIVE/copy_of_ubuntu64_vm_folder_20140224/ubuntu64# 
VBoxManage clonehd ubuntu64.vdi ubuntu64.raw --format RAW
0%...

10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'RAW'. UUID: 90f99198-18e1-40ee-85fe-c083dcbb1ac3
Run Code Online (Sandbox Code Playgroud)

编辑 3:

创建原始文件后,我跑testdiskDeeper Search,我得到这样的列表: 在此处输入图片说明

AterDeeper Search已经完成,我得到一个这样的列表:

在此处输入图片说明

但我不知道哪个是哪个快照......有什么想法吗?

Tak*_*kat 21

命令行的

如果我们使用 Ubuntu 作为主机,我们可以使用以下命令将 .vdi 磁盘转换为原始磁盘:

VBoxManage clonehd <sourcename> <clone.raw> --format RAW
Run Code Online (Sandbox Code Playgroud)

然后我们可以打开testdisk 安装测试盘 使用此文件恢复虚拟驱动器映像上的文件(另见下文):

testdisk <clone.raw>
Run Code Online (Sandbox Code Playgroud)

一个虚拟机

如果损坏的 VDI 驱动器映像仍然在 Virtual Box 中注册,我们可以将此映像作为驱动器添加到我们的新虚拟机中:

在此处输入图片说明

启动我们添加了损坏的 .vdi 但不要挂载驱动器的虚拟 Ubuntu 。

  1. 在已安装的分区上创建一个目录来保存收集的数据(例如~/rescued),

  2. 安装测试盘 安装测试盘 在虚拟机上。

  3. 从那里的终端启动 testdisk:

    sudo testdisk
    
    Run Code Online (Sandbox Code Playgroud)
  4. 选择适当的驱动器来收集数据(此处显示为/sdb)并选择[Proceed]

    在此处输入图片说明

  5. 选择合适的分区布局(通常Intel

  6. 选择[Analyse]-[Quick Search]

  7. 选择包含要收集的数据的分区(这里只存在一个 NTFS 分区):

    在此处输入图片说明

  8. P 列出该分区上的文件。

  9. 浏览到包含数据的目录。查看文件名以确保您选择了正确的文件名。

  10. 选择要使用的目录或文件 : 。所有选定的文件/目录将被标记为绿色:

    在此处输入图片说明

  11. 按大写 C 将所有选定的目录/文件复制到下一步将选择的救援目录中。

  12. 在 Ubuntu VM 的挂载分区上选择一个目录来保存获救的数据:

    在此处输入图片说明

  13. c 开始将数据从损坏的 .vdi 复制到健康 VM 中的救援目录。

笔记:

  • 如果我们无法使用6 中[Quick Search]选项查看我们的文件,我们可能必须执行. 这还将列出以前删除和覆盖的分区。因此,我们需要确保选择数据所在的适当分区。[Deeper Search]

  • 如果我们拍摄了 .vdi 的快照,我们可能会在其中找到这些,~/.VirtualBox/Machines/<Name of Machine>/Snapshots/{###}.vmdk但是每当我们使用 Virtual Box 的快照功能时,快照中的任何更改都将写入差异文件。

    要将差异文件与硬盘驱动器合并,我们需要删除所有快照(这可能不是我们想要的,因为我们可以恢复到以前的快照而不是调用数据恢复),或者我们需要使用以下命令克隆机器的驱动器:

    VBoxManage clonehd <name_of_source> <clone>
    
    Run Code Online (Sandbox Code Playgroud)

    然后我们将克隆绑定到我们的救援 VM,如上所示。

  • 写入损坏的 .vdi 应仅在数据安全后进行,因为这可能会进一步损坏文件系统。

  • 如果我们的救援 Ubuntu 太小而无法保存获救的数据,我们可能会创建另一个新的虚拟驱动器来绑定到 VM。然后必须将该驱动器安装在 VM 中才能将测试磁盘中的数据保存在那里。

  • @Rmano:实际上克隆的 VDI 将不包含任何快照,但将是合并差异的 VM 的最后当前状态。仅当我们需要克隆较早的快照时,我们才可以使用快照 VDI 进行克隆,但在快照之后的所有更改都不会包含在克隆中。 (2认同)

Dee*_*Dee 5

1)尝试通过UUID恢复快照,使用以下hack:

  • 选择要恢复的状态的 UUID。
  • 打开文件 .xml,最好在允许轻松导航 XML 文件的工具(Internet Explorer 工作)中。
  • 在 VERY BOTTOM 的 Storage Controllers 部分,找到当前状态的 UUID 并记下 StorageController name=、type= 和 AttachedDevice type=、port= 和 device= 设置。
  • 在中间,找到你想要的快照。
  • 在快照的存储控制器部分中,找到具有与上面检索到的值匹配的值(名称/类型/类型/端口/设备)的 AttachedDevice。
  • 该映像 UUID 标识硬盘的快照映像。删除 {} 括号,并

输入命令 C:> VBoxManage clonehd <UUID> CloneDisk.vdi

希望它有所帮助,我确实在这里找到了解决方案:(https://forums.virtualbox.org/viewtopic.php?t=791

2) 如果 1) 中的步骤不起作用,您可以尝试其他步骤。如何克隆磁盘的当前状态:

  • 打开虚拟媒体管理器(菜单:文件>虚拟媒体管理器)。
  • 导航到要克隆的硬盘并完全展开树(使用数字键盘上的 * 键)。
  • 找到附加到要克隆当前状态的 VM 的 {hexUUID}.vdi 文件。它将是分支末尾的(之一)叶文件。当您选择它时,窗口底部的“附加到:”文本将显示:“附加到:”,后面没有任何(快照名称)在括号中。
  • 单击窗口底部显示的“位置:”右侧的文件名。
  • Ctrl+C / Copy 将文本复制到剪贴板,内容类似于:(path){b6441469-5ccb-418c-8fdd-73c5e1a17314}.vdi
  • Ctrl+V / 粘贴并提取 hexUUID 值(去掉 {} 括号)并运行 clonehd 来克隆它!

这个解决方案来自这里:(http://www.im-code.com/blog/blog/2012/02/04/virtualbox-clone-snapshots/)两者大致相同。