跳转到内容

ZFS 插件 ​

读完这篇,你能在 OMV 上建出一个带校验和快照的 ZFS 池,把其中的数据集当作共享文件夹的存储位置,并知道哪些按钮是单向的、哪些操作会让数据消失。

适合谁 ​

你的情况建议
想要数据校验、自愈、快照、压缩,愿意多学一套概念适合。ZFS 把 RAID、卷管理和文件系统合在一起
只想把几块盘变成一个共享目录不必上 ZFS,看 mergerfs 或 软件 RAID
想要快照但不想学 ZFS先看 Btrfs
树莓派等 ARM 单板机不建议。插件 GUIDE 写明不支持 ARM 单板机
内存很小(1–2 GiB)慎用。GUIDE 认为 4–8 GiB 跑家用 NAS 没问题,ARC 会随内存压力收缩

选型对比见 选择文件系统 和 多块硬盘怎么组。

动手前:数据丢失与内核依赖

  • 影响范围:删除池(Delete)会销毁池并擦掉成员盘上的标签,不可逆;升级池(Upgrade)开启全部新特性,单向,旧版 ZFS 之后无法导入这个池(官方中文把数据集的 Promote 也译成「升级」,别点错);往镜像或 RAID-Z 池里加一块基础(Basic)vdev 会让池变成条带,丢一块盘可能丢全池;加密数据集的口令丢了,数据就永远打不开。
  • 前置条件:先按内核插件装好 Proxmox 内核(amd64),再装本插件。建池前用 存储器 → 磁盘(Storage → Disks)按型号和序列号核对目标盘,只选空盘。
  • 怎么回退:建池后立刻后悔,可以删除这个空池;有数据后没有回退,只能靠独立备份。ZFS 冗余只防坏盘,不是备份,误删、勒索、整机损坏都要靠 备份策略。

插件信息 ​

项内容
包名openmediavault-zfs
来源omv-extras(社区维护)
OMV 8 状态截至 2026-10-22 的 omv-extras synchrony 软件源为 8.1.1(amd64、arm64),要求 OMV 8.3 以上
菜单位置存储器 → zfs(Storage → zfs),菜单名是小写。子页:池、数据集、快照、快照任务、擦洗任务、复制任务、ARC 统计、设置
依赖zfsutils-linux、zfs-zed,以及二选一的模块提供者:omv-zfs-provider-pve(amd64,Proxmox 预编译模块)或 omv-zfs-provider-dkms(现场编译)

先装 omv-extras,插件才会出现在 系统 → 插件(System → Plugins)里。

安装 ​

  1. 系统 → 更新管理(System → Update Management)把待更新的包全部装完。
  2. 按内核插件安装 Proxmox 内核并重启。
  3. 在 系统 → 插件 里搜索 zfs,安装 openmediavault-zfs。装完按 Ctrl+Shift+R 硬刷新浏览器,侧边栏出现 存储器 → zfs。

为什么要先装 Proxmox 内核:插件 GUIDE 指出,Debian backports 内核升级时可能丢失 ZFS 模块包,池会打不开;Proxmox 内核自带预编译模块,和 ZFS 软件包同步更新。插件按当前运行的内核选择模块提供者:

当前运行的内核模块来源
amd64,内核名含 pveomv-zfs-provider-pve,并把 ZFS 相关包固定到 Proxmox 软件源
其他(Debian 内核,或 arm64)omv-zfs-provider-dkms,现场编译,需要当前内核的 headers

装了 Proxmox 内核但还没重启、仍在跑 Debian 内核时就装插件,插件会按 DKMS 方式配置。重启进入 pve 内核后,它不会自己切换:要在 OMV 的 shell(root)执行一次 omv-salt deploy run zfs,才会改用 Proxmox 预编译模块。插件源码里有一条提醒你重启的提示,但它只识别旧的 pve-kernel- 包名,新的 proxmox-kernel-* 包很可能触发不了,不要依赖它。最稳妥的顺序是上面的步骤:先装 Proxmox 内核、重启,用 uname -r 确认输出里有 pve,再装 ZFS 插件。

