OpenWrt系统盘占满DHCP崩溃、配置文件丢失?AdGuard Home日志文件占满磁盘
最近家里的网络经历了一场"灵异事件"。原本稳定运行一个多月的路由器(ImmortalWrt系统)突然闹脾气:先是管理界面里的DHCP/DNS设置页面无法打开,屏幕上赫然显示着一段程序员最怕的报错提示:Cannot read properties of null (reading 'remove')更可怕的是,只要一重启路由器,整个网络就会彻底瘫痪——DHCP服务罢工、无法上网,连路由器IP都ping不通!
最让人崩溃的是:每次通过PVE虚拟机回滚备份后,总发现`/etc/config`目录下的关键配置文件(比如`firewall`和`dhcp`)变成了0字节的空文件,活像被神秘力量清空了数据。
破案过程:与BUG的斗智斗勇
第一阶段:怀疑Luci界面有Bug
起初,我注意到故障出现前曾批量设置了30多个设备的静态IP。在GitHub上搜索报错信息,发现OpenWrt官方仓库有个[未解决的同类Issue](https://github.com/openwrt/luci/issues/7326),描述的场景和我几乎一模一样!
当时的推测:可能是Luci网页界面在保存大量静态IP时出现异常,导致配置文件损坏。
但诡异的是,回滚系统后重新设置同样数量的静态IP,却无法稳定复现问题。这让我意识到——凶手可能另有其人。
第二阶段:发现隐藏的"磁盘杀手"
某次故障时,我随手输入了`df -h`查看磁盘空间,突然发现真相就在眼前:
根目录(/dev/root)竟然被占满了! 290MB的小分区完全爆满,导致系统根本无法写入新配置。
顺着`du -sh /*`命令层层排查,最终锁定了罪魁祸首——
`/usr/bin/AdGuardHome/data/querylog.json` 这个日志文件,体积已经膨胀到200MB+!
AdGuard Home的陷阱
检查AdGuard配置时,发现了这个致命设定:
querylog: dir_path: "" # 未指定路径,默认写入系统目录 interval: 2160h # 保留90天日志(约3个月) size_memory: 1000 # 内存缓存1000条记录(实际可能按MB计算)
问题就出在这三个配置的叠加效应:
1. 日志默认写入系统分区(仅290MB)
2. 长期保留日志 + 大内存缓存 → 日志文件疯狂增长
3. 磁盘写满后,系统配置文件无法保存 → 出现0字节文件
这和网友的血泪经历https://forum.cloudron.io/topic/9047/adguard-querylog-json-at-2-gb如出一辙:有人甚至被吃掉2GB空间!
四、终极解决方案
现在我的AdGuard配置已经改成这样:
querylog: dir_path: "/mnt/sda1/AdGuardLogs" # 指定大容量存储分区 interval: 720h # 保留30天 size_memory: 100 # 内存缓存降至100条 enabled: true # 保持基础查询日志 file_enabled: true
调整后效果:
- 日志文件转移出系统盘
- 保留周期从90天→30天
- 内存占用减少90%
- 系统分区使用率长期维持在50%以下
给折腾人们的建议
1. 监控磁盘空间:给路由器装个`cockpit`或定期运行`df -h`
2. 服务日志外迁:把Docker、AdGuard等日志指向`/mnt`等大分区
3. 慎用长期日志:安全类日志建议搭配日志服务器,别让路由器扛所有
4. 备份!备份!备份!:重要配置定期导出,PVE/LXC快照永远是最强后盾
后记
这次排查教会我一个道理:再小的系统服务,也可能成为"压死骆驼的最后一根稻草"。现在我的路由器终于恢复了往日的稳定,希望这篇踩坑记录能帮你少走弯路!
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看