从损坏的媒体中读取数据

Posted

技术标签:

【中文标题】从损坏的媒体中读取数据【英文标题】:Read data from damaged media 【发布时间】:2010-09-16 22:19:55 【问题描述】:

即使 Windows 资源管理器被炸毁,是否也可以读取损坏的媒体(cd、hdd、dvd...)?

我的意思是,是否有一组 API 或其他东西可以在非常低的级别(在资源管理器之下?)访问磁盘并读取可以检索到的任何内容,即使它只是部分内容,特别是如果你仍然可以从资源管理器中看到该文件,但无法对其执行任何操作,因为它已以某种方式损坏(CD 上的划痕等)?

【问题讨论】:

【参考方案1】:

Windows 资源管理器的主要问题是它不支持在读取错误后恢复复制。例如,大多数表面划伤的 CD 每次弹出并重新插入时都会在磁盘的不同区域出现故障。

因此,使用支持恢复复制操作的实用程序,可以通过执行几次“弹出/重新加载/恢复”来读取损坏 CD 的全部内容。

事实上,utility I wrote 就是这样做的,我从来不需要任何更高级的东西来读取划痕的磁盘。 (它只是使用 ReadFile 和 WriteFile。)

通过向 CreateFile 传递诸如“\.\F:”之类的字符串(注意:这里的斜杠是字面意思)来打开原始分区(即磁盘映像),再低一点。它可以让您从驱动器中读取原始扇区,但是从这些数据中重建文件会很困难。

实际上,“\.\”语法允许您在“\GLOBAL??”中打开设备Windows 对象管理器命名空间的分支,就好像它们是文件一样。这与使用 /dev/x 作为参数调用 dd 没有什么不同。还有一个“\Device”分支,但只能通过 DeviceIoControl()(即 ioctl())访问,这意味着没有简单的 ReadFile()/WriteFile() 接口。

我猜,任何低于该级别的都是设备特定的;就像某些 CD 刻录程序那样读取原始 CD-ROM 数据(包括 ECC 位)。您必须对特定媒体(CD、闪存、DVD)以及您的硬件允许您在它们上执行的操作进行一些研究。

注意:反斜杠似乎在进入网页的过程中丢失了;您需要将“反斜杠反斜杠点反斜杠 DeviceName”传递给 CreateFile。当然,你也需要逃脱它们。

【讨论】:

【参考方案2】:

如果您想这样做,请从 Linux 端进行 - 请参阅:http://sourceforge.net/projects/monkeycity/opensource

或现成的应用程序和免费软件:http://www.theabsolute.net/sware/dskinv.html

【讨论】:

【参考方案3】:

第一步是dd_rescue。之后,您可以随意尝试任何方法来重建数据。

【讨论】:

【参考方案4】:

还有GNU ddrescue

GNU ddrescue 是一个数据恢复工具。它将数据从一个文件或块设备(硬盘、cdrom 等)复制到另一个文件,试图在读取错误的情况下首先挽救好的部分。

确保使用 3-arg 版本 (manual):

ddrescue [options] infile outfile [mapfile]

也就是说,请务必使用 mapfile,即使它是可选的,因为:

如果你使用 ddrescue 的 mapfile 功能,数据被非常有效地抢救,(只读取需要的块)。您也可以随时中断救援,稍后在同一点恢复。映射文件是 ddrescue 有效性的重要组成部分。除非您知道自己在做什么,否则请使用它。

它也包含在 Cygwin 和 Homebrew 中。

【讨论】:

迟到了,因为我刚刚使用ddrescue取得了巨大的成功【参考方案5】:

我不知道 Windows 资源管理器和 Win32 API 之间存在什么层。您可以尝试使用 Win32 File I/O 编写程序。如果这不起作用,那么您必须编写自己的设备驱动程序才能降低。

【讨论】:

【参考方案6】:

我从 linux 方面获得了一些运气,或者使用了 BartPE (http://www.nu2.nu/pebuilder/),但是仅仅看到文件并不总是意味着文件可以恢复,无论您是从 Windows 还是 Linux 尝试.最好的办法是试用恢复程序。

【讨论】:

【参考方案7】:

我有两个磁盘开始分解。从不可读扇区的图案来看,我认为它们的乳液内部有剥落。 WinXP Explorer 只是举手说驱动器根本不存在。

在这两种情况下,我都使用了 Runtime Software (http://www.runtime.org/) 的“GetDataBack for NTFS”。您可以下载免费试用版,该试用版将向您展示如果您支付了费用,您可以获得什么。我买的时候是 49 美元,但我发现现在是 79 美元。

这个程序很棒。它不一定很快,因为它会一遍又一遍地重新读取某些扇区,试图从多次尝试中获得共识值,但是当它完成后,你可以取回你认为永远消失的东西。我有一个驱动器需要 10 多个小时来分析,但完成后我得到了 500GB 驱动器的 97% 以上。绝对物超所值。

另一个很棒的工具是 Beyond Compare。我有 rev 2.5.3,但目前是 3.??费用为 30 美元。他们有一个全功能的 30 天跟踪。它在复制大量文件(并且只复制那些需要复制的文件)方面做得很好,而且与资源管理器不同,它不会在出现故障时崩溃。如果您熟悉 Samba 人的那个程序,它有点像 Windows 的可视化 rsync。

除了作为一个非常满意的客户之外,我与上述任何一家公司都没有任何关系。

【讨论】:

【参考方案8】:

从磁存储设备恢复数据的黄金标准必须是SpinRite。虽然它是一个商业应用程序,所以你可能不会从中学到很多东西。

【讨论】:

【参考方案9】:

如果你身边有 Linux 机器,我可以推荐dvdisaster。它最初用于创建纠错文件,但它也将 DVD 读入图像并忽略读取错误;并且您可以一个接一个地使用不同的驱动器来填充图像中缺失的扇区。

【讨论】:

以上是关于从损坏的媒体中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

在以下情况下从套接字读取数据已损坏?

从 AVR USART 传输读取的数据损坏

通过代理读取器加载的存储中不一致的数据损坏

尝试读取或写入受保护的内存。这通常表明其他内存已损坏

硬盘提示磁盘结构损坏且无法读取数据怎么找回

目录已损坏无法读取