1. 当前位置: 网站首页 >  NAS >  NAS的数据放久了会悄悄坏掉吗?我第一次跑洗盘揪出3个坏块,2个当场修好

NAS的数据放久了会悄悄坏掉吗?我第一次跑洗盘揪出3个坏块,2个当场修好

NAS数据校验洗盘流程图:RAID1两块盘逐块核对校验码,坏块三去向与月度排班

上个月翻硬盘里2019年的照片,想给媳妇剪个生日视频。有一张JPEG下半截糊成一坨彩虹条,还有段手机拍的MP4播到一半直接卡死。我的第一反应是盘要完了,赶紧进后台看SMART,各项全绿,一条黄的都没有。

折腾到半夜才想明白一件事:盘没坏,不等于数据没坏。这俩是两码事。而我这台飞牛跑了三年,一次数据校验都没跑过——相当于把一仓库的货锁进去,三年没点过一次数。

先说清楚:数据是真的会悄悄翻位的

行话叫位衰减,英文bit rot。机械盘靠磁畴存0和1,固态靠电荷,这两样东西都不是刻在石头上的,放着不动也会自己翻转几个位。翻转的时候盘不会报警,系统不会报错,翻完了它自己都不知道。等你哪天打开那个文件,读出来的是错的——照片花屏、视频卡死、ZIP解压报CRC错误、文档打开是乱码,全是这时候才现形。

为什么SMART全绿也查不出来?因为SMART是盘的「体检表」,管的是磁头、伺服、重映射这些体质层的事,我在讲SMART那篇里掰过:体检正常说明身体好,不代表口袋里的钞票没被偷。数据块的内容对不对,盘自己是不知道的,得靠文件系统去核对。

而文件系统里,ext4和Btrfs是两个态度。ext4读出来啥样就信啥样,错的不说错;Btrfs是每个数据块都带一份校验码,写进去的时候算好存着,读的时候(或者巡检的时候)重新算一遍对答案。我当初在这两者之间怎么选的,写过一篇ext4还是Btrfs,当时只当是选型问题,这回才知道校验这项是保命的。

第一次跑洗盘:进度条慢到我以为死机了

飞牛里这个功能叫「数据校验」,存储池右键就有;群晖叫「数据洗涤」,存储池页面上方「动作」下拉里。命令行党直接一句btrfs scrub start /vol1也行,效果一样。

我挑了个周五晚上十点点下去。前二十分钟我是懵的——进度条纹丝不动,页面也不转圈,盘阵倒是嗡嗡响。差点就给取消了。后来盯着btrfs scrub status看才明白,它的进度统计是以几个G为单位跳的,我那4T的池,得跑够一会儿数字才动。最终跑完用了6小时40分,凌晨四点五十结束。

有三个体验提前给你打预防针。一是它真在读盘,两块盘的读灯基本常亮,夜里听着有点渗人,正常。二是跑的过程中共享文件夹的速度掉一半还多,读带宽全被校验吃了,别挑白天大家看片下文件的时候跑。三是如果你配了硬盘休眠,洗盘会把睡着的盘整块叫醒,跟我在硬盘休眠老是失败那篇里排到的偷写盘是一个道理,排班时错开。

报告里两列数字,一列是喜报,一列是病危通知

跑完的报告很朴素,但两列数字天差地别,看不懂容易吃暗亏:

报告项它意味着什么你该有的反应
校验错误(已修复)块坏了,但从镜像盘或校验码上救回来了喜报。数据没丢,但盘有隐患,留意后续
校验错误(无法修复)坏块的副本或校验码也没了病危。立刻去备份里找这个文件
校验通过绝大多数块都是这个不用管

我的报告是3个坏块:2个当场修好,1个修不了。修好的那两个好理解——我组的是RAID1,btrfs发现A盘某块校验对不上,就去B盘把同一块数据读回来回填,顺便把A盘上坏的那份覆盖掉。这就是镜像池的价值,单盘Btrfs也能查出坏块,但只能报告,没得修。

