我对 Steve Gibson 的SpinRite所以我想向 SF 社区提出这个问题。SpinRite 真的能做到它声称的那样吗?它是一款好用的产品吗?有了适当的备份解决方案和 RAID 容错功能,我从未发现需要它,但我很好奇。
关于这一点似乎存在一些相互矛盾的信息,并且无论如何都找不到确凿的数据。
一方面,我听到很多家庭用户声称它对他们有帮助,但我听到家庭用户说了很多东西——大多数时候他们没有知识或经验来准确描述真正发生的事情。另一方面,史蒂夫自己的描述和文档也没有给我带来温暖的感觉。
那么事实到底如何?你会使用它吗?
答案1
我对 SpinRite 的体验相当不错,但我认为它被高估了。事实上,它可能太聪明了。有免费的解决方案效果也一样好(实际上,免费方案可能效果更好)。
我们有一个 200 GB 的 NTFS 驱动器,突然发生灾难性故障。这本应是人们临时转储内容的“共享”驱动器,但最终却变成了一个巨大的数据存储库,里面有各种备份,以及一堆没人愿意备份的文件。当驱动器坏了时,无论我们运行多少次 chkdsk 或其他工具,我们都无法将其挂载。
最后,我们购买并运行了 SpinRite……它持续运行了 1 个多月。每次遇到坏簇时,它都会花几个小时尝试从中恢复数据。同样,它连续运行了一个多月,试图从有缺陷的 200 GB 驱动器中恢复数据。(SpinRite 的辩护是,如果没有物理缺陷,它可以在几个小时内扫描驱动器。)SpinRite 最终能够恢复我们所有的文件,尽管许多较大的文件最终还是被损坏了。SpinRite 还使驱动器再次可安装。所以我肯定会说它做了一些事情。
然而,尽管它确实有效,但我不知道它是否比仅仅从 Linux CD 启动并运行 dd 将整个驱动器复制到一个文件更有用。整整一个月不运行一个坏掉的磁盘是有好处的,因为它快死了! 物理缺陷似乎有蔓延的习惯。如果在 SpinRite 运行时磁盘性能进一步下降,我也不会感到惊讶。就我个人而言,我宁愿尽快从磁盘中取出数据,制作几个备份映像,然后尝试离线修复文件。
我们最近不得不恢复其他数据,dd 做得很好。您可以告诉它从驱动器中复制所有好数据,然后您可以再运行几次,并更加努力地(即使用较小的块大小)尝试从坏区域中提取数据。
如果你有一小时左右的空闲时间,我认为学习如何使用 dd 而不是购买 SpinRite 是值得的: http://www.debianadmin.com/recover-data-from-a-dead-hard-drive-using-dd.html
或者选择稍微简单一点的路线,直接下载 dd_rescue: http://www.garloff.de/kurt/linux/ddrescue
如果您仍想运行 SpinRite,我强烈建议您在从驱动器中复制所有现有数据之后再执行此操作,以防驱动器长时间运行导致其性能进一步下降。
每次购买新驱动器时,您都应该从 Linux CD 启动并运行 badblocks 来检查驱动器是否存在缺陷。您还应该定期检查驱动器是否性能下降。我们至少有 2 个全新驱动器存在缺陷,还有 3 或 4 个驱动器在几个月内损坏(尽管我们在投入使用之前进行了彻底的测试)。
请注意,您需要以 root 身份运行 badblocks,或者如果您从 Ubuntu Live CD 启动,请在命令前加上“sudo”。
全新驱动器(警告:破坏所有数据!):
badblocks -wvs /dev/sd#
或者
badblocks -wvs /dev/hd#
正在使用的驱动器(只读测试):
badblocks -vs /dev/sd#
或者
badblocks -vs /dev/hd#
其中 # 是 Linux 中的驱动器号。IDE 驱动器通常称为 /dev/hd#,而 SCSI(通常是 SATA)驱动器称为 /dev/sd#。
有关坏块的更多信息,请访问此处:http://en.wikipedia.org/wiki/Badblocks
顺便说一句,尽管 dd 和 badblocks 是 Linux 程序,但您可以在 NTFS 驱动器上使用它们,甚至可以在 Linux 中挂载 NTFS 分区,无论您使用的是 MBR 分区、动态磁盘还是 GPT 磁盘。
Steve 的文档讨论了许多 SpinRite 理论上可以解决的假设问题。例如:数据会随着时间的推移而消失,需要通过读取每个块并将其再次写回磁盘来“刷新”,或者反复将读取头重新定位在块的两侧最终将允许您从统计上推断出存储在该块中的原始数据。从逻辑上讲,这些事情是有道理的,但我认为它们只是学术问题的解决方案,而这些问题在现实世界中可能不会真正出现。(至少对于硬盘来说——也许 Zip 磁盘等更容易受到数据消失的影响。)如果 Steve 引用了有关这些主题的论文,或者这些技术已经通过实验证明是有效的,那么我预计会有许多开源或商业可用的 SpinRite 克隆。普通脚本程序员完全有能力编写包含 SpinRite 所有记录功能的 Python、Perl 或 UNIX shell 脚本。
答案2
我过去曾编写过磁盘驱动器固件(从 80 年代开始),关于驱动器固件的作用存在很多误解。我也花了很多时间在 GRC 论坛上,但除了作为用户之外,我与 SpinRite 没有任何联系。
首先,驱动器固件有总是至少从 80 年代开始,它就已经开始恢复和重新映射扇区(当时我编写了固件来执行此操作)。这绝对不是什么新鲜事。当驱动器遇到问题扇区时,它们会自行重试几次,但次数有限,因为驱动器不能在几秒钟内执行一次读取命令——如果驱动器没有在不到一秒的时间内完成命令,许多操作系统都会感到不安。如果驱动器可以恢复数据,它通常会在认为错误不止是一次性故障时自动重新映射扇区。因此,诸如chkdsk
或之类的程序dd
(它们只是读取磁盘驱动器)将像 SpinRite 一样触发此行为。
真正的问题是当驱动器固件无法恢复扇区数据时会发生什么。SpinRite 会做大多数其他程序不会做的事情,即进行数千次重新读取和重新寻道,以查看它是否能让磁盘一次成功读取数据。如果发生这种情况,SpinRite 会告诉驱动器重新映射扇区并将恢复的数据写入其中。根据我的经验,多次重新读取和重新寻道的成功率有限,并且正如其他人在此处指出的那样,可能会导致使用故障驱动器的剩余有限寿命。因此,在尝试 SpinRite 之前尝试使用dd
或始终是一个好主意。chkdsk
问题在于,无论尝试多少次重新读取和重新寻道,驱动器都无法恢复数据。 SpinRite 会多次从扇区读取原始未更正的数据,并对返回的结果进行统计分析,以尝试恢复实际数据。 然后,它会告诉驱动器重新映射扇区并将恢复的数据写入其中。 据我所知,SpinRite 的这一部分是独一无二的,当其他所有方法都失败时,它是最后的努力。 因此,我使用 SpinRite 恢复了其他程序(dd
、制造商诊断程序等)无法恢复的数据。 但是当您运行 SpinRite 时,您必须接受恢复的数据可能只有部分正确。 SpinRite 还可以映射出所有坏块,这可以使驱动器再次可用。 但只需写入所有坏扇区也可以做到这一点,这可以通过来完成badblocks
。
当然,有些驱动器已经无法修复,没有程序可以挽救。如果您确实需要数据,请将驱动器带到驱动器恢复中心,他们将尝试更换驱动器的故障部件并采用其他技术来恢复尽可能多的数据。请准备好花费数千美元。这是一个非常耗费人力的过程,需要昂贵的洁净室,并且这些地方必须为几年前发布的每个商业驱动器保留替换部件的库存。
截至撰写本文时,Steve 正在开发 SpinRite 的第 7 版,该版本将包括与dd_rescue
他现在所做的扇区恢复类似的数据恢复功能。据说这将在他专注于单个坏扇区之前完成,这样他就不会在恢复一个扇区上耗尽坏盘的寿命。
答案3
SpinRite 在很久以前编写的那个年代是一款很棒的程序。当时,它可以施展黑魔法来恢复看似已损坏的驱动器,因为它比驱动器固件本身更持久。
但在 2009 年,这毫无用处。现代硬盘会自行进行复杂的扇区映射和测试,而 SpinRite 太旧了,无法在所有硬盘上正确触发这些操作。你应该做的是学习如何使用智能工具,可能通过 Linux 启动 CD(因为您需要它们的主要时间是驱动器已经损坏时)。
当驱动器开始出现故障时,我通常会使用 dd 备份其数据,运行 smartmontools 查看其报告的错误,触发自检并再次检查错误,然后启动制造商的恢复软件以查看是否可以解决问题。SpinRite 比 SMART 和制造商工具提供的界面更了解驱动器的想法至少已经过时十年了。此外,如果您需要将驱动器作为有缺陷的 RMA,将信息输入 SMART 日志会有所帮助,而 SpinRite 无法为您提供帮助。
请注意,您偶尔看到的 SpinRite “修复” 问题的报告纯属巧合。如果您访问现代驱动器上的坏扇区,驱动器通常会从为此目的保留的备用扇区中为您重新映射该扇区。SpinRite 所做的只是访问坏扇区,它实际上并没有修复任何东西。这就是为什么您仍然会收到与此相关的这些轶事“它对我有用”的报告——如果使用 SMART 扫描,同样的事情会做得更好。