跳转到内容

文件系统挂载选项与 fstab ​

读完这一篇,你能看懂 OMV 为每个文件系统生成的挂载选项,知道想改选项时有哪几条路、各自的风险,并且能安全地改一次。

错误的挂载选项可能让文件系统挂不上,甚至丢数据

影响范围:被修改的那一个文件系统,以及依赖它的共享文件夹和服务。选项写错会导致挂载失败;个别选项(例如 commit、errors、discard)会改变掉电时的数据安全性。

前置条件:

  • 先备份配置(见下面「方法二」里的命令)和重要数据。
  • 选项开头保留 defaults,nofail。nofail 让缺盘或选项出错时系统仍能正常启动,不会卡在紧急模式。
  • 能在测试盘上试的,先在测试盘上试。

怎么回退:用同样的办法把选项改回备份里的原值,保存、应用,必要时重启。如果文件系统因此起不来,系统一般仍能启动(有 nofail),修好选项再挂载。

先看清楚:OMV 怎样管 fstab ​

挂载选项不是写在 /etc/fstab 里的,源头是配置数据库:

  1. 你在界面里挂载一个文件系统时,OMV 在数据库里登记一条挂载记录,包含设备、挂载点、类型和选项,选项取自下面的默认值。
  2. 点应用时,Salt 的 fstab 模块把数据库里的记录写成 /etc/fstab 里 OMV 管理的区段。区段用两行标记围起来:
text
# >>> [openmediavault]
/dev/disk/by-uuid/<UUID>   /srv/dev-disk-by-uuid-<UUID>   ext4   defaults,nofail,user_xattr,usrquota,grpquota   0 2
# <<< [openmediavault]

每行的字段依次是:设备(一个稳定的 /dev/disk/by-uuid/… 路径)、挂载点、文件系统类型、选项、dump 标志(默认 0)、fsck 顺序(默认 2)。

所以手改标记之间的内容没有用:下一次部署会整段重写。OMV 也只认数据库,不读 /etc/fstab。标记之外的行 OMV 不会动,但你没有理由往那里放 OMV 管理的盘。

想看数据库里登记的内容和系统实际生效的选项,这两条都是只读的,在 OMV 的 shell(SSH 或本机控制台,以 root 身份)执行:

sh
omv-confdbadm read --prettify conf.system.filesystem.mountpoint
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS

前者是数据库里的值,后者是内核里的实时值。两者可能不一致,改完选项后要确认的是后者。文件系统 页里默认隐藏的挂载选项列显示的是数据库里的值,不是实时值。

OMV 8 的默认选项 ​

默认值来自 OMV 源码里的内置变量。以下是 OMV 8 当前的值:

文件系统变量默认值
EXT4OMV_FSTAB_MNTOPS_EXT4defaults,nofail,user_xattr,usrquota,grpquota
XFSOMV_FSTAB_MNTOPS_XFSdefaults,nofail,usrquota,grpquota
BtrfsOMV_FSTAB_MNTOPS_BTRFSdefaults,nofail
F2FSOMV_FSTAB_MNTOPS_F2FSdefaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1
JFSOMV_FSTAB_MNTOPS_JFSdefaults,nofail,usrquota,grpquota
exFATOMV_FSTAB_MNTOPS_EXFATdefaults,nofail
VFATOMV_FSTAB_MNTOPS_VFATdefaults,nofail
NTFSOMV_FSTAB_MNTOPS_NTFSdefaults,nofail,big_writes
HFS+OMV_FSTAB_MNTOPS_HFSPLUSdefaults,nofail,force
ISO9660、UDFOMV_FSTAB_MNTOPS_ISO9660、OMV_FSTAB_MNTOPS_UDFro

挂载时还会按情况追加:XFS 在 64 位系统上追加 inode64;Btrfs 在固态盘上追加 ssd。

几个关键选项的意思:

选项含义
defaults读写、允许执行、允许 suid 等一组常规默认
nofail设备不存在时不让启动失败。系统只「想要」而不「必须」挂载它
user_xattr允许用户扩展属性,SMB 的扩展属性功能要用
usrquota、grpquota标记这个文件系统要启用用户、用户组配额,见磁盘配额。内核本身忽略它们,只给配额工具识别
inode64XFS 可以把 inode 分布到整个文件系统,大盘需要
ssdBtrfs 的固态盘优化,内核根据 rotational 自动判断
big_writesntfs-3g 的选项,减少 FUSE 对写入缓冲区的拆分

官方文档里的默认值是旧的

官方页面 Filesystem Environmental Variables 仍把 EXT4 的默认写成 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,把 NTFS 写成 defaults,nofail。OMV 7.4.6 起新建的 EXT4 改用内置配额,以源码为准。已经挂载的旧文件系统保留它们当时登记的选项。

怎么改:先分清要改什么 ​

你想…用什么
改以后新挂载的文件系统的默认选项方法一:环境变量
改已经挂载的文件系统的选项方法二:挂载编辑器插件(推荐)
其他直接改数据库有风险,见方法三的说明

方法一:环境变量(只影响以后新挂载的) ​

上面的变量都能用 omv-env 覆盖。在 OMV 的 shell(SSH 或本机控制台,以 root 身份)里,先看当前值,再设置:

sh
omv-env get OMV_FSTAB_MNTOPS_EXT4
omv-env set -- OMV_FSTAB_MNTOPS_EXT4 "<完整的新选项>"

