外观
共享文件夹:OMV 共享的基本单位
OMV 里的 SMB、NFS、rsync、FTP 以及不少插件,都不直接填磁盘路径,而是引用「共享文件夹」(Shared folder)。这篇讲清它是什么、怎么建、默认权限是什么,以及它为什么有时删不掉、有时显示「不可用」。做完之后,你会有一个可以被各种服务引用的共享文件夹。
它是什么
共享文件夹由三样东西合成:一个已挂载的文件系统、其中的一个相对路径、OMV 数据库里的一条记录。
text
文件系统(挂载点 /srv/dev-disk-by-uuid-<UUID>)
└── media/ ← 磁盘上真实存在的目录,文件都存在这里
共享文件夹「media」 = 上面的文件系统 + 相对路径 media/ + 共享权限等设置
├── 被 SMB 共享引用
├── 被 NFS 共享引用
└── 被 rsync 模块、FTP 共享、各种插件引用- 绝对路径 = 挂载点 + 相对路径,例如
/srv/dev-disk-by-uuid-<UUID>/media/。 - 在 Btrfs 文件系统上,共享文件夹会建成子卷,其他文件系统上是普通目录。只有子卷才能做快照,见 Btrfs:多盘、快照与数据校验。
- 数据库记录里还保存「共享权限」,也就是后面几篇讲的第一层权限。
开始之前
- 先有一个已挂载的数据盘文件系统,见 创建并挂载文件系统。创建表单的下拉框里只会出现已挂载的文件系统。
- 系统盘默认不能建共享文件夹,OMV 官方也不支持把系统盘当数据盘用。确实需要时看 在系统盘上建共享文件夹:sharerootfs。
- 按用途拆分:一个共享文件夹对应一类数据(媒体、照片、备份、容器数据……)。所有东西塞进一个共享文件夹,权限几乎没法理清。
创建共享文件夹
打开
存储器 → 共享文件夹(Storage → Shared Folders),点击 创建(Create)。填写表单:
字段 说明 名称(Name) 共享文件夹的逻辑名,SMB 共享名、NFS 导出路径都用它。全局唯一,最长 80 个字符 文件系统(File system) 共享文件夹所在的文件系统,只列出已挂载的 相对路径(Relative path) 文件系统内的目录。填 /表示共享整个文件系统的根;目录不存在时 OMV 会创建它。名称填好后,相对路径为空时会自动补成<名称>/权限(Permissions) 新建目录时使用的文件系统权限,默认「管理员:读/写,用户:读/写,其它:只读」(775)。只在创建时出现 标签(Tags) 备注或分类,不影响功能 点击 保存(Save)。OMV 在这一刻就把目录建好、权限设好;页面顶部出现黄色提示条时点击 应用(Apply),让引用它的服务重新生成配置。
名称不能以空格开头或结尾,也不能包含这些字符:" \ / [ ] : | < > + = ; , * ?。这是按 Microsoft 对共享名的规定校验的,所以中文名可以用,但名称同时会成为 NFS 路径和 SMB 共享名,建议用简短的英文小写。
默认权限到底是什么
「权限」下拉框有 6 个选项,对应 6 种八进制权限:
| 下拉框文字 | 权限 | 含义 |
|---|---|---|
| 管理员:读/写,用户:无权限,其它:无权限 | 700 | 只有属主 root 能用 |
| 管理员:读/写,用户:只读,其它:无权限 | 750 | users 组只读 |
| 管理员:读/写,用户:读/写,其它:无权限 | 770 | users 组可读写,外人不能进 |
| 管理员:读/写,用户:只读,其它:只读 | 755 | 所有人可读,只有 root 能写 |
| 管理员:读/写,用户:读/写,其它:只读 | 775(默认) | users 组可读写,其他人只读 |
| 每个人:读/写 | 777 | 所有人可读写 |
这里的「管理员」是目录的属主 root,「用户」是 users 组(GID 100),「其它」是除此之外的所有人,包括 SMB 访客 nobody。OMV 还会把目录的属组设为 users,并加上 setgid 位:新建的文件和子目录自动继承 users 组。所以默认的最终状态是 2775、root:users,用界面创建的用户(都在 users 组里)默认都能读写。
已存在的目录不会被改权限
OMV 只在新建目录时才设置权限、属主、属组和 setgid 位。如果相对路径指向一个已经存在的目录(比如接入旧盘时选了已有数据的目录),上面的「权限」选择不会生效,目录保持原样。要改,用 访问控制列表 对话框,或 omv-extras 的 resetperms 插件。
相对路径有多级时(例如 data/media),OMV 在新建最里面那一级目录的同时,还会给沿途的上级目录补一条 users 组的「仅执行」ACL(--x),让用户能一路走进最里面的目录。你在 getfacl 里看到这条记录是正常的。
列表怎么读
存储器 → 共享文件夹 的表格有这些列:
| 列 | 含义 |
|---|---|
| 名称(Name) | 共享文件夹名 |
| 设备(Device) | 所在文件系统(有标签显示标签,否则显示设备文件) |
| 相对路径(Relative Path)、绝对路径(Absolute Path) | 绝对路径旁有复制图标,在 shell 里用它 |
| 引用(Referenced) | 打勾表示被某个服务或插件引用了 |
| 标签(Tags) | 创建时填的备注 |
| 状态(Status) | 可用(Available)或 不可用(Unavailable) |
选中一行后,工具栏里的图标按钮(鼠标悬停显示名称)依次是:编辑、权限(Permissions)、访问控制列表(Access control list)、快照(Snapshots)、删除。
- 权限 是第一层「共享权限」,见 设置共享文件夹权限。
- 访问控制列表 只在文件系统支持 POSIX ACL(EXT4、XFS、Btrfs 等)时可点,NTFS、FAT、exFAT 上是灰的。
- 快照 只对 Btrfs 上建成子卷的共享文件夹可用。
「不可用」是什么意思
OMV 8.0.5 起,指向不存在的文件系统或目录的共享文件夹会显示为 不可用,鼠标悬停有原因:
| 提示 | 原因 |
|---|---|
| 未找到数据库记录 | 它引用的文件系统记录已经不在 OMV 数据库里 |
| 目录不存在 | 文件系统挂着,但相对路径指向的目录没了 |
| 非目录 | 相对路径指向的是一个文件 |
硬盘掉线、文件系统没挂载时,相对路径同样找不到,通常也显示「目录不存在」。先去 存储器 → 文件系统(Storage → File Systems)看文件系统是否仍是已挂载状态。
编辑与删除
编辑:名称创建后不能改;文件系统和相对路径可以改,但不会搬数据。改完 OMV 会重新配置引用它的服务,数据要你自己搬。改之前先记下哪些服务在用它,改完逐个确认。
删除:引用 打勾的共享文件夹,删除按钮是灰的。要先去每个引用它的地方取消引用,常见的有:
服务 → SMB/CIFS → 共享(Services → SMB/CIFS → Shares)、服务 → NFS → 共享(Services → NFS → Shares)、服务 → Rsync(Services → Rsync,任务和服务器模块)、服务 → FTP → 共享(Services → FTP → Shares)用户 → 设置(Users → Settings)里的主目录位置(见 用户主目录)- 用到共享文件夹的插件(比如 Compose 的设置页)
OMV 目前没有界面能列出「谁在引用它」。omv-extras 的 resetperms 插件有一列「In use by」,可以帮你找,见 小工具合集。排查步骤见 删不掉共享文件夹。
通过界面删除,只删 OMV 里的记录,磁盘上的目录和文件原样保留。另外,文件系统上还有共享文件夹时,OMV 不允许卸载它:要先删共享文件夹,再卸载文件系统。
检查结果
列表里新共享文件夹的状态是 可用。
在 OMV 的 shell(SSH 或本机控制台,root 身份)里,用列表里复制的绝对路径检查:
shls -ld <共享文件夹的绝对路径>默认应看到类似
drwxrwsr-x 2 root users ... /srv/dev-disk-by-uuid-<UUID>/media。rwxrwsr-x里的s就是 setgid,root users是属主和属组。要让别人真正用上它,下一步是 启用 SMB 并添加共享,或者先 创建用户和用户组。
常见问题
创建时文件系统下拉框是空的。 没有已挂载的文件系统。去 存储器 → 文件系统 创建或挂载。
新建后别的用户写不进去。 看你创建时选的权限,如果选了 700、750 或 755,users 组成员就没有写权限;也可能目录原本就存在,OMV 没改它的权限。
状态显示不可用。 按上表看悬停提示,先确认文件系统已挂载、目录还在。
删除按钮是灰的。 它还被某个服务引用,见上文「编辑与删除」。
参考资料
- OMV 官方文档:共享文件夹、FAQ
- OMV 源码:ShareMgmt RPC,创建时的目录权限逻辑在
set方法里 - 界面中文译名取自 OMV 8 的
zh_CN翻译文件