我有一个间歇性工作的故障硬盘。冷启动后,我可以访问它大约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%处于工作状态,只是固件被拧紧,几秒钟后它进入无限忙碌状态。