飞牛 NAS 故障复盘
适合:技术博客发布 / 提交官方工单附件
目标:不仅讲结论,也讲“怎么排查、怎么修、怎么验证”
1. 环境与问题概述
- 设备:两台飞牛 NAS(记为 NAS-A、NAS-B)
更新后主要问题:
- SMB 显示开启,但共享“可发现不可访问”
- 文档服务
trim-docs-pgsql启动失败 - 一台机器出现持续
soft lockup内核告警
2. SMB 故障:完整排查与修复步骤
2.1 现象确认(先不改配置)
A. 检查端口是否监听
# 在任意同网段终端
nc -vz NAS_IP 139
nc -vz NAS_IP 445- 端口不开:优先查服务未起
- 端口开但打不开共享:优先查 Samba 日志与配置
B. 检查 SMB 服务状态
systemctl is-active smbd nmbd smb
systemctl status smbd --no-pager -n 50C. 查看关键日志
journalctl -u smbd -n 120 --no-pager | egrep -i 'trim_perms|vfs_init failed|error loading module|NT_STATUS'本次故障核心命中:trim_perms.so 不存在但被配置加载。2.2 配置修复(核心)
A. 先备份配置
sudo cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date +%F-%H%M%S)
sudo cp -a /etc/samba/smb.custom.conf /etc/samba/smb.custom.conf.bak.$(date +%F-%H%M%S)B. 移除失效 VFS 模块组合
sudo sed -i 's/vfs objects = trim_perms full_audit/vfs objects = full_audit/g' \
/etc/samba/smb.conf /etc/samba/smb.custom.confC. 确保共享 include 生效(按你的系统实际 share 文件路径)
grep -q '^\s*include\s*=\s*/etc/samba/users/1000.share.conf\s*$' /etc/samba/smb.conf || \
echo ' include = /etc/samba/users/1000.share.conf' | sudo tee -a /etc/samba/smb.conf >/dev/nullD. 语法检查 + 重启服务
sudo testparm -s
sudo systemctl restart smbd nmbd smb
systemctl is-active smbd nmbd smb2.3 防复发(关键)
问题点:后台切换 SMB 开关会重写配置,可能把 trim_perms 写回来。A. 写入启动前自修脚本
sudo tee /usr/local/sbin/fix-smb-vfs.sh >/dev/null <<'SH'
#!/bin/sh
set -eu
for f in /etc/samba/smb.conf /etc/samba/smb.custom.conf; do
[ -f "$f" ] || continue
sed -i 's/vfs objects = trim_perms full_audit/vfs objects = full_audit/g' "$f"
done
if [ -f /etc/samba/smb.conf ]; then
grep -q 'include = /etc/samba/users/1000.share.conf' /etc/samba/smb.conf || \
echo ' include = /etc/samba/users/1000.share.conf' >> /etc/samba/smb.conf
fi
testparm -s >/dev/null 2>/dev/null || exit 1
SH
sudo chmod 755 /usr/local/sbin/fix-smb-vfs.shB. 做 systemd override(每次 smbd 启动前自动纠偏)
sudo mkdir -p /etc/systemd/system/smbd.service.d
sudo tee /etc/systemd/system/smbd.service.d/override.conf >/dev/null <<'EOF'
[Service]
ExecStartPre=/usr/local/sbin/fix-smb-vfs.sh
EOF
sudo systemctl daemon-reload
sudo systemctl restart smbd nmbd smb2.4 修复后验证
# 本机枚举(NAS 内部)
smbclient -L //127.0.0.1 -U YOUR_USER%YOUR_PASS -m SMB3
# 客户端验证
# Windows: \\NAS_IP
# macOS: smb://NAS_IP同时看最近日志不再出现:
trim_perms.somissingvfs_init failed for trim_perms
3. 文档服务 trim-docs-pgsql:排查与处理步骤
3.1 快速诊断
systemctl is-active trim-docs-pgsql
sudo systemctl status trim-docs-pgsql.service --no-pager -n 40
sudo journalctl -u trim-docs-pgsql.service -n 80 --no-pager本次命中错误:
pg_ctl: directory ".../trim.docs/pgsql-data/db" does not exist即 PGDATA 路径缺失。
3.2 先止血(低风险)
sudo systemctl disable --now trim-docs-pgsql.service目的:停止重启风暴,降低系统噪音与干扰。
3.3 查找可恢复目录(非破坏性)
sudo find /vol1 /vol2 /var/lib -maxdepth 6 -type d \( -iname '*trim*docs*' -o -iname 'pgsql-data' -o -iname 'postgres*' \) 2>/dev/null
sudo ls -lah /vol1/@appmeta/trim.docs 2>/dev/null如果找到原目录,优先做“路径修正 + 权限恢复”。
3.4 本次实际结果
- 目录缺失问题明确
- 你后续通过启用/更新文档编辑器应用后,前台功能恢复
- 底层数据库路径问题建议继续观察(避免后续再次异常)
4. soft lockup:应急处置步骤
4.1 现场症状
持续出现:
watchdog: BUG: soft lockup - CPU#X stuck for XXXXs! [kworker/X:Y:PID]4.2 先留证据
sudo journalctl -k --since "2 hours ago" --no-pager > /tmp/kernel-lockup.log
sudo ps -eLo pid,tid,psr,pcpu,stat,comm,wchan:32 | grep kworker > /tmp/kworker.log4.3 快速止血
- 进入维护窗口后重启
- 重启后第一时间复查:
uptime
sudo journalctl -k -b --no-pager | egrep -i 'soft lockup|watchdog|hung task'
vmstat 1 34.4 本次结果
- 重启前持续告警
- 重启后复查未再持续出现同类告警(仍建议短期观察)
5. 最终状态(本轮结束)
- NAS-A:SMB 恢复并做了防复发
- NAS-B:SMB 恢复;文档服务根因已定位;soft lockup 重启后暂未复发