好像遇到文件静默损坏了,单比特翻转

27 天前
 Licsber

因为个人有对归档文件全量 HASH 的习惯,近期迁移 NAS ,从 UNRAID 迁移部分影视文件到新建的 NAS ,校验某 1T 大小的影视文件夹时遇到单个文件 HASH 校验失败,还好可以通过互联网恢复,看到具体的损坏位置。

117603,117606c117591,117594
<                     "ed2k": "FDFF75DAFA7FD8F021F7A40C5A0207D7",
<                     "md5": "23C34E593BBB73375D600A526C6A291E",
<                     "sha1": "79AF053BF5BE32A7265382DB9041FE8D0F86F804",
<                     "sha256": "36A6A32A5082D020DA35FD638E79A33294B264ECF07869C195856FD2D120132B"
---
>                     "ed2k": "803F36E469191335169FC8EA7B95E504",
>                     "md5": "518E50F7445DE606B2792CEE05157EE6",
>                     "sha1": "717761CF027EB1F88D142E2C344080DEDE468246",
>                     "sha256": "D44610A581BBFE241E9E97C6D362DA39DB3C14FF7BE03473CA53F483D6CD8A0E"

licsber@10 Downloads % xxd ori.mkv > ori
licsber@10 Downloads % xxd unraid.mkv > unraid
licsber@10 Downloads % diff ori unraid
15246551c15246551
< 0e8a4d60: 882a a172 2e55 8626 ee7b 6be9 095d 7cb4  .*.r.U.&.{k..]|.
---
> 0e8a4d60: 882a a072 2e55 8626 ee7b 6be9 095d 7cb4  .*.r.U.&.{k..]|.

可以看出来,一个 1 变成了 0 ,应该是奇怪的比特翻转。

暂时还想不起这个文件夹的由来,因为之前 PT 下载的机器和存储位置都变过很多次,自己挪文件大都通过 rsync ,并且每次删除源文件前,都会对目的位置做校验,所以应该不会是传输损坏,那静默损坏的可能性就很高。

搬迁前因为最近机器遇到过读写过程中突然断电,所以对单校验盘( 8 盘 8T 留 1 盘做 SNAP RAID )的 UNRAID 做了一次 check ,勾选了自动修正校验盘数据,但是之前修正计数都是 0 ,这次遇到一万多,所以开始排查问题。

原因分析

首先是不勾选自动修正校验盘,重新 CHECK 两遍,错误计数都是 0 ,可以基本排除软件逻辑本身问题。

不过排查日志发现了更严重的事情,这个机器是三年前在 B 站 优易电子 买的 万由 810A 套装,配了一块 微星 B460M PRO-VDH 主板,原装配了一条 4G 内存,自己又加了一条 16G 内存,买来之后才发现八盘位其中主板原生 SATA 只有 4 个,另外四个通过 M.2 转 SATA 实现,此为背景。

可能性 1:M.2 转 SATA 模块问题,但感觉底层不至于影响上层,而且这个也没缓存。

之前遇到过一次主板亮 DRAM 灯,无法启动,拔掉两根内存条,擦一擦,交换位置之后正常启动。

可能性 2:内存问题,兼容性(两条不一样大)或者内存损坏,但是试了试跑 memtest 可以 PASS 。

又排查启动日志和 dmesg ,发现一条 SATA 始终是 3Gb/s 速率,遇到了降速。

交换 M.2 转 SATA 的接口顺序,交换硬盘顺序后,发现是万由的机箱背板问题,但是查到 SATA 降速应该不影响数据本身内容的安全,只会增加硬盘 SMART 信息中 UDMA CRC error count 的计数,现在这个盘的数值是 556 。

可能性 3:硬盘背板问题,因 SATA 降速,可能引起损坏。

root@LicsberPro:~# for i in /dev/sd* ; do echo $i && smartctl -a $i | grep SATA ; done
/dev/sda
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sdb
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sdc
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sdd
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sde
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
/dev/sdf
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sdg
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
/dev/sdh
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)

UDMA CRC Error 日志:

