|
|
【问题现象】
- 在命令行通过
zpool import 成功导入外部 ZFS 存储池(zpool),且飞牛 Web 端能识别并显示为“存储空间 2”。
- 系统重启(
reboot)后:
- Web 界面: “存储空间 2”显示为“未挂载”或消失。
- 命令行
df -h: 子数据集(如 /vol2/media、/vol2/photos)能正常挂载,但根池(zpool -> /vol2)丢失挂载。
- 手动执行
zfs set mountpoint=/vol2 zpool && zfs mount -a 或重新 zpool export & import 后,Web 界面立即可恢复正常。
【根本原因分析】
- 开机挂载抢占与并发冲突: 系统开机时,原生 Linux 的
zfs-mount 服务先于飞牛存储服务(trim_storage_manager)运行,将子数据集挂载,导致飞牛后台服务在开机扫描 /vol2 根路径锚点时判定异常。
- 挂载点持久化同步缺陷: 飞牛系统在接管外部导入的 ZFS 池后,未将其根挂载点(
/volX)的契约关系持久化写入系统的挂载逻辑,导致重启后根池丢失。
- 前端/后端状态不一致: 飞牛 Web 端的“存储空间”面板强依赖根节点(如
/vol2)的挂载状态;一旦根节点未挂载(即使子数据集已在),UI 即直接判定整个存储空间离线。
【优化与修复建议】
- 修复开机挂载顺序: 飞牛存储服务在启动时,应自动对已登记的 ZFS 存储池强制执行一次挂载点校验与重新挂载(类似于
zfs set mountpoint=/volX <pool> && zfs mount -a)。
- 完善外部池导入逻辑: 在 Web 端点击“识别/导入现有存储”后,后台除了
zpool import,应自动固化该池的 mountpoint 属性与系统数据库映射,使其享受与飞牛原生创建存储池完全相同的开机挂载生命周期。
|
|