外观
mergerfs:把多块盘合成一个目录
完成后,几块容量不同的盘在 OMV 里变成一个共享文件夹的存储位置:往里写文件,由 mergerfs 决定落到哪块盘;以后加盘,容量直接加进去。每块盘仍然是独立的 EXT4 或 XFS,拆下来能单独在别的电脑上读。
适合谁
- 手里有几块容量不同的盘,想合成一个大目录,又不想像 RAID 那样被最小的盘拖住。
- 数据以大文件、很少改动为主,例如影视库、照片库。
- 能接受没有冗余:一块盘坏了,只丢这块盘上的文件,其余盘不受影响。想要坏盘后能恢复,搭配 SnapRAID,完整方案见 影音仓库:mergerfs + SnapRAID。
- 需要整体读写性能或块级冗余时,用 软件 RAID 或 ZFS。
mergerfs 不是冗余,更不是备份
- 影响范围:池只是「合并视图」。每个文件完整地存在某一块盘上,那块盘坏了,上面的文件就没了。平衡池、去重、移出路径(勾选删除源文件时)会移动或删除成员盘上的文件。
- 前置条件:成员盘都是已挂载的 Linux 文件系统(EXT4、XFS 等),不要用 NTFS 或 FAT;重要数据已经有独立备份。
- 怎么回退:删除池只是取消联合挂载,成员盘上的文件还在各盘里。被移动或删除的文件不能自动还原,所以先用「实践」(practice,即试运行)版的去重,先备份再平衡。
插件信息
| 项 | 内容 |
|---|---|
| 包名 | openmediavault-mergerfs |
| 来源 | omv-extras。mergerfs 本体是第三方软件,由 omv-extras 软件源提供 |
| OMV 8 状态 | 截至 2026-10-22 的 omv-extras synchrony 软件源为 8.0.4(amd64、arm64),依赖 mergerfs 2.42 以上 |
| 菜单位置 | 存储器 → mergerfs(Storage → mergerfs),菜单名是小写 |
| 依赖 | 需要先装 omv-extras;池挂在 /srv/mergerfs/<池名>,由 systemd 挂载单元管理,不写进 /etc/fstab |
安装
系统 → 插件(System → Plugins)搜索 mergerfs,安装 openmediavault-mergerfs,硬刷新浏览器后出现 存储器 → mergerfs。
配置与使用
创建池
- 先在
存储器 → 文件系统(Storage → File Systems)确认要入池的盘都已创建并挂载,见 创建并挂载文件系统。 存储器 → mergerfs→ 创建(Create)。- 填写表单:
| 字段 | 说明 |
|---|---|
| 名称(Name) | 字母、数字、下划线、点、连字符;不能以点或连字符开头 |
| 文件系统(Filesystems) | 多选,整块盘入池 |
| 共享文件夹(Shared folders) | 多选,只用每块盘上的某个共享文件夹入池 |
| 路径(Paths) | 每行一个目录,可以直接填绝对路径 |
| 创建策略(Create policy) | 新文件写到哪块盘。8.x 默认 pfrd,见下表 |
| 最小剩余空间(Minimum free space) | 默认 4,单位默认 G。盘剩余空间低于它就不再往里写,除非所有盘都到了这个线 |
| 选项(Options) | 默认 defaults,cache.files=off,不熟悉 mergerfs 的缓存选项就别改 |
「文件系统」「共享文件夹」「路径」可以混用,它们保存时都会转成路径,合起来就是池的成员(分支)。
- 保存,点黄色提示条上的应用。编辑已有的池时,界面提示可能需要重启才能完全生效。
整盘入池,还是只拿一个目录
| 方式 | 做法 | 取舍 |
|---|---|---|
| 整盘入池 | 选「文件系统」 | 最简单;平衡池可能在盘间搬任何文件 |
| 只拿一个目录 | 先在每块盘上建一个专用共享文件夹,在池里选这些「共享文件夹」 | 盘上其余位置不受 mergerfs 影响,可以放数据库或 Docker |
omv-extras wiki 的建议:不要把关系型数据库和 Docker 数据放进 mergerfs 池。它们若必须和池共用一块盘,用「只拿一个目录」的方式,并把这些数据放在池之外。Compose 的 Docker 存储同样不要放进池,见 Compose 插件设置详解。
创建策略
默认值各版本不一样:OMV 7 的表单默认是 epmfs,OMV 8 的表单默认是 pfrd。omv-extras wiki 的 mergerfs 页还是 OMV 7 时期的写法,仍把 epmfs 当默认,以界面为准。
| 策略(界面显示英文) | 含义 |
|---|---|
pfrd Percentage free random distribution | 随机选盘,剩余空间越多的盘被选中的概率越大。8.x 默认,各盘大致同步填满 |
mfs Most free space | 总是写到剩余空间最多的盘 |
epmfs Existing path - most free space | 只考虑已经有这个目录的盘,里面选剩余空间最多的(路径保持)。同一目录的文件会集中在同一块盘 |
ff First found | 按成员顺序,写到第一块可用的盘 |
lfs Least free space | 写到剩余空间最少的盘,倾向先填满一块再用下一块 |
rand Random | 完全随机 |
共 20 种,其余策略看 mergerfs 官方文档 的策略说明。路径保持类(ep*)会让同一目录挤在一块盘,大文件多的目录可能把这块盘写满。
在池上建共享文件夹
池挂载好后,在 存储器 → 文件系统 里能看到一个新条目,类型是 fuse.mergerfs,挂载点是 /srv/mergerfs/<池名>。
存储器 → 共享文件夹(Storage → Shared Folders)新建共享文件夹,文件系统选这个池。- 再用 SMB 或 NFS 把它共享出去,见 SMB/CIFS 共享。
之后所有要分散存放的数据,都应该建在池上的共享文件夹里,而不是建在某块成员盘上。
池的维护工具
在 存储器 → mergerfs 选中池,工具栏上有:
| 按钮 | 作用 |
|---|---|
| 重启池(Restart pool) | 池出错时重新挂载 |
| 移出路径(Remove path) | 把某个成员路径从池里拿掉,数据复制回池并重新分布;可勾选复制成功后删除源文件。池里有两个以上路径时按钮才可用 |
| 平衡池(Balance pool) | 把文件在各盘间搬动,让各盘使用率接近(wiki 说目标是 2% 以内)。耗时长,盘很小而文件很大时可能来回搬 |
| 去重(Deduplicate) | 找出同一路径在多块盘上都存在的文件,按最旧、最新、最小、最大或最大剩余空间保留一份;带「(实践)」的是只演示不动手 |
| 文档(Docs) | 链接到 mergerfs 官方文档 |
检查结果
存储器 → mergerfs列表里能看到池和它的全部路径。- 在 OMV 的 shell(root)看池是否挂载:
sh
findmnt -t fuse.mergerfs- 通过 SMB 往共享里写几个文件,再看它们落在哪块成员盘上:
sh
ls /srv/dev-disk-by-uuid-<盘 1 的 UUID>/<目录>
ls /srv/dev-disk-by-uuid-<盘 2 的 UUID>/<目录>用 存储器 → 文件系统 里的挂载点列(默认隐藏,从列选择里勾上)可以复制准确路径。 4. 重启一次,池和共享仍然自动挂载。
备份与维护
- 成员盘坏了:只丢这块盘上的文件。先用 S.M.A.R.T. 和通知发现征兆。用 SnapRAID 保护的话,更换流程见 SnapRAID;换盘后要在池的「路径」里把旧路径换成新盘的路径。
- 加盘:新盘创建并挂载后,编辑池,在「文件系统」里勾上,保存、应用;已有数据不会被搬走,想均衡再用平衡池。
- 删除池:被共享文件夹使用的池,插件会拒绝删除(8.0.4 起)。先取消引用共享文件夹。
- 配置:池定义保存在 OMV 数据库里,用 systemd 挂载单元挂载。不要手改这些单元,改用界面。
- 升级:8.0.4 修复了分支路径的校验和命令注入问题,保持更新。
常见问题
写入时提示没空间,但其他盘还有空。 看最小剩余空间:某块盘低于这个值就不再被写入。路径保持类策略还可能把同一目录集中在已写满的盘上,换成 pfrd 或 mfs。
重启后池没挂载。 先看成员盘是否都已挂载;成员盘缺失时池可能起不来。存储器 → mergerfs 里选重启池。
删不掉共享文件夹或池。 看 删不掉共享文件夹。
参考资料
- 插件源码:openmediavault-mergerfs
- omv-extras wiki:MergerFS Plugin For OMV7(OMV 8 的页面还是占位,2025-12-23;文中默认策略等以 8.x 源码为准)
- mergerfs 官方文档:trapexit.github.io/mergerfs