繁体   English   中英

如何一致地读取间歇性硬盘?

[英]How to read an intermittent hard drive consistently?

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

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

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,我只是在寻找它,看看我如何使用它。 如果我不需要编写自己的代码,而是编写脚本,那就更容易了。

!EDIT2!

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

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

你提到冷启动工作,然后退出。 这与热有关吗? 你有没有尝试过像冰箱一样长时间使用硬盘?

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

您可能对robocopy (“Robust File Copy”)感兴趣。 Robocopy是一个命令行工具,它可以容忍网络中断并恢复先前停止的复制(不完整的文件用日期戳记对应于1980-01-01并包含恢复记录,因此Robocopy知道从哪里继续)。

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

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

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

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

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

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

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

如果驱动器上的数据值没有达到该级别,则应考虑购买许多软件中的一个用于数据恢复。 例如,我个人已经使用过,并会从Runtime软件http://www.runtime.org推荐GetDataBack。 我用它来恢复一个失败的驱动器,它对我有用。

现在转到更一般的信息......关于故障驱动器的数据恢复的标准过程是尽可能少地在驱动器上进行。 您应拔掉驱动器,并停止尝试执行任何操作。 驱动器出现故障,可能会变得越来越糟。 你不想玩它。 您需要最大化获取数据的机会。

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

一旦硬盘驱动器成像,软件就会对图像进行处理,以识别驱动器的各个逻辑部分 - 分区,目录和文件。 然后它可以让您从图像中复制文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM