从破损的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
虚拟机
如果破坏的VDI驱动器映像仍然在Virtual Box中注册,我们可以将此映像作为驱动器添加到我们的新虚拟机:
启动我们添加了损坏的.vdi的虚拟Ubuntu但不安装驱动器 。
-
在那里的已安装分区上创建一个目录来保存收集的数据(例如
~/rescued
), -
安装testdisk 在虚拟机上。
-
从终端启动testdisk:
sudo testdisk
-
选择适当的驱动器以从中获取数据(此处显示为
/sdb
)并选择[Proceed]
-
选择适当的分区布局(通常是
Intel
) -
选择
[Analyse]
–[Quick Search]
-
选择包含要收集的数据的分区(此处仅存在一个NTFS分区):
-
按P列出该分区上的文件。
-
浏览到包含数据的目录。 查看文件名以确保您选择了正确的文件名。
-
选择要使用的目录或文件: 。 所有选定的文件/目录都将标记为绿色:
-
按下大写字母C将所有选定的目录/文件复制到将在下一步中选择的急救目录。
-
在Ubuntu VM的已安装分区上选择一个目录以保存已获救的数据:
-
按c开始将损坏的.vdi中的数据复制到健康VM中的救援目录。
笔记:
-
如果我们无法在6中使用
[Quick Search]
选项查看我们的文件,我们可能需要执行[Deeper Search]
。 这还将列出以前删除和覆盖的分区。 因此,我们需要确保选择数据所在的适当分区。 -
如果我们拍摄了.vdi的快照 ,我们可以在
~/.VirtualBox/Machines/
找到这些,但每当我们使用Virtual Box的快照function时,快照将写入差异文件。/Snapshots/{###}.vmdk 要将差异文件与硬盘合并,我们需要删除所有快照(这可能不是我们想要的,因为我们可以恢复到以前的快照而不是调用数据恢复),或者我们需要克隆机器的驱动器:
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
希望它有所帮助,我确实在这里找到了解决方案:( 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
无法解决它 。 我使用了以下简单方法:
- 将新的替换VDI添加到计算机。
- 下载一个新的Linux ISO。
- 在(1)中添加的磁盘上引导并安装新的Linux。
- 将磁盘装入新系统并复制所需的文件。 通常,这意味着复制
/home/user/
文件夹。 请记住复制隐藏文件(设置文件)。
为我工作得很好。 磁盘损坏只会阻碍启动,我的主文件夹中没有数据丢失。