当前位置: 首页>>技术教程>>正文


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

,

问题描述

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

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

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

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

编辑:

以下是 Virtual Media Manager 告诉我的关于我的 ubuntu64.vdi 文件的内容:

编辑2:

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

我通过 USB 驱动器的共享文件夹在工作虚拟机上尝试了相同的操作,它开始了克隆。花了很长时间,但成功完成:

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

编辑3:

创建原始文件后,我使用 Deeper Search 运行 testdisk ,得到如下列表:

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

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

最佳方法

命令行的

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

VBoxManage clonehd <sourcename> <clone.raw> --format RAW

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

testdisk <clone.raw>

虚拟机的

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

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

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

  2. 在虚拟机上安装 testdisk

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

    sudo testdisk
    
  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>
    

    然后我们将克隆绑定到我们的救援虚拟机,如上图所示。

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

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

次佳方法

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

  • 选择要恢复的状态的 UUID。

  • 打开文件 .xml,最好使用允许轻松导航 XML 文件的工具(Internet Explorer 工作)。

  • 在 VERY BOTTOM 的 Storage Controllers 部分,找到 Current State 的 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 文件。它将是分支末尾的叶文件之一。当您选择它时,窗口底部的“附加到:”文本将显示:“附加到:”,后面的括号中没有任何(快照名称)。

  • 单击窗口底部显示的 ‘Location:’ 右侧的文件名。

  • Ctrl+C /Copy 将文本复制到剪贴板,类似于:(path){b6441469-5ccb-418c-8fdd-73c5e1a17314}.vdi

  • Ctrl+V /粘贴并提取 hexUUID 值(删除 {} 括号)并运行 clonehd 克隆它!

这个解决方案来自这里:( http://www.i-m-code.com/blog/blog/2012/02/04/virtualbox-clone-snapshots/ )两者都说得差不多。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12630.html,未经允许,请勿转载。