从破损的Virtualbox计算机中恢复文件.vdi

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

与此同时,我在同一台笔记本电脑上的virtualbox上生成了一台新的12.04.1机器,我将使用那台机器代替borked机器。

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

我可以找到那里的文件,但它们大约有2个月的历史。 我认为这与上次我为机器创建虚拟机快照的时间不一致,但不是上次我有一台工作机器,这是昨天。 是否有任何方法可以在昨天崩溃之前安装vdi

编辑:

以下是Virtual Media Manager告诉我有关我的ubuntu64.vdi文件的信息: 在此处输入图像描述

EDITED2:

我将我的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 

EDITED3:

创建原始文件后,我使用Deeper Search运行testdisk ,得到如下列表: 在此处输入图像描述

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

在此处输入图像描述

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

命令行

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

 VBoxManage clonehd   --format RAW 

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

 testdisk  

虚拟机

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

在此处输入图像描述

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

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

  2. 安装testdisk 安装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//Snapshots/{###}.vmdk找到这些,但每当我们使用Virtual Box的快照function时,快照将写入差异文件。

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

     VBoxManage clonehd   

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

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

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

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

  • 选择要恢复的状态的UUID。
  • 打开文件.xml,最好在工具(Internet Explorer工作)中,以便轻松导航XML文件。
  • 在VERY BOTTOM,在Storage Controllers部分中,找到Current State的UUID,并注意StorageController name =,type =和AttachedDevice type =,port =和device = settings。
  • 在中间,找到您想要的快照。
  • 在快照的“存储控制器”部分中,找到AttachedDevice,其值(名称/类型/类型/端口/设备)与上面检索的值匹配。
  • 该映像UUID标识硬盘的快照映像。 删除{}括号,然后

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

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

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

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

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

我有一个Linux系统被损坏/fsck无法解决它 。 我使用了以下简单方法:

  1. 将新的替换VDI添加到计算机。
  2. 下载一个新的Linux ISO。
  3. 在(1)中添加的磁盘上引导并安装新的Linux。
  4. 将磁盘装入新系统并复制所需的文件。 通常,这意味着复制/home/user/文件夹。 请记住复制隐藏文件(设置文件)。

为我工作得很好。 磁盘损坏只会阻碍启动,我的主文件夹中没有数据丢失。