在飞牛fnOS上手动进行文件完整性校验
前言
玩过群晖的朋友都知道群晖的存储池在创建和使用的过程中经常能看到正在校验文件的一致性
这个提示,虽然不知道底层原理但看着就让人很安心,让用户觉得文件绝对不会损坏。
fnos的存储空间的实现方案和群晖一样,都是mdadm + lvm + btrfs,但是fnos的存储空间在创建和使用的过程中,完全看不到校验文件一致性
的提示。这不由得让我担心我的文件是否会出现什么宇宙射线引起的比特翻转但系统又没有定期做scrub导致文件损坏。
那fnos到底有没有进行文件一致性校验,我不知道。
但是我们可以手动进行文件校验。
文件校验
fnos的存储空间实现方案是mdadm + lvm + btfs,在2025年5月的更新中加入了ext4的支持,但我这里依然以btrfs为例。
要进行的文件校验
分成两个部分:raid阵列的一致性校验 & 文件数据的一致性校验。
以下由ai提供的图表
那接下去就手动开始进行文件校验吧。
btrfs
以fnos的存储空间为例,一般挂载点都是/vol1
,那btrfs的文件校验是以挂载点为目标
# 对存储空间1启动文件校验
sudo btrfs scrub start /vol1
# 查看校验的进度
sudo btrfs scrub status /vol1
校验完整后,可以看到输出结果如下
UUID: 6412be10-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Scrub started: Tue May 13 23:22:05 2025
Status: finished
Duration: 1:15:23
Total to scrub: 514.29GiB
Rate: 116.43MiB/s
Error summary: no errors found
mdadm
先确认系统的阵列状态
cat /proc/mdstat
输出结果示意如下
Personalities : [raid6] [raid5] [raid4] [raid1] [linear] [raid0] [raid10]
md1 : active raid1 sde1[0]
156156928 blocks super 1.2 [1/1] [U]
bitmap: 0/2 pages [0KB], 65536KB chunk
md0 : active raid5 sdd1[2] sdc1[1] sdg1[4] sdb1[0] sdf1[3]
976261120 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
bitmap: 0/2 pages [0KB], 65536KB chunk
可以看到我的fnos上有一个单盘raid1阵列md1和一个五盘raid5阵列md0,其中五盘raid5阵列md0的状态是UUUUU
,表明5个盘都在线。
用mdadm -D /dev/md0
命令查看md0这个阵列的详细信息,确认State : clean
表明阵列当前的状态健康可用。
/dev/md0:
Version : 1.2
Creation Time : Wed May 7 14:34:16 2025
Raid Level : raid5
Array Size : 976261120 (931.04 GiB 999.69 GB)
Used Dev Size : 244065280 (232.76 GiB 249.92 GB)
Raid Devices : 5
Total Devices : 5
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Wed May 14 10:02:38 2025
State : clean
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Name : fnOS:0
UUID : 885de1e2:xxxxxxxx:xxxxxxxx:xxxxxxxx
Events : 43
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 81 3 active sync /dev/sdf1
4 8 97 4 active sync /dev/sdg1
然后就可以开始对md0启动完整性校验了。
sudo mdadm --action=check /dev/md0
查看校验的进度
# 方法一
sudo mdadm -D /dev/md0
# 方法二
cat /proc/mdstat
在输出内容中可以看到如下内容
# 方法一的输出
State : clean, checking
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Check Status : 7% complete
# 方法二的输出
[====>................] check = 24.6% (60277800/244065280) finish=72.9min speed=41962K/sec
好了,到这里就完成了手动触发mdadm和btrfs的文件一致性校验了,如果想要自动化操作,就可以写个bash脚本然后让crontab定期执行即可。
🎉