软路由半年一掉固件?别急着甩锅TF卡,这4个藏在系统默认里的隐形写入才是元凶

源自130位全网作者

15:29

玩 ARM 软路由的朋友,大概率都撞见过这种"灵异事件":几百块钱的 NanoPi R2S、R4S 或者树莓派,固件刚刷好的头三个月稳如老狗、跑满千兆;到半年上下,某天早上全家突然断网——进后台一看,插件配置全丢、页面报错,重启甚至直接不亮灯。 论坛老哥的诊断通常就一句话:"挑卡,换张大牌卡重刷。"于是你骂骂咧咧地换卡、重刷、导入备份,进入下一个半年轮回。知乎

软路由半年一掉固件?别急着甩锅TF卡,这4个藏在系统默认里的隐形写入才是元凶

这个月 15 号,知乎上一篇给"暴毙 TF 卡"做法医尸检的文章把讨论重新点燃。作者拆开自己一台跑了很久的 R2S,对存储子系统、分区挂载和内核 I/O 队列逐层排查后,给出了一个和民间结论拧着的判断:软路由掉固件,根本不只是"卡不行",而是系统默认配置在暗无天日地连续写入你的闪存卡。 我把这份尸检和知乎、B 站上几条高热度讨论放在一起对了一遍账,整理成一份每个软路由用户都能自查的清单。知乎

一、先接受一个反直觉事实:你的路由器并不"闲"

很多人的第一反应是:路由器又不下载电影、不写大文件,卡怎么会写坏? 坏卡的从来不是你主动的写,而是系统后台的写。哔哩哔哩

闪存靠囚禁电子来表示 0 和 1,电荷偏移累积超过主控纠错极限,就会产生不可修复的错误,固件当场损坏。更阴险的是擦除粒度:尸检作者在一张高耐久卡上读到它的最佳物理擦除块是 4MB——也就是说,系统哪怕只改写 4KB 的零碎数据,卡内部也得把整块 4MB 读出来、擦掉、再重写。知乎

高频 4KB 随机写,配上从来不做的 TRIM(告诉主控哪些块已经删了),写入量会被成倍放大;等全盘脏块塞满,某一次突发写入就能让廉价主控在后台算映射表算到超死机,内核日志里就留下那句经典遗言:`mmc0: Card stuck being busy!`。知乎

行车记录仪烧卡,是连续大写入;软路由烧卡,是细碎随机写。工况不是更轻,是更阴险。

二、四个"隐形写入者",建议逐个对照自查

尸检揪出的元凶,全部藏在固件默认配置里:

1. 默认挂载的 Swap。 该固件在存储分区里创建了一个 512MB 的 swapfile 并开机自动挂载。 对一台 7×24 常开的设备来说,swap 把内存里每一次冷页换出都变成实打实的闪存写入。知乎

2. 从没开过的 TRIM。 内核明确支持大容量 Discard 指令,但系统默认没有安排定时 fstrim。删除只是"名义删除",垃圾回收越积越多,最后在某个凌晨集中爆发。

3. 插件的午夜"落盘派对"。 OpenClash 默认把 GeoIP、GeoSite、大陆白名单三个规则更新全部排在凌晨 0 点 0 分同一秒触发,同时拉取、同时解压、同时落盘,SD 总线 I/O 队列瞬间打满。 最气人的是,你手动把它们改成错峰,插件自动重启时会直接删掉你改的 crontab,按自己的底层配置把三个任务全部洗回 0 点——改表没用,得改它自己的配置。知乎

4. 日志与统计类小写入。 评论区高赞观点一针见血:Linux 的 tmpfs 那么好用,自己优化一下,家用路由器除了系统更新,本来就该是对卡的零写入。知乎

软路由半年一掉固件?别急着甩锅TF卡,这4个藏在系统默认里的隐形写入才是元凶

