OpenZFS
ZFS
ZFS 是由 Sun Microsystems 设计的组合文件系统和逻辑卷管理器。ZFS 的特性包括防止数据损坏、支持大容量存储、集成文件系统和卷管理的概念、快照和按写入克隆、持续完整性检查和自动修复、RAID-Z 和本机 NFSv4 ACL,并且可以进行非常精确的配置。Oracle 和 OpenZFS 项目的两个主要实现非常相似,使得 ZFS 在类 Unix 系统中得到广泛应用。(Wikipedia)
ZFS、OpenZFS 和 ZFS on Linux
ZFS 最初由 Sun Microsystems 开发,旨在成为下一代文件系统。Oracle 收购了 Sun Microsystems,ZFS 变成了闭源。
OpenZFS 是一个由许多原始 ZFS 开发人员启动的项目,旨在创建 ZFS 的开源实现。它正在战略性地减少现有的平台相关差异,以便通过汇集 illumos、FreeBSD、Linux、macOS、NetBSD 和 Windows 平台以及构建在 OpenZFS 之上的各种公司的开发人员,从而简化源代码共享。
ZFS on Linux (ZoL) 是 OpenZFS 的实现,旨在在 Linux 环境中工作。
硬件考虑因素
单磁盘
ZFS 可以用于格式化单个磁盘或分区,以利用 ZFS 的强大快照和复制功能,而无需受益于 ZFS 的数据冗余功能。在这种情况下,ZFS 需要很少的内存资源,并且开销很小。它甚至可以在普通的笔记本电脑上很好地运行。
如果您打算仅在单个磁盘或分区上使用 ZFS 来受益于其快照和复制功能,您可能需要考虑使用 Btrfs,因为它通过 Snapper、YaST 分区程序和 YaST 文件系统快照工具与 openSUSE 很好地集成。更多信息可以在 Snapper 文档中找到。
RAID-Z
当使用 RAID-Z 功能进行家庭和非关键用途时,请注意以下事项
- 如果您的硬件支持,建议使用 ECC 内存。
- 建议您的系统至少有 8GB 内存,如果系统负载较高,则最好为每个 TB 的数据阵列容量提供 1GB 内存。
- 数据阵列的磁盘应大小相等,最好是相同制造商、型号和批次。
对于关键和企业客户,请阅读 ZFS 文档以获取更多信息和最佳实践建议。
ZFS 作为根文件系统
ZFS 目前最适合数据阵列。在 Linux 系统中使用 ZFS 作为根文件系统仍然是实验性的,只有 Ubuntu 最近在 19.10 版本中引入了实验性的根分区支持。openSUSE 尚不支持 ZFS 作为根文件系统。越来越多的用户成功地使用 Btrfs 作为根文件系统,并使用 ZFS 作为数据存储磁盘或阵列,以获得两者的优势。
安装
ZFS 包不可从标准存储库获得。在 [openSUSE Build Service] (OBS) 中维护的“文件系统工具”存储库包含 ZFS 以及许多更新的文件系统相关包。您可以通过 GUI 或命令行设置存储库并安装 ZFS。
在较新的系统(启用安全启动和锁定功能的系统)上,内核将拒绝加载未由安全启动信任的密钥签名的内核模块。由于 OpenZFS 不包含在官方存储库中,因此 zfs 模块使用 文件系统项目包签名密钥 签名,因此默认情况下内核将拒绝加载 zfs 模块(因为该密钥未受您的系统信任)。
为了注册签名密钥,请安装 zfs-ueficert 包并重新启动。zfs-ueficert 包包含 OpenZFS 内核模块的签名密钥,并将自动将密钥注册到 MOK 列表中,但您必须通过重新启动并响应引导加载程序的提示来批准注册。有关 UEFI 和 MOK 的更多信息,请参阅 openSUSE:UEFI。请注意,当项目签名密钥轮换时(大约每 2-3 年发生一次),您需要再次在启动时完成注册过程(但通过 zfs-ueficert 自动完成新密钥的注册请求)。
安装
访问 ZFS 下载页面 在 openSUSE 软件门户上,并选择您的 openSUSE 版本。您将看到图形化安装 ZFS 及其存储库或手动安装的选项。
ZFS 包由 文件系统项目 维护,不属于官方 openSUSE 项目。
外部链接
外部介绍和概述
- 文章:Ars 演练:在 Linux 上使用 ZFS 下一代文件系统 由 Jim Salter 为 Ars Technica 发表于 2014 年 2 月 23 日
- 文章:深入了解 OpenZFS 迁移到 Linux 后的新功能 由 Jim Salter 为 Ars Technica 发表于 2019 年 6 月 6 日
- 视频:OpenZFS 基础知识,由 Matt Ahrens 和 George Wilson 制作 1 小时 28 分钟的视频,来自 YouTube 上的 OpenZFS 频道,发布于 2018 年 5 月 14 日。
- 视频:成为 ZFS 大师第一部分 Ben Rockwood 在 2009 年 6 月的 CommunityOne 上发表演讲。
- 视频:成为 ZFS 大师第二部分 Ben Rockwood 在 2009 年 6 月的 CommunityOne 上发表演讲。
外部教程
- 视频:Open-ZFS 训练营 Linda Kateley 在 YouTube 上发布于 2014 年 10 月 14 日的 1 小时 42 分钟视频。
- 教程:在 Debian GNU/Linux 上安装 ZFS Aaron Toponce 于 2012-2013 年发布的多部分深入教程。
ZFS 最佳实践和调优
- 维基:ZFS 调优指南 - freeBSD 维基,最后编辑于 2018-01-19。
- 文档:ZFS 最佳实践指南 (PDF) 发表于 2010-08-25。
- 文档:Oracle Solaris ZFS 管理指南 最后编辑于 2013 年 6 月。
常见问题
modprobe: 服务拒绝密钥
症状
# modprobe zfs modprobe: ERROR: could not insert 'zfs': Key was rejected by service
理由
zfs 内核模块的签名不受您的机器信任,并且您正在使用启用内核锁定的安全启动。
解决方案
您需要将文件系统项目的签名密钥注册为安全启动信任的密钥,以便内核信任该密钥。最简单的方法是安装 zfs-ueficert 包,它将自动使用 mokutil 注册密钥。但是,您需要在加载模块之前重新启动机器,因为密钥注册需要在启动时由引导加载程序手动批准。有关 mokutil 和安全启动密钥的更多信息,请参阅 openSUSE:UEFI。
您还可以通过 下载文件系统项目的 SSL 证书 并直接使用 mokutil 手动注册密钥,但使用 zfs-ueficert 包的好处是,当项目密钥轮换时(大约每 2-3 年发生一次),密钥将自动注册,而手动过程可能会导致您错过轮换,并在重新启动后 ZFS 模块将再次无法加载。
另一种选择是禁用安全启动,但这可能会带来安全隐患。