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


23

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

并行地,我在同一台笔记本电脑的virtualbox上生成了一个新的12.04.1计算机,我将使用那台计算机代替枯燥的计算机。

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

我可以在其中找到文件,但是它们大约有两个月的历史了。我认为这与我上次对计算机进行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,我得到这样的列表: 在此处输入图片说明

Ater Deeper Search完成了,我得到了这样的列表:

在此处输入图片说明

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


@Takkat,听起来很酷。我怎样才能做到这一点?
719016 2014年

@Takkat,我做到了,并使用gnome nautilus进行了安装,但是我相信它安装了两个月的旧版计算机。
719016 2014年

2
这里的问题不是如何恢复磁盘,而是如何与快照合并。如果尝试克隆您的vdi,它将有另一个uuid,快照将无法使用它,并且您会丢失最新数据。我不定期使用快照,因为过去曾经损坏过磁盘,并且能够恢复基本磁盘,但总是丢失增量。我希望这里的人能提供一个很好的方法来恢复基数和增量。
Pablo Marin-Garcia

1
这是下一次:永远不要将数据存储在虚拟机上,始终安装外部驱动器...或通过进行频繁的备份/同步rsync

1
尝试克隆最新快照,而不是原始磁盘。您应该使用Vboxmanage clonehd 2208...(在此处复制最新的UUID)。请参阅serverfault.com/a/506581/195528
Rmano 2014年

Answers:


21

命令行

如果我们使用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保存数据。


感谢这些精妙的详细说明。我正确地遵循了它们,并添加了文件以复制到我的救援文件夹中。复制成功,但是文件的时间戳很旧:2013年夏天,而不是两天前。我不记得我是否在8个月前做了任何特别的事情,但是乍一看,我两天前的文件都不在那里。我现在正在使用Deeper Search它再次浏览。
719016 2014年

@ 213441265152351-也可以查看快照文件夹...可能有一个更新的.vmdk(至少是我的系统在这里)。希望您能找到自己的数据:)
Takkat 2014年

我做了一个Deeper Search,几个小时后,再次浏览了我想恢复的内容:它们仍然指向虚拟机的2013年夏季版本,而不是仅仅使用gnome nautilus挂载分区,这给了我一月份的机会。 2014版本,但仍无法找到两天前的文件。
719016 2014年

1
@ 213441265152351:那就更复杂了。发生“崩溃”时,差异图像可能尚未正确写入驱动器。您可以尝试从Virtual Media Manager中查看磁盘(请参阅virtualbox.org/manual/ch05.html#diffimages),以查看是否是这种情况,但是我不得不说,那样的话如何从这些图像恢复数据的想法。
塔卡特2014年

2
@Rmano:实际上,克隆的VDI将不包含任何快照,但将是虚拟机的最新状态,其中合并了差异。仅在需要克隆较早快照的情况下,才可以使用快照VDI进行克隆,但迟于快照的所有更改将不包括在克隆中。
塔卡特2014年

5

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

  • 选择您要恢复的状态的UUID。
  • 打开文件.xml,最好在一种工具(Internet Explorer可以运行)中,该工具可以轻松浏览XML文件。
  • 在非常底部的“存储控制器”部分中,找到“当前状态”的UUID,并记下StorageController名称=,类型=和AttachedDevice类型=,端口=和设备=设置。
  • 在中间,找到所需的快照。
  • 在快照的“存储控制器”部分中,找到具有与上面检索的值匹配的值(名称/类型/类型/端口/设备)的AttachedDevice。
  • 该映像UUID标识硬盘的快照映像。卸下{}括号,然后

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

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

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

  • 打开虚拟介质管理器(菜单:文件>虚拟介质管理器)。
  • 导航到要克隆的硬盘,然后完全展开树(使用数字小键盘上的*键)。
  • 找到您要克隆其当前状态的VM附带的{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/)两者大致相同。


1

我的Linux系统损坏了/fsck无法修复。我使用以下简单方法:

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

对我来说很好。磁盘损坏只是阻碍启动,我的主文件夹中没有数据丢失。

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.