前言

玩过群晖的朋友都知道群晖的存储池在创建和使用的过程中经常能看到正在校验文件的一致性这个提示,虽然不知道底层原理但看着就让人很安心,让用户觉得文件绝对不会损坏。

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定期执行即可。

🎉


喝杯奶茶