修不了的那1个,是两块盘上的副本都坏了。两块盘同一段先后坏,概率低,但摊上就是100%。我后来翻日志推断,那段数据是2023年夏天一次异常断电时写进去的,写完就没再动过——当时没配UPS,吃了没文化的亏,现在机器后面挂着UPS,断电那套账我补过了。

那个坏块覆盖的正好是两段视频里的半分钟。文件本体还在,就是中间那半分钟打不开。我从我妈家那台老群晖的异地备份里把旧版本翻回来覆盖掉,事情才算了结——这也是我坚持两台机器异地备份的原因, RAID救的是盘坏,救不了数据本身坏,快照、备份、迁移各管哪种灾那篇分得清清楚楚,别指望错人。

多久跑一次:我的排班和三条规矩

现在我的洗盘设在每月1号凌晨3点自动跑,飞牛的计划任务里加一条就行,群晖在任务计划里配。三条规矩供你参考:

  • 错峰:别跟备份任务撞车。我的rsync是每天早上五点往我妈家推,洗盘放凌晨三点,跑完正好错开,两边都别拖慢对方。
  • 避开休眠窗口:硬盘休眠时段别安排读盘任务,不然休眠等于白配,定时开关机的机器更要把校验塞进通电的窗口里。
  • 别叠加:洗盘期间别同时跑什么全盘哈希、坏道扫描,两拨大读挤一块,速度稀碎还容易超时。

频率这事量力而行。存家人照片文档的主力池,我建议月度;纯下载盘、下完看完就删的,一季度甚至半年一次都不亏——反正坏了大不了重下。4T的池一晚上跑完,睡觉前后脚的事,别被6小时吓退。

另外说一句,洗盘和快照不冲突反而互补:快照防手滑,洗盘防翻位,两层的账在快照那篇里算过。真到了池子降级、需要换盘重建的时候,先洗一遍盘心里更有底,降级修复的流程我照过五步走过一遍。

ext4的盘没有洗盘这回事,两条土路凑合

如果你跟我妈家那台一样,池子是ext4,那就没有scrub可跑——文件系统不存校验码,无据可对。两条土路:

第一条,全盘读测试。群晖在存储管理器里对盘跑测试,命令行是smartctl -t long /dev/sda,本质是把整块盘读一遍,读不出来的地方会现形。但它只能抓「读不了」,抓不了「读得出来但内容是错的」——位衰减坏掉的块,读是完全读得动的。

第二条,哈希账本。对重要的文件夹建一份校验文件:find /vol1/photo -type f -exec md5sum {} + > /vol1/hash2026.txt,隔半年重新算一遍跟账本对,md5sum -c。哪个文件悄悄变了,一条命令揪出来。缺点是麻烦,还得自己存账本,我是一年跑一次,配着全盘读一起。

两条路都是「读一整遍盘」的成本,比Btrfs那套现成功能土得多。所以在装系统选文件系统那天起,这条路就该想好,别等照片花了才临时抱佛脚。

收尾:照这个顺序做一遍

  1. 先确认自己的池是什么文件系统,群晖看存储池属性,飞牛df -T一眼就有。
  2. Btrfs的池,今晚就手动跑第一次洗盘,看一次报告,心里有数。
  3. 报告里有「无法修复」的,先别慌,去备份里翻旧版本,顺便把这事记下来。
  4. 设成月度凌晨自动,错开备份和休眠的时段。
  5. ext4的池,一年至少一次全盘读加一次哈希账本。

位衰减这事,概率小、周期长,三年才遇上3个块,听着不值一提。可摊上那1个修不掉的,就是你媳妇生日视频里半段黑屏。照片这种东西没有后悔药,洗一晚上的盘,换三年睡得着,这账怎么算都不亏。

展开全文


版权说明 手机扫码阅读
版权所有:《数巢笔记》 => 《NAS的数据放久了会悄悄坏掉吗?我第一次跑洗盘揪出3个坏块,2个当场修好》
本文地址:https://www.shunot.com/nas/1538.html
除非注明,文章均为 《SHUNOT》 原创,欢迎转载!转载请注明本文地址,谢谢。

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:master_135

工作日:9:00-23:00,节假日休息

扫码关注