我们有一个磁盘阵列出现故障,我们怀疑另一个磁盘可能存在小错误。因此,为了安全起见,我们尝试使用 ddrescue 恢复两个磁盘。各种帮助页面建议进行两到三次复制,首先进行无分割记录的复制,然后返回错误扇区。例如
ddrescue --no-split --force /dev/sdc /dev/sdb logfile
ddrescue --direct --max-retries=3 /dev/sdc /dev/sdb logfile
--retrim
如果仍然有错误,则再次运行第二次并添加。
问题是,我可以看到初始传递偶尔会变慢,因此我检查了 dmesg 日志,并且我可以看到Medium Error tag#25 Sens: Unrecovered read error
系统日志中出现了相同类型的 IO 错误(),但是 ddrescue 没有在其状态中记录任何错误。
更新
好的,ddrescue 现在显示 2 个错误,但是我在系统日志中显示超过 2 个错误,而当我看到系统日志中出现前几个错误时,ddrescue 中没有显示任何错误。
我需要知道的是,如果上述第二个命令的语法仅检查 ddrescue 记录为坏的扇区,以及我是否应该尝试使用一些其他标志(例如--direct
在该过程中)重新运行第一个命令。(我想知道驱动器固件中是否有某些东西可能会阻止 ddrescue 看到所有错误)
西南
附录
运行重修后,我监控到重读过程中的错误数已降至 285。现在读数为 291。我以为后面几遍的目的是专门恢复错误扇区,没想到这个数字除了下降之外什么都没做。我这里遗漏了什么?
答案1
错误计数器似乎显示不可读块的数量(ddrescue 术语中的连续不可读扇区范围)。如果您连续有 3 个不可读扇区,并在重试过程中恢复中间的扇区,则计数器将增加一。如果磁盘在 60 秒内没有响应(?),内核本身将重试几次,并打印多行错误,直到它放弃一个扇区。尽管据我所知,它只打印一次扇区号。
要显示错误扇区的数量,请发出。它将打印所有不可读 ( ) 扇区的ddrescuelog -l- <mapfile> | wc -l
列表 ( )。(对于扇区大于 512 字节的磁盘,您可能需要手动指定扇区大小。)-l
-
据我所知,--direct 默认是禁用的,因为并非所有系统都支持它,而且缓存读取通常更快。后者是分成两个命令的原因,其中第一个命令应该尽快获取 99.9% 的可恢复数据。如果任一模式都比您的写入速度快,您可以合并这两个调用 AFAICT。