变量保存在 /etc/default/openmediavault。设置之后在同一个 shell 里按官方文档的做法让它生效:

sh
monit restart omv-engined
omv-salt stage run prepare
omv-salt stage run deploy

最后一条会按数据库重新部署全部模块,选在空闲时段。环境变量的完整说明见环境变量,也可以装官方 envvars 插件在界面里改。

这个办法只对之后新挂载的文件系统有效:默认值是在你点挂载的那一刻被写进数据库的,已经挂载的文件系统不会改。官方文档说,想让已挂载的文件系统用上新选项,常规做法是先删掉引用它的共享文件夹配置、卸载、再重新挂载,代价很大,所以改已有文件系统请用方法二。

新选项的取值要自己写完整:它替换整个默认值,不是追加。

例如,exFAT 默认选项会让所有文件属于 root,普通用户写不进去(见挂载已有数据的硬盘)。一个思路是在选项里指定属组为 users(GID 100)并放开组写入权限,例如 defaults,nofail,gid=100,umask=002。这只是示例,未经实机验证,exFAT 驱动里 umask、fmask、dmask 的先后顺序也会影响结果,务必在测试盘上试。

方法二:挂载编辑器插件(推荐) ​

omv-extras 的 openmediavault-mounteditor 能直接改数据库里已登记的挂载选项。它来自 omv-extras,要先安装 omv-extras,插件介绍见挂载编辑器与符号链接。

第一步:备份。 在 OMV 的 shell(SSH 或本机控制台,以 root 身份)执行,把 <日期> 换成今天的日期:

sh
cp -a /etc/openmediavault/config.xml /root/config.xml.<日期>.bak
cp -a /etc/fstab /root/fstab.<日期>.bak

最好再把这两个文件复制到另一台机器上。它们是只读的备份,不会改动系统。

第二步:修改。

  1. 打开 服务 → 挂载编辑器(Services → Mount Editor)。列表里有挂载点、挂载选项、类型、References(官方中文没有译名,指被引用的数量)、已挂载和注释。
  2. 选中要改的文件系统,点编辑。挂载选项文本框里是数据库里的值。插件在页面上提示:这些选项不是实时的,是存储在数据库中的;错误的选项会导致文件系统挂载失败或丢失数据;有的挂载选项需要重启才会生效。同时建议把 defaults,nofail 留在最前面。
  3. 保存,会弹出确认框「您确定要改变挂载选项吗?」,确认后点页面顶部黄色提示条上的应用。

工具栏上还有几个图标:添加配额选项与移除配额选项(给 EXT4、XFS 等补上或去掉配额相关的选项,不适用于 Btrfs)、实时选项(Live options,显示内核里当前生效的值,通常会和数据库里的值略有差别,因为有些选项在挂载时会被展开)、删除孤立选项(清理没有被引用、也没有挂载的残留记录)。

第三步:让它生效并确认。 有些选项(例如 noatime)重新挂载就能生效,有些需要重启。重启之后用 findmnt -o TARGET,OPTIONS <挂载点> 或插件的实时选项确认。

方法三:直接改配置数据库(不推荐) ​

官方文档里还写了第三种:直接编辑 /etc/openmediavault/config.xml 里 <mntent> 的 <opts>,再运行 omv-salt deploy run fstab。不推荐:XML 多一个字符就可能让整个数据库读不出来,Web 界面也随之瘫痪。确实要这样做,先读配置数据库:config.xml 与 omv-confdbadm 里的风险与流程,并且先按方法二的命令备份。

常见选项 ​

选项适用作用要注意
noatime通用读文件时不更新访问时间,减少写入默认是 relatime。极少数程序依赖访问时间
commit=<秒>EXT4日志提交的最长间隔,默认 5 秒调大能提高性能,掉电时丢的数据更多,官方文档说大值「会提高性能」,默认值「对数据安全有好处」
errors=remount-roEXT4出错时把文件系统改为只读保护数据,但服务会因此无法写入
compress=zstdBtrfs透明压缩耗 CPU,已压缩的数据收益很小,见 Btrfs
autodefragBtrfs对小的随机写做碎片整理不适合大型数据库;在某些内核上会破坏快照间的共享,空间占用可能大增
uid=、gid=、umask=exFAT、FAT、ntfs-3g设置所有文件的属主和权限见上面的示例和限制
discardEXT4、XFS实时 TRIM不建议,用定时 TRIM,见 SSD、NVMe 与 TRIM

检查结果 ​

  1. findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS <挂载点> 里的选项与你设定的一致。
  2. omv-confdbadm read --prettify conf.system.filesystem.mountpoint 里这条记录的 opts 也是新值。
  3. 重启之后文件系统仍然挂载,共享文件夹正常访问。
  4. 备份文件 /root/config.xml.<日期>.bak 和 /root/fstab.<日期>.bak 保留一段时间。

常见问题 ​

改了环境变量,已有的盘选项没变。 这是预期行为:它只影响之后新挂载的文件系统,要改已有的盘,用挂载编辑器。

挂载编辑器里改了,findmnt 看到的还是旧的。 它改的是数据库里的值,内核里的选项要等重新挂载或重启才更新。

文件系统挂不上了。 改回原值,保存、应用并重启。系统应当能启动,因为 nofail 让它不会卡住。

想给已有的 EXT4 开配额。 在挂载编辑器里点添加配额选项,之后重新挂载或重启,见磁盘配额。

参考资料 ​

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