硬盘坏了,还好坏的是“校验盘”,数据没事,重新做一遍 snapraid即可。
snapraid --force-full sync
0 file errors
0 io errors
1 data errors
DANGER! Unexpected data errors! The failing blocks are now marked as bad!
Use 'snapraid status' to list the bad blocks.
Use 'snapraid -e fix' to recover.
但没想到,最后竟然报错,一个block出错。但不知道是哪个文件,在做一次sync同步,同时保存一下日志。
snapraid -l snap_20200120110201.log -v sync
查询日志文件,发现出错的block应该在某个文件内,看了下是一个word文件。重新打开这个文件,发现正常,另存盘一下,覆盖掉原来的文件。如果嫌弃麻烦,直接在linux中touch一下该文件,重新sync一下,报错解除。
snapraid -v --pre-hash sync
加了预校验pre-hash(-h),增加校验(这样会增加同步时间,但更确保数据校验的正确性),通过检测。
原因可能如下:
1.文件已正确存储(未损坏)在磁盘上。
2.在第一次快照同步期间,文件读取不正确(损坏)。
3.在稍后的同步过程中,再次读取了该文件,并且snapraid发现该文件与原始同步的文件(损坏的版本)不匹配。
4.使用snapraid将文件还原到已损坏的同步版本。
一般只有遇到偶发的硬件问题时,才会发生这种情况。可能RAM或磁盘控制器最有可能出现问题。
可以在snapraid中使用 -h 选项来避免或早发现此类问题:
-h,-散列前
在“同步”中,运行所有新数据的初步哈希阶段,以在奇偶校验计算之前进行其他验证。通常,在“同步”状态下,不会进行任何预备哈希处理,并且在首次读取奇偶校验计算之前,将对新数据进行哈希处理。不幸的是,当系统处于高负载,所有磁盘旋转且CPU繁忙时,会发生此过程。这是机器的一种极端情况,如果它有潜在的硬件问题,则可能会遇到无声错误,这是由于尚未对数据进行哈希处理而无法检测到的。为了避免这种风险,可以启用“预哈希”模式,并使所有数据读取两次以确保其完整性。此选项还会验证在阵列内移动的文件,以确保移动操作成功进行,并且以阻止同步并允许运行修复操作。此选项只能与“ sync”一起使用。
但是缺点是同步需要花费两倍的时间。
源自:https://sourceforge.net/p/snapraid/discussion/1677233/thread/db3113e8/