为什么 Linux 系统有时可以恢复 Windows 无法恢复的数据?有什么具体原因吗?

为什么 Linux 系统有时可以恢复 Windows 无法恢复的数据?有什么具体原因吗?

背景: 今年早些时候,我遇到了一个 SSD 驱动器问题,Windows 无法再识别它。但最终我找到了一个可启动的“分手魔法 2012-10-10”成功了。看看这个已解决的线程。然而,有一个问题却一直困扰着我……

问题: 我知道 Linux 通常更技术性和更原始,但有人可以粗略地概述一下为什么 Linux 系统(或者实际上只有那个特定的系统,因为 Ubuntu 没有做到这一点)能够仍然访问/与半损坏的设备通信而 Windows 却不能吗?

  • 他们是否会忽略任何可能出现问题的潜在指标?
  • 有什么具体的原因吗?
  • 这个特定环境能够让 SSD 做出响应(尽管时间有限)仅仅是运气吗?

答案1

通常,这取决于访问的内容以及设备发生故障的具体方式。例如,如果有问题的 SSD 无法检索扇区 5,并且一旦有任何东西读取扇区 5,就会开始停滞,那么差异可能只是由于不同的系统在识别新磁盘后自动访问的内容不同。

当 Windows 检测到新磁盘时,它将读取分区表并自动尝试打开它知道如何读取的任何文件系统。如果在此“安装”过程中读取的任何结构/块导致您的故障 SSD 报废,则该特定 Linux 发行版的区别仅在于它可能不会自动安装所有相关分区,或者在安装时可能仅读取不同的扇区子集(Linux 中的 NTFS 实现与 Windows 中的 NTFS 实现非常不同 - 虽然磁盘格式相同,但操作系统决定需要读取哪些结构。Windows 可能会读取 MFT 的辅助副本,或者可能会开始预先缓存一些数据,这可能是区别所在。Ubuntu 的情况类似 - 它不适用于开箱即用的恢复,它将尝试自动安装它在新发现的媒体上找到的任何文件系统。正是出于这个原因,专门针对恢复的发行版是更好的选择,因为它们只会执行您明确要求它们执行的操作,而不是自动执行操作。

当然,你也可能只是运气好而已。我对 SSD 的故障模式了解不多,所以不便多言。

Linux 通常不会忽略表示出现问题的指标。它会像 Windows 一样从 SATA 芯片组收到相同的 SCSI 错误 - 如果您查看内核日志,就会在出现故障的磁盘上看到大量错误消息。接下来会发生什么取决于哪些程序正在实际访问磁盘。如果它是面向恢复的软件,它可能会尝试重新读取同一扇区有限的次数,它可能会跳过它,等等。通常最好的办法是获取驱动器的映像,其中尽可能多的扇区被干净地读取,然后尝试从该映像中恢复数据(直接在驱动器上进行任何分析通常都是一个坏主意,因为它的状况可能会恶化,而且仅仅因为您能够读取一次,并不意味着您将能够再次读取它。)

答案2

Windows 将硬件抽象为 API,以便所有对硬件的调用都以相同的统一(并且大概是安全的)方式进行。但这意味着,要在硬件上执行任何功能,MS 必须预测您想要执行该任务的愿望,并编写 API 函数来获得所需的结果。

使用 Linux,抽象较少,并且抽象是自愿的,因此您可以编写直接处理硬件的软件(如果您愿意的话),从而开辟许多未预先计划和预先实现的可能性。

答案3

其中很大一部分是环境处理文件系统、ACL 或硬盘的方式。

Windows 将尽其所能遵守其 ACL 以及标记为坏扇区或空扇区。因此,在 Windows 中创建和维护的 NTFS 或 Fat 分区以及 Windows MBR 将由 Windows 按照其标记的方式处理。

此外,如果驱动器出现故障,您使用的时间越长,就越有可能遇到重大问题,环境就会崩溃。然后操作系统如何处理这个问题,Windows 将出现 BSOD 或重新启动,Windows 启动过程将抛出 MBR 消息、丢失文件消息(NTDLR.dll 丢失或损坏)并停止,因为这些坏文件是必需的。

当您使用活动磁盘时,您无需依赖任何这些。由于您从磁盘启动,因此可以绕过损坏的 MBR。不需要损坏 NTDLR.dll 的坏扇区。所有内容都在磁盘上。然后您可以尝试读取。如果它遇到“空白”扇区或坏位,该环境将按照编程的方式处理它。Ubuntu 可能宁愿保持正常的操作系统行为并继续执行最有可能发生的事情。扇区是空白的,做其他事情。那个扇区是坏的,远离它,不要再读取,不要写入,否则会引起问题。

但是,恢复平台将要读取所有数据。文件标记表明文件应该位于 0、5、13.... 如果文件系统报告 13 丢失,则忽略空白标题并读取文件,或者尽可能读取坏扇区并尝试恢复。

此外,Windows 可以使用第三方应用程序做很多这样的事情,例如 Recuva 可以找到很多“丢失”的文件。但您肯定不希望处于可能将数据写回到磁盘并导致真正永久丢失的环境中。

我确实简化了这一点,并添加了一些解释,但它应该可以填补你所要求的一些空白。

答案4

Windows 系统往往会有各种后台操作来干扰硬件。在 Windows 系统上,当连接新驱动器时,各种进程都会开始干扰它。如果驱动器不可靠,这通常会导致它开始出现故障。在 Linux 系统上,更有可能的是,驱动器只会被您专门指示干扰它的东西触及,这样您就可以访问驱动器而不会触发任何故障模式。

相关内容