## 问题现象
- SMB 挂载后,`/vol1`(RAIDZ2,6块 HDD)上的个人文件夹(Bak、Clips、Documents、Downloads、Media、stash)每天自动消失,无法通过 SMB 访问。
- 文件本身并未丢失,在 NAS 本地文件系统上完好存在。
- 通过飞牛管理界面重新配置「文件管理设置 → SMB → 可见文件夹范围」后,文件夹重新出现。
- 问题每天发生,发生时间约为 00:00(午夜)。
---
## 根本原因
`share_service`(飞牛核心 SMB 配置管理服务)在每日 ZFS 快照任务触发后重新生成 SMB 配置文件,但在重新写入 `/usr/trim/var/share_service/<uid>/smb.conf` 时,产生了**不完整的 JSON**,缺少 `items`、`mounted`、`appShare`、`external`、`team` 等字段。
### 对比:正常(FTP)vs 损坏(SMB)
**`/usr/trim/var/share_service/1000/ftp.conf`(正常)**:
`json
{
"updated": 1776528015525,
"encoding": "",
"mode": 2,
"extended": {
"teamShareMode": 2,
"mounted": [],
"appShare": [],
"external": [],
"team": []
},
"items": [[], []]
}
/usr/trim/var/share_service/1000/smb.conf(损坏状态):
{
"updated": 1776528015513,
"encoding": "",
"mode": 2,
"extended": {
"teamShareMode": 2
}
}
items 字段缺失时,share_service 不为用户的个人文件夹生成 Samba share 定义,导致这些文件夹在 SMB 连接下不可见。
触发时序(以 2026-04-19 00:00 为例)
| 时间 |
事件 |
| 00:00:00 |
ZFS 快照任务(trim.snapshots)触发 |
| 00:00:15 |
磁盘 sdf、sdg 唤醒(vol2 镜像组) |
| 00:00:15 |
share_service 重新写入 1000.share.conf(此时 smb.conf 已损坏) |
| 00:00:15 |
所有用户的 smb.conf 被截断写入(uid=1000、1001、1002 均受影响) |
| 之后 |
新的 SMB 连接找不到个人文件夹 shares;已建立的连接暂时不受影响 |
Bug 位置:share_service 在处理 ZFS 快照完成事件时,重新生成 /usr/trim/var/share_service/<uid>/smb.conf 的逻辑中存在缺陷,导致 JSON 被截断写入(缺少 items 字段和 extended 子字段)。FTP/NFS/WebDAV 的同名配置文件写入正确,仅 SMB 受影响。
重现条件:
- 飞牛 NAS 配置了「每日 ZFS 快照」
- SMB「可见文件夹范围 → 我的文件」设为「全部允许」
- 等待每日 00:00 快照任务执行后,断开并重新连接 SMB
建议修复:在 share_service 写入 smb.conf 前验证 JSON 结构完整性,确保 items 字段始终被写入。