我正在从一台硬盘中恢复文件,其中有一些文件无法读取。我无法更改硬件级别的超时/ERC,并且当我有数十万个文件,其中可能有数万个无法读取时,工作非常困难。
数据问题是控制器故障的结果。购买匹配的驱动器(完全一致),我已经能够访问驱动器,并可以无问题地复制大量数据。然而,在整个驱动器中散布着无法读取的文件,当访问它们时,会导致SATA总线挂起。我使用了各种可恢复文件复制应用程序,如robocopy、RichCopy和其他十几个应用程序,但它们都存在同样的问题。它们具有基于驱动器实际报告错误的重试计数。问题在于驱动器需要花费非常长的时间来报告错误,这意味着单个文件可能需要长达一小时才能正式失败。我知道每个文件应该有多快,所以我想构建一个Powershell CMDLET或类似的程序,允许我传递源文件名和目标文件名,并尝试复制该文件。如果5秒钟后未复制文件(或者已经复制了-这可以是一个愚蠢的过程),我希望它停止。我将编写一个脚本,单独启动每个复制过程,在等待它之前完成该进程,但到目前为止,我无法找到一个很好的方法来设置进程的时间限制。
如果您有任何建议,将不胜感激!
编辑:我将使用一个新线程生成一个
编辑2:请注意,像robocopy这样的应用程序在遇到磁盘的坏区域时会完全挂起。这些不是简单的挂起,而是总线挂起,Windows会尝试保存这些挂起,以便不会丢失数据。在这些情况下,任务管理器无法终止该进程,但是Process Explorer可以。我不确定方法论的区别是什么,但无论如何,这似乎与问题相关。
数据问题是控制器故障的结果。购买匹配的驱动器(完全一致),我已经能够访问驱动器,并可以无问题地复制大量数据。然而,在整个驱动器中散布着无法读取的文件,当访问它们时,会导致SATA总线挂起。我使用了各种可恢复文件复制应用程序,如robocopy、RichCopy和其他十几个应用程序,但它们都存在同样的问题。它们具有基于驱动器实际报告错误的重试计数。问题在于驱动器需要花费非常长的时间来报告错误,这意味着单个文件可能需要长达一小时才能正式失败。我知道每个文件应该有多快,所以我想构建一个Powershell CMDLET或类似的程序,允许我传递源文件名和目标文件名,并尝试复制该文件。如果5秒钟后未复制文件(或者已经复制了-这可以是一个愚蠢的过程),我希望它停止。我将编写一个脚本,单独启动每个复制过程,在等待它之前完成该进程,但到目前为止,我无法找到一个很好的方法来设置进程的时间限制。
如果您有任何建议,将不胜感激!
编辑:我将使用一个新线程生成一个
Copy-Item
,带有新PID,然后倒数,然后杀死该PID,这样也可以。我只是PowerShell的新手,并且看到了许多矛盾的方法来施加计时器,所以我迷失在最佳实践的方法上。编辑2:请注意,像robocopy这样的应用程序在遇到磁盘的坏区域时会完全挂起。这些不是简单的挂起,而是总线挂起,Windows会尝试保存这些挂起,以便不会丢失数据。在这些情况下,任务管理器无法终止该进程,但是Process Explorer可以。我不确定方法论的区别是什么,但无论如何,这似乎与问题相关。