跳转到内容

共享文件夹: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。
  • 按用途拆分:一个共享文件夹对应一类数据(媒体、照片、备份、容器数据……)。所有东西塞进一个共享文件夹,权限几乎没法理清。

创建共享文件夹 ​

  1. 打开 存储器 → 共享文件夹(Storage → Shared Folders),点击 创建(Create)。

  2. 填写表单:

    字段说明
    名称(Name)共享文件夹的逻辑名,SMB 共享名、NFS 导出路径都用它。全局唯一,最长 80 个字符
    文件系统(File system)共享文件夹所在的文件系统,只列出已挂载的
    相对路径(Relative path)文件系统内的目录。填 / 表示共享整个文件系统的根;目录不存在时 OMV 会创建它。名称填好后,相对路径为空时会自动补成 <名称>/
    权限(Permissions)新建目录时使用的文件系统权限,默认「管理员:读/写,用户:读/写,其它:只读」(775)。只在创建时出现
    标签(Tags)备注或分类,不影响功能
  3. 点击 保存(Save)。OMV 在这一刻就把目录建好、权限设好;页面顶部出现黄色提示条时点击 应用(Apply),让引用它的服务重新生成配置。

名称不能以空格开头或结尾,也不能包含这些字符:" \ / [ ] : | < > + = ; , * ?。这是按 Microsoft 对共享名的规定校验的,所以中文名可以用,但名称同时会成为 NFS 路径和 SMB 共享名,建议用简短的英文小写。

默认权限到底是什么 ​

「权限」下拉框有 6 个选项,对应 6 种八进制权限:

下拉框文字权限含义
管理员:读/写,用户:无权限,其它:无权限700只有属主 root 能用
管理员:读/写,用户:只读,其它:无权限750users 组只读
管理员:读/写,用户:读/写,其它:无权限770users 组可读写,外人不能进
管理员:读/写,用户:只读,其它:只读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 不允许卸载它:要先删共享文件夹,再卸载文件系统。

检查结果 ​

  1. 列表里新共享文件夹的状态是 可用。

  2. 在 OMV 的 shell(SSH 或本机控制台,root 身份)里,用列表里复制的绝对路径检查:

    sh
    ls -ld <共享文件夹的绝对路径>

    默认应看到类似 drwxrwsr-x 2 root users ... /srv/dev-disk-by-uuid-<UUID>/media。rwxrwsr-x 里的 s 就是 setgid,root users 是属主和属组。

  3. 要让别人真正用上它,下一步是 启用 SMB 并添加共享,或者先 创建用户和用户组。

常见问题 ​

创建时文件系统下拉框是空的。 没有已挂载的文件系统。去 存储器 → 文件系统 创建或挂载。

新建后别的用户写不进去。 看你创建时选的权限,如果选了 700、750 或 755,users 组成员就没有写权限;也可能目录原本就存在,OMV 没改它的权限。

状态显示不可用。 按上表看悬停提示,先确认文件系统已挂载、目录还在。

删除按钮是灰的。 它还被某个服务引用,见上文「编辑与删除」。

参考资料 ​

  • OMV 官方文档:共享文件夹、FAQ
  • OMV 源码:ShareMgmt RPC,创建时的目录权限逻辑在 set 方法里
  • 界面中文译名取自 OMV 8 的 zh_CN 翻译文件

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。