我有一个硬盘驱动器坏块或扇区由于潜在的机械问题而无法读取,例如磁盘头坏,电机坏或其他一些问题导致硬盘驱动器以极慢的速度缓慢读取数据读错误。我看到平均50 KB /秒,一些读取速度低于10 KB /秒,并且经常会在文件或扇区中完全停留,通常持续相当长的时间 - 从2-10分钟或更长时间(当使用rsync,在它超时之前)。
速度似乎变化很大,并且它会在文件上受到很多限制,当它最终“脱落”时,它似乎只会在它再次卡住之前持续短暂的爆发。驱动器也非常安静,只有偶尔的文件复制声音(通常是在它被卡住/松开一小段时间之后,再次卡住之前)。因此,通常与HDD死亡无关的那些邪恶声音都没有。有人认为这些问题听起来可能是因为它们可能是由磁盘头错位引起的,这需要在最终成功读取数据之前进行大量的重新读取。听起来似乎有道理,但我离题了......
无论如何,rsync的问题在于它似乎没有像样的错误处理支持。显然,这并不意味着,以恢复从失败的硬盘中的数据,但所有的所谓的“数据恢复”实用工具在那里,都意味着这种使用通常集中在被删除的文件恢复或弄乱了分区,而不是从垂死的硬盘上复制文件。显然,删除的文件恢复不是我需要的,所以也许你可以理解我无法找到我之后的失望。
当然,这是你可能会说“你应该使用ddrescue!”的地方。嗯,这很好,花花公子,但我已经备份了大部分数据,所以我只想恢复某些文件。我不关心尝试像ddrescue一样逐块恢复完整分区。我只对拯救特定的文件和目录感兴趣。
理想情况下,我想要的是rsync和ddrescue之间的某种交叉:允许我将源和目标指定为普通文件(如rsync)的目录(而不是像ddrescue所要求的两个完整分区),以及一种跳过文件的方法初始运行中的错误,然后允许我尝试在稍后的运行中恢复那些有错误的文件(当然,稍微改变一下命令),甚至可以提供一个选项来指定重试次数...就像ddrescue如何使用块,只有我想要一个与rsync一样的特定文件/目录的实用程序。
我在这里做白日梦,还是做了一些可以做到这一点的事情?或者,甚至可能以这种方式使rsync或ddrescue工作?我真的愿意接受任何可能有效的解决方案,只要他们让我选择我想要“救援”的文件,并且可以在初始运行时跳过有错误的文件,然后再尝试/重试这些错误。
到目前为止,我已尝试使用以下选项进行rsync,但它经常卡在文件上的时间超过超时,理想情况下我只是希望它转到下一个文件并稍后返回到它获取的文件坚持下去。我不认为这是可能的。无论如何,这是我到目前为止一直在使用的东西:
rsync -avP --stats --block-size=512 --timeout=600 /path/to/source/* /path/to/destination/