配置与使用 ​

先弄懂三个词 ​

词含义
池(pool)最顶层的存储容器,由一个或多个 vdev 组成
vdev冗余单位。一个 vdev 整体坏掉,整个池就没了;冗余只保护 vdev 内部的单盘故障
数据集(dataset)池里的文件系统或卷,可以单独设压缩、配额、快照
池类型最少盘数容忍坏盘说明
基础(Basic)10没有冗余,任何一块盘坏了池就没了
镜像(Mirror)2只剩一块即可家用 NAS 的常见选择,随机读写和重建都更好
RAID-Z131GUIDE 建议每个 vdev 不超过 7 块盘
RAID-Z242大容量盘更稳妥
RAID-Z353盘多、容量大时用

创建池 ​

  1. 存储器 → zfs → 池(Pools):在池(Pool)菜单里选 添加池(Add pool)。
  2. 填写表单:
字段说明
名称(Name)不能含空格,不能以数字开头
池类型(Pool type)表单默认是 RAID-Z1,别忘了按需求改
设备(Devices)只列出没分区、没被使用的盘
挂载点(Mountpoint)留空则挂在 /<池名>,注意不在 /srv 下
设备别名(Device alias)默认以 ID(by-id),盘换插槽也认得;别改成 None
强制创建(Force creation)等于 zpool create -f,盘上有旧分区表或标签时才需要,谨慎
设置 ashift(Set ashift)默认不勾。GUIDE 建议对现代 4K 盘显式设为 12;界面提示是「确定需要才设置」。创建后不能改
压缩(Compression)勾选后选压缩类型,lz4 快且省空间
区分大小写(Case sensitivity)默认区分,创建后不能改
  1. 保存后,顶部出现黄色提示条,点击应用。

插件建池时还会固定加上 atime=off、acltype=posix、xattr=sa、autoexpand=on、failmode=continue(来自插件源码)。POSIX ACL 因此是开着的,OMV 共享文件夹的 ACL 应当可以直接使用。

建数据集,再建共享文件夹 ​

不要把数据直接放在池根上,至少建一个命名的文件系统。

  1. 存储器 → zfs → 数据集(Datasets):选中池,添加(Add)→ 添加文件系统(Add filesystem)。
  2. 名称按用途起,例如 media。记录大小(Record size)默认 128K;纯大文件的媒体库可以设 1M,数据库设 4K–16K。
  3. 在池页或数据集页点 发现(Discover)→ 新增(Add new),把新数据集登记进 OMV 的挂载数据库。登记前会自动备份 config.xml(保留最近 20 份)。
  4. 点黄色提示条上的应用。
  5. 到 存储器 → 共享文件夹(Storage → Shared Folders),新建共享文件夹时就能选这个数据集,见 共享文件夹。

快照与找回文件 ​

  • 手动:选中数据集,添加→ 添加快照(Add snapshot),或用 快速快照(Quick snapshot),名字自动带时间戳。
  • 定时:存储器 → zfs → 快照任务(Snapshot Jobs)。选数据集、前缀(默认 auto)、保留数量或保留时长、执行时间。多个任务打同一个数据集时,前缀要不同,例如 daily、weekly。
  • 找回单个文件:快照在数据集挂载点下的隐藏目录里,直接复制出来即可,不需要挂载:
text
/<池名>/<数据集>/.zfs/snapshot/<快照名>/
  • 回滚(Rollback)会把整个数据集退回到快照时刻,之后写入的数据全部丢弃。想找回单个文件,用上面的复制,不要回滚。

擦洗 ​

存储器 → zfs → 擦洗任务(Scrub Jobs)新建任务,家用盘每月一次即可,负载重或盘较旧可以每周。擦洗会读遍所有数据,放在夜里;任务只负责启动擦洗,结果要回到池页的擦洗菜单看擦洗状态(Scrub status)。

