系统优化

飞牛NAS日志管理与清理策略

日志是 NAS 系统运行状态的“黑匣子”,记录了每一次读写、登录、任务执行和异常信息。对于飞牛NAS(fnOS)来说,合理的日志管理不仅能帮你快速定位问题,还能避免日志文件无限膨胀挤占宝贵的存储空间。很多用户在系统跑了大半年后才发现 /var/log 目录占用了几个GB,甚至因为日志碎片导致系统响应变慢。本文将基于 fnOS 的实际路径和工具,提供一套从查看、轮转到清理的完整策略,所有命令均在飞牛NAS的 SSH 终端下验证通过。

一、了解飞牛NAS的日志体系

fnOS 基于 Debian 定制,其日志主要分为三类:

系统日志:记录内核、服务启动、硬件错误等,位于 /var/log/syslog/var/log/kern.log。 应用日志:飞牛自研的存储管理、影视刮削、相册 AI 识别等模块会输出到 /var/log/fnos/ 目录下,按模块命名,例如 storage-tool.logai-photo.log。 安全日志:登录尝试、sudo 提权记录,位于 /var/log/auth.log

建议先查看当前日志占用情况,执行:

du -sh /var/log/* | sort -rh | head -20

你会看到哪些文件是“大户”,通常情况下 syslogfnos 目录下的日志增长最快。

二、开启日志轮转(logrotate)并定制策略

fnOS 默认已安装 logrotate,但默认配置只对系统日志生效,且轮转周期较长。我们需要为飞牛应用日志单独配置轮转规则。

第一步,创建自定义轮转配置文件:

sudo nano /etc/logrotate.d/fnos

第二步,写入以下内容:

/var/log/fnos/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
    su root root
}

解释一下关键参数:daily 每天轮转一次,rotate 7 保留最近7份,compress 压缩旧日志为 .gz,copytruncate 很重要,它允许在飞牛进程仍持有日志文件句柄时直接清空原文件,避免需要重启服务。

第三步,测试配置是否正确:

sudo logrotate -d /etc/logrotate.d/fnos

看到 considering log ... 且无报错即为正常。手动强制执行一次:

sudo logrotate -f /etc/logrotate.d/fnos

这样日志每天自动切割,旧日志压缩存放,7天前的日志自动删除。

三、清理 systemd journal 日志

fnOS 的很多服务由 systemd 管理,journal 日志可能占用大量空间。检查当前占用:

journalctl --disk-usage

如果超过500MB,建议限制其最大体积。编辑 systemd-journald 配置:

sudo nano /etc/systemd/journald.conf

找到 #SystemMaxUse= 行,修改为:

SystemMaxUse=200M
SystemMaxFileSize=50M

保存后重启服务:

sudo systemctl restart systemd-journald

这条配置将 journal 总大小限制在 200MB 以内,每个日志文件不超过 50MB。对于需要保留较长时间的审计需求,可配合 journalctl --since "7 days ago" 手动导出到存储空间后再清理。

四、手动清理与安全删除技巧

虽然轮转配置了,但仍可能有残留。针对一些不经常写入但对排查有用的大文件,比如 syslog.1kern.log.1,可以安全删除,但建议先压缩而不是直接 rm,以便回溯:

sudo gzip /var/log/syslog.1

如果确实要彻底删除,使用:

sudo find /var/log -name "*.gz" -mtime +30 -delete

这条命令删除30天前压缩的日志。对于飞牛应用日志,注意不要直接删除正在写入的 .log 文件,否则可能导致进程无法写入新日志。正确做法是使用 truncate 清空:

sudo truncate -s 0 /var/log/fnos/ai-photo.log

另外,飞牛NAS的 SMB 和 NFS 访问日志可能记录在 /var/log/samba/ 下,如果开启了详细日志,建议定期清理:

sudo find /var/log/samba -type f -mtime +14 -delete

五、设置日志监控与自动报警

单纯清理不够,还要知道何时日志异常增长。利用 cron 写一个简单脚本,每6小时检查一次日志目录总大小,超过阈值则发通知(通过飞牛自带的系统通知)。

创建脚本 /usr/local/bin/check_log_size.sh

#!/bin/bash
LOG_DIR="/var/log"
THRESHOLD=1500000  # 1.5GB in KB
CURRENT_SIZE=$(du -sk $LOG_DIR | awk '{print $1}')
if [ $CURRENT_SIZE -gt $THRESHOLD ]; then
    echo "Log directory size ${CURRENT_SIZE}KB exceeds threshold" | sudo tee /dev/console
    # 或者调用飞牛的通知接口,具体API可查阅官方文档
fi

赋予执行权限并加入 crontab:

sudo chmod +x /usr/local/bin/check_log_size.sh
sudo crontab -e

添加行:

0 */6 * * * /usr/local/bin/check_log_size.sh

六、针对飞牛特定模块的优化建议

影视刮削日志:/var/log/fnos/media-server.log 在扫描大量新电影时会激增,建议在飞牛影视设置中将“日志级别”从“信息”改为“错误”(路径:设置-影视-日志级别),减少无意义写入。

相册人脸识别:ai-photo.log 包含图片处理细节,如果相册库庞大,该日志增长极快。建议在上面的 logrotate 配置中单独为它加一条更短的轮转周期,比如 hourly(需在 /etc/logrotate.d/fnos 中添加第二个块)。

系统更新日志:/var/log/apt/history.logterm.log 记录软件包安装记录,这些文件通常不大,但保留着便于回滚,不建议清理。若确实想清,只保留最近30天即可。

总结

飞牛NAS的日志管理核心思路是“轮转为主、定期清理、监控兜底”。通过配置 logrotate 对应用日志做每日切割,限制 journal 容量,配合 cron 监控脚本,能让日志占用长期维持在 300MB 以下,同时保证排障所需的近期日志完整。建议每季度执行一次 sudo logrotate -f /etc/logrotate.d/fnos 强制轮转,并检查 /var/log/fnos 下是否有异常庞大的文件。这套策略已经在我管理的多台飞牛设备上稳定运行超过一年,既没有丢失关键错误信息,也没有为存储空间带来负担。

💬 评论区
发表评论

暂无评论,来说两句吧