ZFS 存储
我们想要感谢Ed Rawlings(Spaceinvader One)所做的专业指导和贡献,这份 ZFS 存储文档正是从他的教程和见解中得来的。感谢他持续为 Unraid 用户提供帮助,帮助众多用户掌握高级存储技术。我们珍视他对 Unraid 社区的持续贡献。
ZFS 为您的 Unraid 系统带来高级的数据完整性、灵活的存储配置和高性能。本指南解释 ZFS 的核心概念,并引导您通过 Unraid WebGUI 直接管理 ZFS 池。无论您是部署新的 ZFS 存储还是整合现有的池,您都可以在这里获取启动所需的步骤和背景。
为什么选择 ZFS?
ZFS 是一种现代文件系统和卷管理器,旨在保护您的数据、预防损坏并简化存储管理。
使用 ZFS,您可以获得:
Unraid supports ZFS for any storage pool. You can create a new ZFS pool, import one from another system, or use Unraid’s unique hybrid ZFS setup: add a ZFS-formatted disk directly to the Unraid array (not a pool) and combine ZFS features with Unraid’s parity protection.
:::info[Example]
您可以在单个磁盘上使用 ZFS snapshots 和复制作为备份目标,或将快速 SSD ZFS 池复制到由 Unraid parity 保护的 ZFS 磁 盘中的 array,以获得双重优势。
:::
The hybrid ZFS-in-array approach is helpful for specific backup or replication scenarios but is not a replacement for a full ZFS pool. ZFS disks in the array are managed individually; you do not get the combined performance, redundancy, or self-healing of a true multi-disk ZFS pool. For full ZFS functionality, always use dedicated ZFS pools.
池、vdevs 和冗余
一个 ZFS 池(称为“zpool”)由一个或多个 vdevs(虚拟设备)组成。在每个 vdev 内,多个物理盘通过某种冗余级别组合到一起。ZFS 在多个 vdev 上写入数据,但每个 vdev 负责自己的容错。
冗余总是针对每个 vdev 的。如果任何一个 vdev 失败,整个池将失败,即使其他 vdev 是健康的。请仔细规划您的 vdev!
创建一个 ZFS 池
- 停止array。
- 点击添加池。
- 为您的存储池选择一个名称(例如,
raptor
)。 - 设置槽位数量以匹配您想要在主数据 vdev(s) 中的磁盘数量。
此初始槽位数量仅用于数据 vdev。支持 vdev(例如日志或缓存驱动器)可以在创建池后单独添加。
- 将磁盘分配到池中(磁盘顺序无关紧要)。
- 点击池名称(例如
raptor
)以打开其配置屏幕。 - 将 文件系统类型设置为
zfs
或zfs-encrypted
(用于 LUKS 加密)。
- 选择您的分配配置文件 - 这会决定您的池的冗余和性能。
在最终确定之前,检查关于分配配置文件和拓扑结构的章节以做出明智的选择。
- 如果需要,可以启用压缩(推荐用于大多数工作负载)。
- 点击完成,然后启动 array。
将 ZFS 磁盘添加到阵列(混合设置)
您可以将独立的 ZFS 磁盘添加到您的 Unraid array(而不是 ZFS 池)中,以结合 ZFS 功能和 Unraid 的 parity 保护。
- 在 文件系统 下,选择
zfs
或zfs-encrypted
。
- 点击 应用。
- 启动 array,并在需要时让磁盘格式化。
选择分配配置文件
当您设置 ZFS 池时,您的分配配置文件将决定您的数据如何受到保护、池的性能以及其可扩展性。以下是一些简单的比较帮助您决定哪个配置文件适合您的需求:
配置 | 冗余 | 性能 | 扩展 | 空间效率 | 典型用例 |
---|---|---|---|---|---|
条带 | 无 | 快,但风险大 | 增加更多磁盘 | 100% | 临时/临时存储 |
镜像 | 1:1(RAID 1 样式) | 对于随机 I/O 表现出色 | 增加更多镜像 | 50% | 高性能,易于扩展 |
RAIDZ1 | 每个 vdev 1 个盘 | 在处理大文件时速度快。不适合小文件或随机写入。 | 增加新的 vdev | 高 | 通用用途,1 盘容错 |
RAIDZ2 | 每个 vdev 2 个盘 | 与 Z1 类似,但写入略慢(额外的奇偶校验) | 增加新的 vdev | 中等 | 重要数据,2 盘容错 |
RAIDZ3 | 每个 vdev 3 个盘 | 与 Z2 类似,写入更多负担(最大安全性) | 增加新的 vdev | 低 | 任务关键型,3 盘容错 |
- 选择 镜像 如果您想要最佳性能和易于、灵活的扩展,并且愿意使用更多磁盘空间来确保冗余。
- 选择 RAIDZ1/2/3 如果您想最大化可用空间并存储大文件,但要记住扩展的灵活性较低,随机写性能较差。
- 条带 只适用于非关键性、临时数据 - 如果任何磁盘故障,您将失去所有数据。
拓扑和扩展
您如何将磁盘分组到 vdevs 中会影响数据安全性和速度。
- 如果您将所有磁盘放入一个大型 RAIDZ2 vdev,您可以在不丢失数据的情况下丢失任意两个磁盘。然而,扩展意味着需要添加另一个完整的 vdev。
- 如果将磁盘分割成多个较小的 RAIDZ1 vdev,您将获得更好的并行性能。请注意,如果同一 vdev 中有两个磁盘故障,您将失去整 个池。
- ZFS 将数据跨 vdev 条带化,而不是单个磁盘,因此更多的 vdev 能够提升处理很多小文件或随机 I/O 的工作负载性能。
- 扩展一个 ZFS 容量池通常意味着添加一个新的相同布局的 vdev,而不仅仅是单个磁盘。
压缩和 RAM
ZFS 提供的高级功能能够显著提高 Unraid 的存储效率和性能。压缩和内存需求是两个常见的关注点。
ZFS 压缩是透明的 - 它在后台运行,在数据到达磁盘之前缩小数据。
这提供了两个主要优点:
- 减少磁盘使用量: 所需存储空间更少。
- 提高性能: 写入和读取较少数据可以导致更快的操作,特别是在现代 CPU 上。
ZFS RAM 神话 - 点击展开/折叠
导入其他系统创建的 ZFS 池
Unraid 可以轻松导入其他平台上创建的 ZFS 池。
如何导入 ZFS 池 - 点击展开/折叠
- 停止阵列: 确保您的 Unraid array 已停止。
- 添加新 池: 点击 添加池。
- 分配所有驱动器:
- 将 数据槽位数量 设置为您的 ZFS 池中磁盘(包括数据 vdevs 和支持 vdevs)总数。
- 将每个驱动器分配到正确的插槽。
- 示例: 对于具有 4 个驱动器镜像 vdev 和 2 个驱动器 L2ARC vdev 的池,设置 6 个插槽并分配所有六个驱动器。
- 设置文件系统为 "Auto": 点击池名称(例如,
raptor
)并将 文件系统 设置为 Auto。 - 完成并启动阵列: 点击 完成,然后启动 array。
导入后,强烈建议运行 scrub 以验证数据完整性。
- 点击池名(例如
raptor
)以打开其配置。 - 在 池状态 下,检查状态并点击 Scrub。