Skip to content

Commit 93ef77d

Browse files
committed
filesystem,zfs: Add zfs create and some ZFS notes
1 parent 1fc0f98 commit 93ef77d

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

docs/ops/storage/filesystem.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ test.img3 2623488 16775167 14151680 6.7G Linux filesystem
544544
| ReiserFS | :fontawesome-solid-check:{: .orangered } (deprecated) | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 适用于存储大量小文件的场合。由于内核主线已经考虑移除支持,如有存储大量小文件需求,可能需要使用其他方案替代。 |
545545
| [Btrfs](https://wiki.archlinux.org/title/Btrfs) | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 内置于 Linux 内核的新一代的 CoW 文件系统,支持快照、透明压缩等高级功能。RAID 5/6 支持不稳定,也有对整体稳定性的争议。 |
546546
| [Bcachefs](https://wiki.archlinux.org/title/Bcachefs) | :fontawesome-solid-check:{: .limegreen } (Linux 6.7+) | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 基于 [Bcache](https://wiki.archlinux.org/title/Bcache) 的新一代 CoW 文件系统,旨在用更简洁的代码实现 Btrfs 和 ZFS 的功能,采用与 GPL 兼容的许可证。|
547-
| [ZFS](https://wiki.archlinux.org/title/ZFS) | :fontawesome-solid-check:{: .limegreen }(需要 kernel module) | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-xmark:{: .orangered } | 起源于 Solaris 的 CoW 文件系统,适用于存储大量文件、需要高级功能的场合。需要额外的内存和 CPU 资源。 |
547+
| [ZFS](https://wiki.archlinux.org/title/ZFS) | :fontawesome-solid-check:{: .limegreen }(需要 kernel module) | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-check:{: .limegreen }[^zfs-win] | 起源于 Solaris 的 CoW 文件系统,适用于存储大量文件、需要高级功能的场合。需要额外的内存和 CPU 资源。 |
548548
| NTFS | :fontawesome-solid-check:{: .limegreen } (Linux 5.15+) | 只读 | :fontawesome-solid-check:{: .limegreen } | Windows 上最常见的文件系统。 |
549549
| HFS+ | 只读 | :fontawesome-solid-check:{: .limegreen } | 只读,Bootcamp | macOS 较早期版本最常见的文件系统。 |
550550
| APFS | :fontawesome-solid-xmark:{: .orangered } | :fontawesome-solid-check:{: .limegreen } | :fontawesome-solid-xmark:{: .orangered } | macOS 较新版本的 CoW 文件系统。 |
@@ -1187,6 +1187,7 @@ fusermount -u mountpoint/
11871187
[^sector]: 当然了,「扇区」的概念在现代磁盘,特别是固态硬盘上已经不再准确,但是这里仍然使用这个习惯性的术语。
11881188
[^sector-size]: 扇区的大小(特别是现代磁盘在实际物理上)不一定是 512 字节,但在实际创建分区时,一般都是以 512 字节为单位。
11891189
[^xfs_growfs]: [xfs_growfs(8)][xfs_growfs.8]: A filesystem with only 1 AG cannot be shrunk further, and a filesystem cannot be shrunk to the point where it would only have 1 AG.
1190+
[^zfs-win]: [OpenZFS on Windows](https://github.com/openzfsonwindows/openzfs) 项目已经有些年头了,但其仍然为 Beta 状态,虽然一般不会发生导致数据丢失的问题,但仍然存在系统崩溃问题,因此不推荐在生产环境使用。
11901191

11911192
## 引用来源 {#references .no-underline}
11921193

docs/ops/storage/zfs.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ ZFS 在内部采用“日志式文件系统”[^ostep-lfs]设计,这使得 ZFS
3939

4040
??? tip "root on ZFS"
4141

42-
如果你计划将 rootfs 也安装在/迁移至 ZFS 上的话,还需要安装 `zfs-initramfs` 软件包,以便在启动时加载 ZFS 模块。
42+
如果你计划将 rootfs 也安装在/迁移至 ZFS 上的话,还需要安装 `zfs-initramfs` 软件包,以便在系统启动阶段加载 ZFS 模块。
4343

4444
在这种配置下,我们**强烈建议**为 `/boot` 目录单独创建一个分区并使用 ext4 文件系统,以避免 GRUB 在特定条件下无法识别 ZFS 文件系统的问题。
4545
另一种办法是使用 systemd-boot,还可以搭配 UKI 启动。
@@ -123,7 +123,7 @@ tank 2.81G 112K 2.81G - - 0% 0% 1.00x ONLINE -
123123

124124
在 ZFS 中,绝大多数诸如查询状态等只读的命令都不需要 `sudo`。
125125

126-
在创建好 zpool `tank` 后,ZFS 也自动创建了一个文件系统 `tank` 并挂载在了 `/tank` 目录,可以直接使用。
126+
在创建好 zpool `tank` 后,ZFS 也自动创建了一个文件系统 `tank` 并挂载在了 `/tank` 目录,可以直接使用,但我们**强烈推荐**按照 [ZFS 数据集](#dataset)一节创建更多的文件系统或 Zvol 再在其中存储资料
127127

128128
对于新建的 ZFS pool,我们推荐调整一些参数以获得最佳的性能。具体参见下一节。
129129

@@ -155,6 +155,20 @@ ZFS dataset 层面的参数可以通过 `zfs set` 命令进行调整,语法与
155155

156156
### ZFS 文件系统 {#zfs-filesystem}
157157

158+
ZFS 文件系统(filesystem)是 ZFS 的主要存储形式,通过 VFS 接口提供文件存储功能。当你创建 ZFS pool `tank` 时,这个 pool 的根数据集(root dataset)就会自动成为一个文件系统,并挂载在 `/tank` 目录下。
159+
160+
为了便于管理和维护,我们**强烈推荐**建立额外的文件系统来存储数据,而不是直接在 `/tank` 下存储数据。例如:
161+
162+
```shell
163+
zfs create tank/data
164+
zfs create tank/backup
165+
# etc.
166+
```
167+
168+
这些额外的文件系统会自动继承上级文件系统的属性(如压缩、快照等)。特别地,`mountpoint` 属性的继承方式是在上级文件系统的 `mountpoint` 属性上加上当前文件系统的名称,例如 `/tank/data` 的默认挂载点为 `/tank/data` 等。ZFS 的属性继承功能是我们非常推荐的“便于管理和维护”的特性之一,例如,中科大镜像站就将软件仓库放在 `pool0/repo` 下,该目录的 `mountpoint` 属性为 `/srv/repo`,此时每个具体的软件仓库就可以直接建立独立的文件系统并继承所有重要属性,如 `pool0/repo/ubuntu` 的挂载点就自动继承为 `/srv/repo/ubuntu`
169+
170+
#### ZFS 文件系统参数 {#zfs-filesystem-props}
171+
158172
以下是一些推荐/经常修改的参数:
159173

160174
- `xattr=sa`:将文件的扩展属性(如 POSIX ACL 和 SELinux 标签等)存储在 dnode 中(类似其他文件系统的 inode),而不是独立的“文件”中。对于经常使用扩展属性的应用场景(如 Samba),使用 `xattr=sa` 可以减少磁盘 I/O,提高性能。
@@ -167,6 +181,9 @@ ZFS dataset 层面的参数可以通过 `zfs set` 命令进行调整,语法与
167181

168182
此 ZFS 参数与 Linux 的挂载选项 `relatime` 完全相同。
169183

184+
如果你的使用场景不需要记录访问时间戳(如镜像站),可以设置 `atime=off` 关闭该功能,进一步减少磁盘 I/O,此时 `relatime` 选项将不起作用。
185+
类似地,`atime` 设置与 Linux 的挂载选项 `atime` / `noatime` 完全相同。
186+
170187
- `compression=on``compression=zstd`:启用 ZFS 的透明压缩功能。对于大多数数据,压缩后的数据量会显著减小,从而减少磁盘 I/O。
171188

172189
一般建议启用透明压缩功能,除非你的 CPU 性能较差(例如 10 年前的服务器)或者预期的数据量不会因压缩而减小(例如归档存储已经压缩过的数据)。

0 commit comments

Comments
 (0)