技术解析

zfs 三个 ssd 做 mirror 坏了两个,剩下一个也有错误,如何恢复数据和排查原因?
0
2021-06-12 00:50:52
idczone
我的笔记本是 dell precision 7740,插了 5 个 ssd,一个是 windows10 系统盘,一个是 ubuntu 20.04 (我日常使用的系统)系统盘,还有一个 zfs 池,包括三个 1t ssd,组成形式为 mirror,存放数据。配置好后一年都默默使用,没有查看过状况,直到最近查看才发现其中两个都 faulted 了。

sudo zpool status -v
pool: tankmain
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://zfsonlinux.org/msg/ZFS-8000-8A
scan: resilvered 91.2G in 0 days 00:20:39 with 0 errors on Wed Feb 10
17:30:23 2021
config:

NAME STATE READ WRITE CKSUM
tankmain DEGRADED 0 0 0
mirror-0 DEGRADED 28 0 0
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500057 DEGRADED 47 0 220
too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500063 FAULTED 32 0 2
too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500220 FAULTED 22 0 3
too many errors`

因为三个 ssd 当初都是买的新的,到手检查状况都不错,到现在使用也才一年,所以平时都没管过。现在我怎么也不敢相信两个 ssd 都不行了。检查 smart 信息也没有异常。 之后我抢救了部分数据,也就是把数据从内置固态盘( zpool )转移到外置固态盘,使用 rsync -avcXP 两遍来确保数据正确。但是有部分数据在第一遍时会提示校验错误(failed verification -- update discarded),第二遍却无报错。实际查看,文件应该是损坏了。然后我重启了,重启之后的状态:
sudo zpool status -v
pool: tankmain
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Feb 14 15:38:53 2021
40.5G scanned at 251M/s, 11.1G issued at 68.8M/s, 755G total
23.1G resilvered, 1.47% done, 0 days 03:04:30 to go
config:

NAME STATE READ WRITE CKSUM
tankmain DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500057 DEGRADED 0 0 0 too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500063 ONLINE 0 0 7 (resilvering)
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500220 ONLINE 0 0 11 (resilvering)

待它 resilver 完毕:

sudo zpool status -v
pool: tankmain
state: DEGRADED
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-9P
scan: resilvered 83.5G in 0 days 00:10:26 with 0 errors on Sun Feb 14 15:49:19 2021
config:

NAME STATE READ WRITE CKSUM
tankmain DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500057 DEGRADED 2 0 9 too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500063 ONLINE 0 0 15
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500220 ONLINE 0 0 19

errors: No known data errors
接着我进行了 zfs scrub,然后没过多久后两个 ssd 又 faulted 了:

sudo zpool status -v
pool: tankmain
state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
repaired.
scan: scrub in progress since Sun Feb 14 15:56:49 2021
209G scanned at 1.76G/s, 903M issued at 7.59M/s, 755G total
849K repaired, 0.12% done, no estimated completion time
config:

NAME STATE READ WRITE CKSUM
tankmain DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500057 DEGRADED 3 0 9 too many errors (repairing)
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500063 FAULTED 32 0 1.90K too many errors (repairing)
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500220 FAULTED 64 0 419 too many errors (repairing)

待它 repair 完毕:

sudo zpool status -v
pool: tankmain
state: DEGRADED
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://zfsonlinux.org/msg/ZFS-8000-8A
scan: scrub repaired 970K in 0 days 00:29:42 with 213 errors on Sun Feb 14 16:26:31 2021
config:

NAME STATE READ WRITE CKSUM
tankmain DEGRADED 0 0 0
mirror-0 DEGRADED 168 0 0
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500057 DEGRADED 327 0 2.34K too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500063 FAULTED 32 0 690K too many errors
nvme-PLEXTOR_PX-1TM9PGN_+_P02952500220 FAULTED 64 0 682K too many errors

实际检查,应该有少数文件被修复了,但大部分没有。请问还有没有办法来恢复受损文件?
另外,关于出现这个情况的可能原因:

1.内存:我的内存是有 ecc 的,没超频,当初到手时也是各种方法检验正品,至少能保证不是粗制滥造的山寨货。而且也是用 memtest86 跑了好几天无错误的。只是我平时有时候内存用得比较满,这个有影响吗?

2.我家供电线路:笔记本有电池的,而且电源适配器功率也足够,虽然感觉不至于供电跟不上,但是结合一年多前的经历,这个也还是有可能的。一年多前,我还在使用另一只大带宽服务器笔记本,内置 ssd 在短时间里先后坏了两块,导致我主力数据全毁。没想到一年多后还有可能再经历一次这种事情。当时我猜测可能是我平时拆笔记本太暴力,有几次不拆电池就继续拆机,导致笔记本供电部分受到影响,最后导致它很容易坏 ssd 。我不敢再用这只笔记本做主力,又买了笔记本,还用三只 ssd 做 zfs mirror,想着总不至于三只还会同时坏了。新笔记本我也从未不拆电池就继续拆机过。但是现在还是这样,难道是我家的供电线路有问题?不同的笔记本,不同的电源适配器,都未能过滤掉这个供电的问题,导致 ssd 持续损坏?

3.笔记本主板供电:莫非是我笔记本主板上供电无法承受 3 个 ssd 同时读写(也就是说我之前一个笔记本坏 ssd 的问题跟现在这个没有联系)?有一个现象不知道跟这个有没有关联,就是笔记本雷电口和 USB 口的输出电流感觉都很低,很多时候识别不了移动硬盘。

4.是我对虚拟机的 vmdk 文件进行 defragment 和 compact 操作导致文件系统损坏?这个不太可能吧,那只是文件而已。

5.zfs 本身 bug 。这个就不知道怎么排查了。

6.这个型号 /批次的 ssd 都有缺陷。ssd 是浦科特 m9p plus 1t 。这个也很难排查。
一个笔记本可以插 5 个 SSD ?

是的,移动工作站

我觉得 99%是软件问题吧,另外一个就是冷数据问题,数据长期不重新写入,SSD 固件也没有做定期搬运。

linux 的 zfs 不是很好用的

大年三十服务器上坏了 2 块 4T 的 ssd,ssd 就是废物
非企业级 ssd 当服务器用途就是垃圾

算不上冷数据吧,ssd 也是一直用的,而且才一年。

除了供电,也猜不出别的问题。建议先把每个硬盘全盘 dump 到新盘。再去折腾修复问题。

冷数据跟 ssd 是否一直在用关系不大吧,固件设计不好的话,就会出现这种问题,具体可以搜索一下近期的西数冷数据事件。

3 个坏!这概率简直是连中 3 次 500 万的概率,建议再看看

楼主有后续吗?
用的是什么系统实现的 zfs ?
正在用 zfs,瑟瑟发抖。
怀疑可能还是供电相关,至少我用的三星 ssd 发热巨大,耗电应该不低。

暂时没有后续。我这问题太复杂,这里回应不多。请问你觉得还能去别的什么地方问呢?英文不是特别好,这么长一段描述想翻成英文发到英文网站简直不可能(写成中文都已经绞尽脑汁了)。

用的系统就是 ubuntu20.04 啊,描述里有说。

数据基本没救了,如果你在刚发现时全盘备份了 P02952500063 和 P02952500220,可以尝试还原后仅挂载这两块硬盘进行修复,应该能抢救出一些出错前的数据。P02952500057 长期 DEGRADED 运行,里面的数据已经无法保证正确了,所以 DEGRADED 之后读写的数据没有抢救的方法了。
硬件方面,你可以尝试同环境下用不同数量的硬盘重新组 ZFS,长时间高强度读写,看看能否复现错误。

stackoverflow 、ubuntu 、linux 论坛、SegmentFault ?
或者考虑 ubuntu 、linux 邮件列表?虽然目前邮件列表基本没人发言了,但是当初订阅的人应该还不少。
另外可以考虑试试 freebsd 能不能读取?
印象目前几家新版本的 zfs 能够通用了。如果是 linux zfs bug,freenas 可能能够规避下。
最好用新硬盘尝试恢复,目前的 ssd 还是别再动了。

谢谢!我在 BIOS 里屏蔽 P02952500057 后,仅挂载两块盘,已经可以正常读写数据了,数据都还在。但是 P02952500063 仍然 DEGRADED,P02952500220 ONLINE,即使再重启,两个都 ONLINE,等到手动 scrub 之后,P02952500063 又 DEGRADED 了。scrub 能检测出一些错误,而且都能成功修复,但是再 scrub,仍然会检测出错误,然后都能成功修复。仿佛是只有一块盘在运行,P02952500063 手动 scrub 才会被同步一次,跟上 P02952500220 的变动一样。这是否说明三块 ssd 我的笔记本同时只能读写一块呢,做 mirror ( raid1 )就会有问题呢?

应该不是冷数据问题,因为全盘 scrub 之后仍然 degraded

如果你是用台式机 /服务器 /普通工作站装的 freenas,电源和电源线没太差的话应该不用担心遇到像我这样的问题。唯一的共同点就是用了 zfs 了,这个问题感觉基本不可能是 zfs 本身 bug (就是 Linux 和 bsd 都有的问题)。
笔记本还是局限性太大了。现在看来,要数据安全不丢失损坏,一个 freenas +一个 Linux 主力台式机比较有保障。都用类似银欣 cs380 这样的 nas 专用机箱,一方面热拔插方便,另一方面有背板可靠供电。数据两边都存一份,Linux 这边用 btrfs,避免 zfs 本身 bug 带来的数据丢失损坏。Linux 主力台式机用 nas 专用机箱还有个好处,就是可以随时读以前遗留的硬盘,不需要买 USB 硬盘盒了(这种我买过很多,大部分都不稳),毕竟 freenas 那边很多文件系统不支持,还是 Linux 支持得最多。如果主力要用 windows 或者 macos 的话,Linux 台式机可以当作虚拟化主机(家用服务器),Linux 在虚拟化和应用支持上怎么也比 freenas 好,freenas 就单纯存数据比较合适。但是这一套下来需要花费的钱和精力太多了,尤其是现在这个时候,更加难。


我主力 nas 是直接裸机安装在 hp gen8 mini server 上面的,异地备份是 [email&gen6 的老服务器。都是服务器电源,应该问题不大。
nas 费用的确高,服务器还好,只要不在乎费电的话,收洋垃圾挺便宜。
但是大容量硬盘价格就...

导出数据后删除重建 zfs,目前没复现错误。但是用功率计测,cpu + gpu 满载,再加两盘 scrub,功率最大大约是 210w,两盘 scrub 功率 40w,也就是说 cpu + gpu 满载再加三盘 scrub 确实有点接近电源适配器的功率 240w 了,会不会是这个原因?有没有办法降低 ssd 性能从而降低功耗呢?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服