2

我有一个间歇性工作的故障硬盘。冷启动后,我可以访问它大约30-60秒,然后硬盘驱动器出现故障。我愿意编写一个软件来将此驱动器备份到一个新的更大的磁盘上。我可以在 GNU/Linux 或 Windows 下开发它,我不在乎。

问题是:我只能访问磁盘一段时间,而且有些文件很大,复制的时间会更长。出于这个原因,我正在考虑将整个硬盘备份成更小的部分,比如比特洪流。在尝试读取另一组之前,我将读取一些兆字节并存储它。我的主循环是这样的:

while(1){
    if(!check_harddrive()){ sleep(100ms); continue; }
    read_some_megabytes();
    if(!check_harddrive()){ sleep(100ms); continue; }
    save_data();
    update_reading_pointer();
    if(all_done){ break; }
}

问题是 check_harddrive() 函数。我愿意用 C/C++ 编写这个以实现最大的 API/库兼容性。我需要对我的文件处理程序进行一些控制,以检查它们是否仍然有效,并且我需要一些东西来返回错误数据,但如果驱动器在复制过程中出现故障,则返回。

如果我滥用“硬编码”硬件异常,也许 C# 会给我最好的结果?

另一种方法是测量我需要多少时间来重启我的硬盘驱动器并编写一个程序以仅在这段时间内读取它,并标记我何时重启。

在这种情况下你会怎么做?是否有任何工具/实用程序已经这样做了?

哦,这里有一个很棒的应用程序可以读取不良光学媒体它叫做 IsoPuzzle,它不是我的,我只是想分享一些与我的问题有关的东西。

!编辑!

一些澄清。我是家庭用户,是大学计算机工程专业的学生,​​我宁愿丢失数据也不愿花费数千美元来恢复它。硬盘仍然在希捷的保修范围内,但由于他们给了我 5 年的保修期,我想尽一切可能尝试直到时间用完。

当我说冷启动时,我的意思是几秒钟后没有电源启动。热启动将重新启动您的计算机,冷启动将关闭它,等待几秒钟然后再次启动它。由于有问题的硬盘是内置的但 SATA,我可以断开电源线,等待几秒钟,然后重新连接。

到目前为止,我将使用 robocopy,我只是在搜索它以了解如何使用它。如果我不需要自己编写代码,而是编写脚本,那就更容易了。

!编辑2!

我不清楚,我的驱动器是希捷 7200.11。众所周知,它有一个坏的固件,它并不总是可以通过简单的固件更新来修复(不是在这个错误出现之后)。驱动器物理上是100%处于工作状态,只是固件被拧紧,几秒钟后它进入无限忙碌状态。

4

4 回答 4

6

我会首先从硬件角度来解决这个问题。它是外部驱动器吗?如果是,您可以在不同的情况下尝试吗?

你提到冷启动工作,然后它退出。这与热量有关吗?您是否尝试过在冰箱之类的地方长时间使用硬盘?

从软件方面,我将有第二个线程关注通过重复循环读取少量数据更新的一些进度计数器,然后它将能够通过您定义的超时发出失败信号。

于 2009-09-20T21:23:04.667 回答
2

您可能对robocopy(“强大的文件复制”)感兴趣。Robocopy 是一个命令行工具,它可以容忍网络中断并从之前中断的地方继续复制(不完整的文件会标有对应于 1980-01-01 的日期戳并包含恢复记录,以便 Robocopy 知道从哪里继续)。

你知道......我喜欢“懒惰”......这是我会做的:

我会写2个简单的脚本。其中一个将启动 robocopy(关闭持久性功能)并开始复制,而另一个将定期检查(可能通过尝试列出根目录的内容,如果它花费的时间超过几秒钟,它就死了。 ..再次..)驱动器是否仍在工作,如果硬盘停止工作,它将重新启动机器。让他们在登录后启动并设置自动登录,以便在机器重新启动时自动继续。

于 2009-09-20T21:25:50.573 回答
2

我认为最简单的方法是复制整个磁盘映像。例如,在 Linux 下,您的磁盘将显示为块设备/dev/sdb1

开始复制磁盘映像,直到出现读取错误。然后等待用户“修复”磁盘并从最后一个位置开始读取。

-o loop您可以轻松挂载文件磁盘映像并读取其内容,请参阅mount.

使用前冷却磁盘。我听说这有帮助。

于 2009-09-21T00:37:18.440 回答
1

从“我需要取回我的数据”的角度来看,如果您的数据对您真的很有价值,我建议您将驱动器发送给数据恢复专家。根据数据的价值,成本(可能几百美元)是微不足道的。理想情况下,您会找到一位数据恢复专家,该专家不只是运行一些软件来进行恢复 - 如果软件方法不起作用,他们应该能够执行诸如更换驱动器上的电路板之类的事情,可能还有其他事情(我不是数据恢复专家)。

如果驱动器上的数据价值没有完全上升到那个水平,您应该考虑购买众多软件中的一种来进行数据恢复。例如,我个人曾经使用过运行时软件http://www.runtime.org中的 GetDataBack,并且会推荐它。我用它来恢复发生故障的驱动器,它对我有用。

现在了解更多一般信息... 从故障驱动器恢复数据的标准过程是尽可能少地对驱动器本身进行操作。您应该拔下驱动器,并停止尝试做任何事情。驱动器出现故障,并且可能会变得越来越糟。你不想玩弄它。您需要最大限度地提高获取数据的机会。

该过程的工作方式是使用逐块(而不是逐文件)读取驱动器的软件,并制作驱动器的映像副本。该软件尝试读取每个块,如果读取失败,将重试读取,并写入一个映像文件,该文件是整个硬盘驱动器的映像。

对硬盘驱动器进行映像后,该软件将根据映像来识别驱动器的各个逻辑部分——分区、目录和文件。然后它使您能够从图像中复制文件。

该软件通常可以从图像中“推断”出结构。例如,如果分区表损坏或丢失,软件将扫描整个映像,寻找可能是分区的东西,如果它们看起来足够像分区,它会将它们视为分区,看看是否可以找到目录和文件。因此,使用有关驱动器上不同结构的大量知识编写好的软件。

如果你想学习如何编写这样的软件,对你有好处!我的建议是您从有关各种操作系统如何组织硬盘驱动器上的数据的书籍开始,这样您就可以开始直观地了解软件如何与驱动器映像一起工作以从中提取数据。

于 2009-09-20T23:03:40.510 回答