【问题标题】:Writing your own partition recovery [closed]编写自己的分区恢复[关闭]
【发布时间】:2012-09-18 22:10:48
【问题描述】:

我意识到我要问的问题不是一个简单的“哦,这很简单!做一个简单的这个和那个,瞧!”事实是,没想到一晚上我删除了错误的分区。我尝试了一些 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 驱动器。发布这个问题后,我想知道:鉴于我知道我的分区所在的大致位置,有没有办法轻松识别期刊?也许我可以自己重建一些其他驱动器/分区信息并将其写入磁盘。

【问题讨论】:

  • 它可能会帮助其他人知道那里有什么 FS。 NTFS?分机*?
  • 这可能属于超级用户,我看不出它与编程有何关系。在这种特殊情况下,您正在寻求手动恢复分区的帮助,对吧?
  • @Charles,我相信(基于cc++assembly 标签)OP 想要编写一个应用程序来恢复它。
  • @AlexeyFrunze 这是一个 NTFS 驱动器。
  • @CharlesBailey 正如 SingerOfTheFall 建议的那样,我想编写自己的程序来做到这一点。我想使用 C++ 来完成这项任务。

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


【解决方案1】:

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

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

或者,您可以在http://www.tuxera.com/community/ntfs-3g-download/ 查看 NTFS-3G,NTFS 的 FUSE 实现。通过研究该代码,我敢打赌,您可以找到一种方法来定位您的磁盘上的 NTFS 文件系统。一旦你有了它,试着把从文件系统开头到磁盘结尾的所有东西提取到一个映像中,然后在上面运行一些 ntfs 文件系统检查器。运气好的话,你会得到一个可修改的文件系统。

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

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2020-07-17
    • 2012-10-10
    相关资源
    最近更新 更多