需要说清楚的是:以上是作者在那套特定固件版本下的实测,各家固件、各版本插件行为并不相同。别直接抄作业,先在路由器上跑三条命令对自家情况:看看 `/proc/swaps` 里有没有条目、`/etc/crontabs/root` 里有没有整点扎堆的任务、系统里有没有定时 fstrim。三项全中,你家断网就真的不能全赖卡。

三、社区的三条路线:不用统一答案,按人群对号入座

文章评论区其实吵出了软路由圈三种典型解法,正好对应三类玩家:

换好卡派——上 SanDisk High Endurance 这类监控级高耐久卡。适合完全不想动系统的人。但尸检已经给出答案:高耐久卡只是死得慢一点,写入模式不改,只是把半年轮回延长成更长的轮回。

零写入派——swap 换成内存里的压缩交换区,日志、临时数据能挪进 tmpfs 的全挪进去,配合 noatime 挂载。零成本、最治本,但要求你敢敲命令、能看懂输出。

换硬件派——"我后来直接换傲腾加大内存了,有种你把这玩意跑坏。"这话背后有个事实:固态硬盘有自己的维护主控和磨损均衡,TF 卡那套"黑盒主控+没有后台养护"的暴毙逻辑对它根本不成立。 预算和空间允许的话,X86 小主机加 SSD 是从结构上退出这场磨损循环的方案。知乎

软路由半年一掉固件?别急着甩锅TF卡,这4个藏在系统默认里的隐形写入才是元凶

四、十分钟能抄完的自救组合

留在 TF 卡路线上的,按性价比重排尸检方案,不用重刷系统:

  1. 先开 zram 再卸 swapfile:内存页平滑迁回、全程不断档,swap 彻底变成零闪存写入;同时给挂载选项补上 noatime。

  2. 错峰插件任务:不碰 crontab,直接改插件底层配置,把三个规则更新打散到凌晨 0、3、5 点,改完用 `crontab -l` 确认它自己生成的任务已经错峰。

  3. 定时 fstrim,小心隐藏分区:对以读写模式挂载的隐藏分区,可以用 rw、noatime 临时挂上去执行 TRIM,内核复用超级块,耗时几乎为零。一个实测踩过的大坑:千万别自作聪明加只读参数 `-o ro` 去临时挂载,内核会因为读写标志冲突当场报错拒绝。

  4. 终极保险不是卡,是备份:这套分区拓扑有个巧妙的地方——bootloader、内核、插件和配置所在的系统核心区总共不到 3GB,加起来一共只有 2936MB 左右。 每 1-2 个月从主力电脑 SSH 跑一条 dd 命令,把这不到 3GB 的原样备份出来,卡真死了,灌回新卡十几分钟满血复活。知乎

软路由半年一掉固件?别急着甩锅TF卡,这4个藏在系统默认里的隐形写入才是元凶

五、什么时候该考虑让 TF 卡退休

如果你的机器同时满足三件事:半年内掉过两次固件、装着 OpenClash 这类规则落盘插件、存储只有 TF 卡——那它已经进了磨损加速通道,继续抢救的时间成本开始超过迁移成本。反过来,只跑一个干净固件当旁路由、几乎不装落盘插件的,TF 卡的风险远小于论坛传说。值得持续观察的信号也很简单:串口和系统日志里一旦出现 `Card stuck being busy`、I/O error 这类字样频率变高,就是卡在你听不见的地方呻吟了,别等它彻底哑掉。

DIY 网络设备的价值从来不在刷机那一刻,而在之后能安静稳定地跑几年。每一次凌晨断网、每一次重刷固件,才是这个爱好真正的持有成本。如果你手里正好有一台"每半年轮回一次"的软路由,先别买卡——打开 `/proc/swaps` 和计划任务表看一眼,大概率你会发现:断掉你家网的不是那张卡,而是几个没人通知你的默认设置。

内容由AI生成
0
扫一下,分享更方便,购买更轻松
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

最新文章 热门文章