我在虚拟机上运行的 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:
创建原始文件后,我运行testdisk
,Deeper Search
得到如下列表:
完成后Deeper Search
,我得到了如下列表:
但我不知道哪一个是哪个快照...有什么想法吗?
答案1
命令行
如果我们使用 Ubuntu 作为主机,我们可以使用以下命令将 .vdi 磁盘转换为原始磁盘:
VBoxManage clonehd <sourcename> <clone.raw> --format RAW
然后我们可以打开测试磁盘 使用此文件恢复虚拟驱动器映像上的文件(另请参见下文):
testdisk <clone.raw>
虚拟机
如果损坏的 VDI 驱动器映像仍在 Virtual Box 中注册,我们可以将该映像作为驱动器添加到我们的新虚拟机中:
启动虚拟 Ubuntu,我们已在其中添加了损坏的 .vdi,但是不要安装驱动器。
在已安装的分区上创建一个目录来保存所收集的数据(例如
~/rescued
),安装测试磁盘 在虚拟机上。
从终端启动 testdisk:
sudo testdisk
选择适当的驱动器来收集数据(此处显示
/sdb
),然后选择[Proceed]
选择合适的分区布局(通常
Intel
)选择
[Analyse]
-[Quick Search]
选择包含要收集数据的分区(这里只存在一个 NTFS 分区):
按下 P 即可列出该分区上的文件。
浏览包含数据的目录。查看文件名以确保您选择了正确的文件名。
使用 选择要收集的目录或文件 : 。所有选定的文件/目录将标记为绿色:
按大写字母 C 将所有选定的目录/文件复制到下一步将选择的救援目录。
在 Ubuntu VM 的挂载分区上选择一个目录来保存已恢复的数据:
按下 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)中选择“其他位置”以导航到旧数据并将其移动到安全的地方。
我没有尝试修复机器,但我只想恢复数据并将其移动到新的虚拟机。这样可能可以直接从实时启动的旧机器执行顶部答案所建议的操作。