跳转到内容

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。

配置与使用 ​

创建池 ​

  1. 先在 存储器 → 文件系统(Storage → File Systems)确认要入池的盘都已创建并挂载,见 创建并挂载文件系统。
  2. 存储器 → mergerfs → 创建(Create)。
  3. 填写表单:
字段说明
名称(Name)字母、数字、下划线、点、连字符;不能以点或连字符开头
文件系统(Filesystems)多选,整块盘入池
共享文件夹(Shared folders)多选,只用每块盘上的某个共享文件夹入池
路径(Paths)每行一个目录,可以直接填绝对路径
创建策略(Create policy)新文件写到哪块盘。8.x 默认 pfrd,见下表
最小剩余空间(Minimum free space)默认 4,单位默认 G。盘剩余空间低于它就不再往里写,除非所有盘都到了这个线
选项(Options)默认 defaults,cache.files=off,不熟悉 mergerfs 的缓存选项就别改

「文件系统」「共享文件夹」「路径」可以混用,它们保存时都会转成路径,合起来就是池的成员(分支)。

  1. 保存,点黄色提示条上的应用。编辑已有的池时,界面提示可能需要重启才能完全生效。

整盘入池,还是只拿一个目录 ​

方式做法取舍
整盘入池选「文件系统」最简单;平衡池可能在盘间搬任何文件
只拿一个目录先在每块盘上建一个专用共享文件夹,在池里选这些「共享文件夹」盘上其余位置不受 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/<池名>。

  1. 存储器 → 共享文件夹(Storage → Shared Folders)新建共享文件夹,文件系统选这个池。
  2. 再用 SMB 或 NFS 把它共享出去,见 SMB/CIFS 共享。

之后所有要分散存放的数据,都应该建在池上的共享文件夹里,而不是建在某块成员盘上。

池的维护工具 ​

在 存储器 → mergerfs 选中池,工具栏上有:

按钮作用
重启池(Restart pool)池出错时重新挂载
移出路径(Remove path)把某个成员路径从池里拿掉,数据复制回池并重新分布;可勾选复制成功后删除源文件。池里有两个以上路径时按钮才可用
平衡池(Balance pool)把文件在各盘间搬动,让各盘使用率接近(wiki 说目标是 2% 以内)。耗时长,盘很小而文件很大时可能来回搬
去重(Deduplicate)找出同一路径在多块盘上都存在的文件,按最旧、最新、最小、最大或最大剩余空间保留一份;带「(实践)」的是只演示不动手
文档(Docs)链接到 mergerfs 官方文档

检查结果 ​

  1. 存储器 → mergerfs 列表里能看到池和它的全部路径。
  2. 在 OMV 的 shell(root)看池是否挂载:
sh
findmnt -t fuse.mergerfs
  1. 通过 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 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。