For the complete documentation index, see llms.txt. This page is also available as Markdown.

23.2.快速入门指南

FreeBSD 可以在系统初始化期间挂载 ZFS 存储池和数据集。要启用此功能,请运行:

# service zfs enable

或者在 /etc/rc.conf 文件中添加以下行:

zfs_enable="YES"

然后启动服务:

# service zfs start

本节中的示例假设有三块 SCSI 磁盘,设备名称分别为 da0da1da2。使用 SATA 硬件的用户应使用 ada 设备名称。

23.2.1. 单磁盘池

要使用单个磁盘设备创建简单的非冗余池:

# zpool create example /dev/da0

要查看新创建的池,可以查看 df 的输出:

# df
Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
/dev/ad0s1a   2026030  235230  1628718    13%    /
devfs               1       1        0   100%    /dev
/dev/ad0s1d  54098308 1032846 48737598     2%    /usr
example      17547136       0 17547136     0%    /example

此输出显示了创建并挂载了 example 池,现在它作为文件系统可访问。为用户创建文件以供浏览:

这个池还没有使用任何高级 ZFS 功能和属性。要在此池上创建启用压缩的数据集:

example/compressed 数据集现在是 ZFS 压缩文件系统。尝试将一些大文件复制到 /example/compressed

要禁用压缩,请使用:

要卸载文件系统,使用 zfs umount 并通过 df 验证:

要重新挂载文件系统以使其再次可访问,使用 zfs mount 并通过 df 验证:

运行 mount 显示池和文件系统:

创建后,像使用任何文件系统一样使用 ZFS 数据集。根据需要在每个数据集上设置其他可用的特性。下面的示例创建了名为 data 的新文件系统。假设该文件系统包含重要文件,并将其配置为存储每个数据块的两个副本。

使用 df 查看数据和空间使用情况:

注意,池中的所有文件系统都具有相同的可用空间。使用 df 命令显示的这些示例表明,文件系统按需使用空间,并且都来自同一个池。ZFS 摒弃了卷和分区的概念,让多个文件系统能共享同一个池。

要销毁不再需要的文件系统和池:

23.2.2. RAID-Z

磁盘会发生故障。避免磁盘故障导致数据丢失的方法之一是使用 RAID。ZFS 在其池设计中支持此功能。RAID-Z 池需要三块或更多的磁盘,但提供比镜像池更多的可用空间。

此示例创建 RAID-Z 池,指定要添加到池中的磁盘:

注意

Sun™ 建议在 RAID-Z 配置中使用的设备数量应在三块到九块之间。对于需要单个池包含十块或更多磁盘的环境,考虑将其拆分为较小的 RAID-Z 组。如果有两块磁盘可用,ZFS 镜像可以在需要时提供冗余。有关更多详细信息,请参阅 zpool(8)

上面的示例创建了名为 storage 的 zpool。这个示例在该池中创建名为 home 的新文件系统:

启用压缩并存储目录和文件的额外副本:

要将其作为用户的新主目录,请将用户数据复制到此目录并创建适当的符号链接:

用户数据现在存储在新创建的 /storage/home 中。通过添加新用户并以该用户身份登录来测试。

创建文件系统快照,以便稍后回滚:

ZFS 创建的是数据集的快照,而不是单个目录或文件。

@ 字符是文件系统名称或卷名称之间的分隔符。在删除重要目录之前,先备份文件系统,然后回滚到该目录仍存在的早期快照:

要列出所有可用的快照,可以在文件系统的 .zfs/snapshot 目录中运行 ls。例如,要查看刚才创建的快照:

编写脚本定期创建用户数据的快照。随着时间的推移,快照可能会占用大量磁盘空间。使用以下命令删除先前的快照:

测试完成后,使用以下命令将 /storage/home 设置为真正的 /home

运行 dfmount 确认系统现在将该文件系统视为真实的 /home

至此,RAID-Z 配置完成。通过在 /etc/periodic.conf 文件中添加以下行,向每晚的 periodic(8) 运行添加文件系统的每日状态更新:

23.2.3. 恢复 RAID-Z

每个软件 RAID 都有监控其状态的方法。使用以下命令查看 RAID-Z 设备的状态:

如果所有池都是 在线,且一切正常,消息会显示:

如果出现问题,可能是磁盘处于 离线 状态,池的状态会显示如下:

“OFFLINE”显示管理员通过以下命令将 da1 设为离线:

现在关机并替换 da1。开机后将 da1 返回池中:

接下来,再次检查状态,这次不带 -x 选项以显示所有池:

在此示例中,一切正常。

23.2.4. 数据验证

ZFS 使用校验和来验证存储数据的完整性。创建文件系统时会自动启用校验和。

警告

可以禁用校验和,但 不推荐!校验和仅占用极少存储空间,却能确保数据完整性。大多数 ZFS 特性在禁用校验和的情况下无法正常工作。禁用校验和也不会明显提高性能。

验证数据校验和(称为 scrub)可以确保 storage 池的完整性,命令如下:

scrub 的持续时间取决于存储的数据量。数据量越大,验证所需的时间就越长。由于 scrub 是 I/O 密集型操作,ZFS 每次只能运行一个 scrub。scrub 完成后,使用 zpool status 查看状态:

显示上次 scrub 完成日期有助于决定何时开始另一次 scrub。定期 scrub 有助于保护数据免受静默损坏,并确保池的完整性。

有关其他 ZFS 选项,请参阅 zfs(8)zpool(8)

最后更新于