OpenWRT 使用F2FS文件系统延长SD卡寿命

问题描述:
    在家使用树莓派安装OpenWRT系统做单臂路由,同时还做了下载服务器(下载的数据放在外挂硬盘中),7x24小时运行,结果大约用了2-3个月就挂了。几轮测试下来,我认为估计是SD卡挂了。
    然后决定重新搭建服务,不过这次要吸取教训,要注意保护SD卡了。
解决过程:
    网上查了一下,常见的解决方法是使用tmpfs的内存盘挂载到系统经常会写的地方, 如 /var/tmp、/var/log 等地方,缺点是log会丢。
    后来深入了解查询之后,了解到LFS类文件系统,以及对SD卡会很友好的f2fs文件系统。 于是决定将 /var 整个挂载为f2fs文件系统。
    决定挂载新的文件系统后,发现OpenWRT的挂载系统跟常规Linux相差太大,完全不是改fstab能搞定的,修改 /etc/config/fstab 也搞不定(uci 也是修改这个文件),估计原因是 /var 以及投入使用之后 再读取的 /etc/config/fstab,导致挂载失败(没有去确认log,懒得确认了)。
    查看 /etc/config/fstab 能发现一个问题,就是 / /boot /tmp 等挂载的文件系统,却不在这个文件里面,完全不明白怎么挂载进去的。
    后来去找了 OpenWRT Boot Sequence , 梳理了一下这个完全不同的boot流程,最后找到一个觉得最恰当方法,添加文件 /lib/preinit/77_mount_var, 内容如下:

$ cat /lib/preinit/77_mount_var
# Copyright (C) 2015 OpenWrt.org

mount_var_fs() {
    mount -t f2fs -o noatime /dev/mmcblk0p5 /var
}

boot_hook_add preinit_mount_root mount_var_fs


结果确认:
reboot 重启运行一段之间之后,查看磁盘IO:

$ iostat -p                    
Linux 5.4.128 (OpenWrt)     07/14/21    _aarch64_   (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.39    0.07    0.49    0.10    0.00   98.96

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
mmcblk0           3.15        80.08         8.71         5.39     214698      23352      14440
mmcblk0p1         0.03         0.41         0.00         0.00       1098          0          0
mmcblk0p2         1.92        71.58         0.56         0.00     191919       1496          0
mmcblk0p3         0.02         0.02         0.00         0.00         66          0          0
mmcblk0p5         1.16         7.74         8.15         5.39      20745      21856      14440

    可以看到90+%的写操作都转移了, mmcblk0p5分配了16GB容量,根据f2fs文件系统特性,应该不用愁了,且看能用多久把。

本文章由作者:佐须之男 整理编辑,原文地址: OpenWRT 使用F2FS文件系统延长SD卡寿命
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