代码之家  ›  专栏  ›  技术社区  ›  Spidey

如何连续读取间歇硬盘?

  •  2
  • Spidey  · 技术社区  · 15 年前

    我有一个间歇性工作的故障硬盘。冷启动后,我可以访问它大约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++来编写MigMuxAPI/库兼容性。我需要对我的文件处理程序进行一些控制,以检查它们是否仍然有效,我需要一些东西来返回坏数据,但是如果驱动器在复制过程中出现故障,则返回。

    如果我滥用“硬编码”硬件例外,C可能会给我最好的结果?

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

    在这种情况下你会怎么做?有没有已经这样做的工具/实用程序?

    哦,有一个很好的应用程序可以读取坏的光学媒体 here 它叫做等字谜,它不是我的,我只是想分享一些与我的问题有关的东西。

    你说什么?编辑!

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

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

    到现在为止,我要用机器人学,我只是在寻找它,看看我能怎么用它。如果我不需要自己编写代码,只需要编写脚本,那就更容易了。

    !编辑2!

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

    4 回复  |  直到 10 年前
        1
  •  2
  •   Viliam    15 年前

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

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

    您可以轻松地装载文件磁盘映像并读取其内容,请参见 -o loop 选择 mount .

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

        2
  •  6
  •   Kendall Helmstetter Gelner    15 年前

    我先从硬件的角度来做这个。它是一个外部驱动器吗?如果是的话,你能在其他情况下尝试一下吗?

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

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

        3
  •  2
  •   Tarnay Kálmán    15 年前

    你可能对 机器人学 (强健的文件副本)。Robocopy是一个命令行工具,它可以容忍网络中断,并在以前停止的地方恢复复制(不完整的文件用与1980-01-01对应的日期戳记录,并包含恢复记录,以便Robocopy知道从何处继续)。

    你知道的。。。我喜欢“ 懒惰的 “……”以下是我要做的:

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

        4
  •  1
  •   Don Dumitru    15 年前

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

    如果驱动器上数据的价值没有达到这个水平,您应该考虑购买许多软件中的一个来进行数据恢复。例如,我个人使用并建议从运行时软件获取数据。 http://www.runtime.org . 我用它来恢复一个坏掉的驱动器,它对我有用。

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

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

    一旦对硬盘进行了映像,软件就会针对映像进行工作,以识别硬盘的各种逻辑部分——分区、目录和文件。然后它使您能够从图像中复制文件。

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

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