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

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

我在虚拟机上运行的 Ubuntu 12.04.1 在安装软件时空间不足,现在不重启。我需要从中恢复文件。ubuntu64.vdi我的 Windows 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

編輯3:

创建原始文件后,我运行testdiskDeeper Search得到如下列表: 在此处输入图片描述

完成后Deeper Search,我得到了如下列表:

在此处输入图片描述

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

答案1

命令行

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

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

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

testdisk <clone.raw>

虚拟机

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

在此处输入图片描述

启动虚拟 Ubuntu,我们已在其中添加了损坏的 .vdi,但是不要安装驱动器

  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 复制到健康虚拟机中的救援目录。

笔记:

  • 如果我们无法通过选项看到我们的[Quick Search]文件6.我们可能需要执行[Deeper Search]。这还将列出之前删除和覆盖的分区。因此我们需要确保选择适合存放数据的分区。

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

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

    VBoxManage clonehd <name_of_source> <clone>
    

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

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

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

答案2

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

  • 选择您想要恢复的状态的 UUID。
  • 打开 .xml 文件,最好使用能够轻松浏览 XML 文件的工具(Internet Explorer 可以)。
  • 在最底部的存储控制器部分,找到当前状态的 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) 中的步骤不起作用,您可以尝试以下其他步骤。如何克隆磁盘的当前状态:

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

此解决方案来自这里:(http://www.im-code.com/blog/blog/2012/02/04/virtualbox-clone-snapshots/) 两者谈论的大多是同一件事。

答案3

发现我的损坏的 vdi 文件可以使用以下方法恢复7-Zip,希望这个简单的方法也能帮助到别人。

答案4

插入 Ubuntu ISO 后启动旧虚拟机。Ubuntu 将分析该机器。选择“尝试 ubuntu”(显然不要安装任何东西,也不要删除任何数据)。启动后(它会启动,因为它使用的是 ubuntu iso,而不是旧的损坏安装),在浏览器(Nautilus)中选择“其他位置”以导航到旧数据并将其移动到安全的地方。

我没有尝试修复机器,但我只想恢复数据并将其移动到新的虚拟机。这样可能可以直接从实时启动的旧机器执行顶部答案所建议的操作。

相关内容