[   35.757890] ata7.00: exception Emask 0x10 SAct 0x8000 SErr 0xba0100 action 0x6
[   35.757898] ata7.00: irq_stat 0x08000000
[   35.757899] ata7: SError: { UnrecovData PHYInt 10B8B Dispar BadCRC LinkSeq }
[   35.757904] ata7.00: failed command: READ FPDMA QUEUED
[   35.757906] ata7.00: cmd 60/e0:78:20:02:00/00:00:00:00:00/40 tag 15 ncq dma 114688 in
                        res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
[   35.757912] ata7.00: status: { DRDY }
[   35.757916] ata7: hard resetting link
[   35.761755] RAPL PMU: API unit is 2^-32 Joules, 4 fixed counters, 655360 ms ovfl timer
[   35.761761] RAPL PMU: hw unit of domain pp0-core 2^-14 Joules
[   35.761763] RAPL PMU: hw unit of domain package 2^-14 Joules
[   35.761765] RAPL PMU: hw unit of domain dram 2^-14 Joules
[   35.761766] RAPL PMU: hw unit of domain pp1-gpu 2^-14 Joules
[   35.764759] cryptd: max_cpu_qlen set to 1000
[   36.221271] intel_rapl_common: Found RAPL domain package
[   36.221277] intel_rapl_common: Found RAPL domain core
[   36.221280] intel_rapl_common: Found RAPL domain uncore
[   36.221282] intel_rapl_common: Found RAPL domain dram
[   36.226724] ata7: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   36.228189] ata7.00: configured for UDMA/133
[   36.228201] sd 6:0:0:0: [sde] tag#15 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=DRIVER_OK cmd_age=0s
[   36.228206] sd 6:0:0:0: [sde] tag#15 Sense Key : 0xb [current] 
[   36.228208] sd 6:0:0:0: [sde] tag#15 ASC=0x0 ASCQ=0x0 
[   36.228211] sd 6:0:0:0: [sde] tag#15 CDB: opcode=0x88 88 00 00 00 00 00 00 00 02 20 00 00 00 e0 00 00
[   36.228214] I/O error, dev sde, sector 544 op 0x0:(READ) flags 0x80700 phys_seg 24 prio class 2
[   36.228226] ata7: EH complete

SATA 协商降速日志:

[   19.636335] ata8: hard resetting link
[   20.108593] ata8: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   20.110056] ata8.00: configured for UDMA/133
[   20.110067] sd 7:0:0:0: [sde] tag#14 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=DRIVER_OK cmd_age=0s
[   20.110069] sd 7:0:0:0: [sde] tag#14 Sense Key : 0xb [current] 
[   20.110071] sd 7:0:0:0: [sde] tag#14 ASC=0x0 ASCQ=0x0 
[   20.110073] sd 7:0:0:0: [sde] tag#14 CDB: opcode=0x88 88 00 00 00 00 00 00 00 01 08 00 00 00 f8 00 00
[   20.110074] I/O error, dev sde, sector 264 op 0x0:(READ) flags 0x80700 phys_seg 31 prio class 2
[   20.110083] ata8: EH complete
[   20.143988] ata8: limiting SATA link speed to 3.0 Gbps
[   20.143992] ata8.00: exception Emask 0x10 SAct 0x800000 SErr 0xb00100 action 0x6
[   20.143994] ata8.00: irq_stat 0x08000000
[   20.143995] ata8: SError: { UnrecovData Dispar BadCRC LinkSeq }
[   20.143998] ata8.00: failed command: READ FPDMA QUEUED
[   20.143999] ata8.00: cmd 60/08:b8:d8:01:00/00:00:00:00:00/40 tag 23 ncq dma 4096 in
                        res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x10 (ATA bus error)
[   20.144004] ata8.00: status: { DRDY }
[   20.144006] ata8: hard resetting link
[   20.610811] ata8: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[   20.612275] ata8.00: configured for UDMA/133
[   20.612283] ata8: EH complete

等待后续继续排查。

4210 次点击
所在节点    NAS
21 条回复
Ketteiron
26 天前
@flynaj #18 raid 不保证正确性,保证的是可用性。op 遇到的静默错误,什么 raid 都没用,甚至可能发生错误数据把正确数据给覆盖了。要稳定的话,需要 ecc 内存和 zfs/btrfs 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1173837

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX