环境
fnOS 1.1.29, x86, 4 卷布局 /vol1~/vol4
症状
特定账号 /etc/samba/users/.share.conf 被写坏:
- 严重:0 字节,该账号所有 SMB 共享失效
- 轻度:部分私人共享丢失(name 数少于实际配置)
Web UI 权限页显示正常(Web UI 查 ACL,与 share.conf 不同源)
客户端表现:SMB 报错 67(网络名不存在)
定位
/usr/trim/logs/share_service.log 每次 rebuild 固定 4 条:
[error] [smb] /vol01/ not existed
strings /usr/trim/bin/share_service 可见硬编码字符串:
/vol00/
/vol01/
/vol01/%u/%s
/vol02/
(只到 02,无 /vol03 /vol04)
受影响函数:
sharing::BaseProtocol::AddUserFoldersByStorageId
sharing::BaseProtocol::AddTeamFoldersByStorageId
实际挂载是 /vol1~/vol4(单位数字无前导 0),
模板与命名不一致 → 路径 ENOENT → 某条件下空结果被写入 share.conf
触发
Docker 容器首次启动,bind-mount 目标在 /vol*// 下且需 mkdir
inotify CREATE 事件 → RebuildOtherSharesOnFileChanged → 踩坏路径
docker restart 已有容器不触发(目录已存在)
对比
冷启动 systemctl restart share_service:正确重建完整 share.conf
inotify 增量事件:踩坏路径,写残缺
当前外部 workaround
ln -s /vol1 /vol01
ln -s /vol2 /vol02
systemctl restart share_service
(透明 symlink,对其他组件无影响)
期望官方修复
1. share_service 路径模板与实际挂载命名一致(去除 /vol%02d 残留)
2. rebuild 结果为"空/减少"时增加保护:不 truncate 已有 share.conf,
fallback 到上一状态,待下次冷启动或正确 rebuild 再更新