复制到另一个池或另一台机器 ​

存储器 → zfs → 复制任务(Replication Jobs)用 zfs send / zfs receive 做增量复制,目标可以是本机另一个池,也可以经 SSH 到远端。

  • 远端复制先在 系统 → 证书 → SSH(System → Certificates → SSH)生成密钥并用 复制到远程 授权,再在任务里选这把证书。
  • 已经有快照任务时,复制任务勾选 使用现有快照(Use existing snapshots),前缀要和快照任务一致,避免两个任务抢着建快照。
  • 复制出去的是另一份数据,才有机会当备份;但目标池也要有自己的坏盘与误删防护。

加密数据集 ​

添加→ 添加加密文件系统(Add encrypted filesystem)。算法选 AES-256-GCM,口令至少 8 个字符。

口令丢了就是数据丢了

把口令放进密码管理器,并在 NAS 之外再留一份。没有口令,数据集无法解锁,也没有任何后门。

自动解锁有两种:本地文件把口令明文放在 /etc/zfs/keys/,防得住单独被偷的硬盘,防不住整机被偷;远程 HTTPS 开机时从你的服务器取密钥,密钥不落在本机。删除加密数据集要用插件的删除,不要在命令行直接 zfs destroy,否则会留下密钥文件和 systemd 单元。

内存与 ARC ​

存储器 → zfs → 设置(Settings)里的 最大 ARC 大小(Maximum ARC size,MiB)默认 0,表示不限制,ARC 稳态约占一半内存。同机还要跑容器时,可以设成内存的一半左右。保存、应用后重启生效。8.1.1 起还有 Extra module options,每行一条 options zfs …,原样追加到模块配置,不熟悉就留空。

换一块坏盘 ​

在池页选中池,用设备菜单里的替换设备(Replace device),选新盘,重新同步修复(resilver)立即开始,期间池显示降级(DEGRADED)。完成后用清除错误(Clear errors)清掉旧计数。替换前先按序列号确认拔的是哪一块。

检查结果 ​

  1. 池页的状态是在线(ONLINE),仪表盘可以加上 ZFS 存储池健康小部件。
  2. 在 OMV 的 shell(root)执行:
sh
zpool status

应该看到 errors: No known data errors。 3. 用一个测试数据集验证快照:写入一个文件,做快速快照,删除文件,再从 .zfs/snapshot 目录复制回来,内容一致;最后通过插件删除这个测试数据集。 4. 重启后池和共享文件夹仍然自动挂载。

备份与维护 ​

  • 配置:池结构记录在磁盘上,共享文件夹引用记录在 OMV 数据库里。动大手术前备份 config.xml,见 配置留底。
  • 升级内核:Proxmox 内核和 ZFS 包同步升级,更新后重启即可。每次更新前看一眼更新列表里有没有 ZFS 相关包。
  • 卸载插件:卸载会按 apt 规则连带移除不再需要的 ZFS 软件包,期间池无法使用。不会擦掉盘上的池,重装后可用导入 / 导出菜单里的导入找回。这一点本文只依据源码推断,没有实机验证,卸载前先备份。
  • 数据备份:可以用复制任务、BorgBackup 或 restic,并做 恢复演练。

常见问题 ​

装完没有 存储器 → zfs。 硬刷新浏览器;仍然没有,看 插件装完界面不对。

更新内核后池不见了。 当前内核没有匹配的 ZFS 模块。重启回到装有模块的内核,数据没有丢。

共享文件夹的文件系统下拉里没有新数据集。 在池页或数据集页运行 发现→ 新增,再点应用。

arm64 上提示缺少内核 headers。 走 DKMS 的 arm64 系统需要当前内核的 headers,装好后再点应用。本站不建议在单板机上用 ZFS。

参考资料 ​

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