外观
文件系统挂载选项与 fstab
读完这一篇,你能看懂 OMV 为每个文件系统生成的挂载选项,知道想改选项时有哪几条路、各自的风险,并且能安全地改一次。
错误的挂载选项可能让文件系统挂不上,甚至丢数据
影响范围:被修改的那一个文件系统,以及依赖它的共享文件夹和服务。选项写错会导致挂载失败;个别选项(例如 commit、errors、discard)会改变掉电时的数据安全性。
前置条件:
- 先备份配置(见下面「方法二」里的命令)和重要数据。
- 选项开头保留
defaults,nofail。nofail让缺盘或选项出错时系统仍能正常启动,不会卡在紧急模式。 - 能在测试盘上试的,先在测试盘上试。
怎么回退:用同样的办法把选项改回备份里的原值,保存、应用,必要时重启。如果文件系统因此起不来,系统一般仍能启动(有 nofail),修好选项再挂载。
先看清楚:OMV 怎样管 fstab
挂载选项不是写在 /etc/fstab 里的,源头是配置数据库:
- 你在界面里挂载一个文件系统时,OMV 在数据库里登记一条挂载记录,包含设备、挂载点、类型和选项,选项取自下面的默认值。
- 点应用时,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]1
2
3
2
3
每行的字段依次是:设备(一个稳定的 /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,OPTIONS1
2
2
前者是数据库里的值,后者是内核里的实时值。两者可能不一致,改完选项后要确认的是后者。文件系统 页里默认隐藏的挂载选项列显示的是数据库里的值,不是实时值。
OMV 8 的默认选项
默认值来自 OMV 源码里的内置变量。以下是 OMV 8 当前的值:
| 文件系统 | 变量 | 默认值 |
|---|---|---|
| EXT4 | OMV_FSTAB_MNTOPS_EXT4 | defaults,nofail,user_xattr,usrquota,grpquota |
| XFS | OMV_FSTAB_MNTOPS_XFS | defaults,nofail,usrquota,grpquota |
| Btrfs | OMV_FSTAB_MNTOPS_BTRFS | defaults,nofail |
| F2FS | OMV_FSTAB_MNTOPS_F2FS | defaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv1 |
| JFS | OMV_FSTAB_MNTOPS_JFS | defaults,nofail,usrquota,grpquota |
| exFAT | OMV_FSTAB_MNTOPS_EXFAT | defaults,nofail |
| VFAT | OMV_FSTAB_MNTOPS_VFAT | defaults,nofail |
| NTFS | OMV_FSTAB_MNTOPS_NTFS | defaults,nofail,big_writes |
| HFS+ | OMV_FSTAB_MNTOPS_HFSPLUS | defaults,nofail,force |
| ISO9660、UDF | OMV_FSTAB_MNTOPS_ISO9660、OMV_FSTAB_MNTOPS_UDF | ro |
挂载时还会按情况追加:XFS 在 64 位系统上追加 inode64;Btrfs 在固态盘上追加 ssd。
几个关键选项的意思:
| 选项 | 含义 |
|---|---|
defaults | 读写、允许执行、允许 suid 等一组常规默认 |
nofail | 设备不存在时不让启动失败。系统只「想要」而不「必须」挂载它 |
user_xattr | 允许用户扩展属性,SMB 的扩展属性功能要用 |
usrquota、grpquota | 标记这个文件系统要启用用户、用户组配额,见磁盘配额。内核本身忽略它们,只给配额工具识别 |
inode64 | XFS 可以把 inode 分布到整个文件系统,大盘需要 |
ssd | Btrfs 的固态盘优化,内核根据 rotational 自动判断 |
big_writes | ntfs-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 "<完整的新选项>"1
2
2
变量保存在 /etc/default/openmediavault。设置之后在同一个 shell 里按官方文档的做法让它生效:
sh
monit restart omv-engined
omv-salt stage run prepare
omv-salt stage run deploy1
2
3
2
3
最后一条会按数据库重新部署全部模块,选在空闲时段。环境变量的完整说明见环境变量,也可以装官方 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.<日期>.bak1
2
2
最好再把这两个文件复制到另一台机器上。它们是只读的备份,不会改动系统。
第二步:修改。
- 打开
服务 → 挂载编辑器(Services → Mount Editor)。列表里有挂载点、挂载选项、类型、References(官方中文没有译名,指被引用的数量)、已挂载和注释。 - 选中要改的文件系统,点编辑。挂载选项文本框里是数据库里的值。插件在页面上提示:这些选项不是实时的,是存储在数据库中的;错误的选项会导致文件系统挂载失败或丢失数据;有的挂载选项需要重启才会生效。同时建议把
defaults,nofail留在最前面。 - 保存,会弹出确认框「您确定要改变挂载选项吗?」,确认后点页面顶部黄色提示条上的应用。
工具栏上还有几个图标:添加配额选项与移除配额选项(给 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-ro | EXT4 | 出错时把文件系统改为只读 | 保护数据,但服务会因此无法写入 |
compress=zstd | Btrfs | 透明压缩 | 耗 CPU,已压缩的数据收益很小,见 Btrfs |
autodefrag | Btrfs | 对小的随机写做碎片整理 | 不适合大型数据库;在某些内核上会破坏快照间的共享,空间占用可能大增 |
uid=、gid=、umask= | exFAT、FAT、ntfs-3g | 设置所有文件的属主和权限 | 见上面的示例和限制 |
discard | EXT4、XFS | 实时 TRIM | 不建议,用定时 TRIM,见 SSD、NVMe 与 TRIM |
检查结果
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS <挂载点>里的选项与你设定的一致。omv-confdbadm read --prettify conf.system.filesystem.mountpoint里这条记录的opts也是新值。- 重启之后文件系统仍然挂载,共享文件夹正常访问。
- 备份文件
/root/config.xml.<日期>.bak和/root/fstab.<日期>.bak保留一段时间。
常见问题
改了环境变量,已有的盘选项没变。 这是预期行为:它只影响之后新挂载的文件系统,要改已有的盘,用挂载编辑器。
挂载编辑器里改了,findmnt 看到的还是旧的。 它改的是数据库里的值,内核里的选项要等重新挂载或重启才更新。
文件系统挂不上了。 改回原值,保存、应用并重启。系统应当能启动,因为 nofail 让它不会卡住。
想给已有的 EXT4 开配额。 在挂载编辑器里点添加配额选项,之后重新挂载或重启,见磁盘配额。
参考资料
- OMV 文档:Filesystem Environmental Variables(默认值已过时,以源码为准)与自定义配置
- Linux 内核文档:ext4 挂载选项、btrfs(5)、ntfs-3g 手册
- systemd.mount:fstab 选项
- OMV 源码:
globals.inc、10filesystem.sls与90bind.sls(fstab 部署)、omv-env;omv-extrasopenmediavault-mounteditor