编写自己的分区恢复

时间:2012-09-27 07:16:08

标签: c++ c assembly partitioning data-recovery

我意识到我要问的问题不是简单的“O,这很简单!做一个简单的这个和那个并且vo!”事实是,一天晚上我没有想到我删除了错误的分区。我尝试了一些Windows和Linux工具(分区磁盘医生,Easeus,测试磁盘等),但没有一个工作。我认为这是因为我删除分区的方式。

我已经用C ++编写了我自己的引导扇区创建者/备份工具,以及C和Assembler中的一两个内核(尽管是相当无用的内核......)所以我认为我至少有足够的知识手动恢复它。

我的驱动器设置如下:

 Size: 1.82TB
 part0 100MB (redundant windows recovery partition)
 part1 ~1760MB (my data partition)

我是怎么打破它的:

在Windows 7中,我删除了第一个分区。然后我扩展了第二个占用第一个的可用空间,这意味着我仍然有2个分区,现在作为一个动态分区。我重新启动进入我的Ubuntu操作系统,并意识到我无法再读它了。我重新启动回Windows,删除了第一个分区,然后想了想,等等......我不应该这样做。不用说它现在已经死了。

我想要的是一些建议/良好的链接,从哪里开始,什么不该做,什么不期望。我希望如果期刊仍然完整,我将能够恢复驱动器。

修改:
这是一个NTFS驱动器。在发布这个问题后,我想知道:鉴于我知道我的分区所在的大致位置,有没有办法轻松识别期刊?也许我可以自己重建一些其他驱动器/分区信息并将其写入磁盘。

1 个答案:

答案 0 :(得分:1)

我认为,第一步是弄清楚你所谓的“动态分区”究竟是如何在Windows 7中运行的。从你的描述中,听起来好像你是从两个物理分区创建了一种逻辑卷。我的猜测是第二个分区现在包含该卷的某种标题,这就是为什么不熟悉该格式的恢复工具无法运行的原因。

如果您在合并两个分区时弄清楚Windows 7完全 ,那么您应该能够编写一个提取逻辑卷图像的应用程序。

或者,您可以查看NTFS-3G,http://www.tuxera.com/community/ntfs-3g-download/的NTFS的FUSE实现。通过研究该代码,我打赌你可以找到一种方法来定位你的borked磁盘上的NTFS文件系统。一旦你有了,尝试从文件系统的开头到磁盘的末尾提取所有内容到一个图像,并在其上运行一些NTFS文件系统检查器。运气不错,你会得到一个可以恢复的文件系统。

如果您想知道如何访问磁盘,只需在linux中打开相应的设备,就像它是一个普通文件一样。您可能需要将读取对齐为512字节(或者无论磁盘的扇区大小是多少.512和较小的扩展4096是常见值),否则read()可能会返回错误。