Skip to main content

Zettabyte File System (ZFS)

定义

Datasets

Zvol(VOLUME)

Zvol 相当于创建了一个磁盘,基于块存储。你可以在上面,做分区,做文件系统(like ext4)。

然后挂载到虚拟机读写

Dataset(FILESYSTEM)

Dataset 相当于创建了文件夹,你的大多数文件都应该放在这里。

Snapshot

Snapshot 是一个只读的快照,可以用来回滚数据。这是 ZFS 非常强大的功能。

Zpool error & resilvering

如果 zpool 发生错误,需要用 zpool clear 解决该问题

1. 查看 zpool 状态

zpool status
  pool: zpool-1
state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
repaired.
scan: scrub repaired 1012K in 07:36:20 with 0 errors on Sun Oct 13 13:36:22 2024
config:

NAME STATE READ WRITE CKSUM
zpool-1 DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
39de09fc-1234-5678-0000-87c7eee3b56b ONLINE 0 0 0
c2e7160e-1234-5678-0000-10cf79566b77 ONLINE 0 0 0
820e704f-1234-5678-0000-4f571bbc1e3c FAULTED 27 0 0 too many errors
650dbbf5-1234-5678-0000-9c7b0ef20777 ONLINE 0 0 0

errors: No known data errors

2. 用 zpool clear {pool} {device} 来重建 READ ERROR 的数据

zpool clear zpool-1 820e704f-1234-5678-0000-4f571bbc1e3c
zpool status
  pool: zpool-1
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Sun Oct 13 21:58:28 2024
95.3G / 9.86T scanned, 9.51G / 9.86T issued at 424M/s
2.36G resilvered, 0.09% done, 06:46:37 to go
config:

NAME STATE READ WRITE CKSUM
zpool-1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
39de09fc-1234-5678-0000-87c7eee3b56b ONLINE 0 0 0
c2e7160e-1234-5678-0000-10cf79566b77 ONLINE 0 0 0
820e704f-1234-5678-0000-4f571bbc1e3c ONLINE 0 0 0 (resilvering)
650dbbf5-1234-5678-0000-9c7b0ef20777 ONLINE 0 0 0

errors: No known data errors

3. 等待 resilver 动作完成

可以看到 resilvered 了 23.8G 的数据。

zpool status
  pool: zpool-1
state: ONLINE
scan: resilvered 23.8G in 00:06:14 with 0 errors on Sun Oct 13 22:04:42 2024
config:

NAME STATE READ WRITE CKSUM
zpool-1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
39de09fc-1234-5678-0000-87c7eee3b56b ONLINE 0 0 0
c2e7160e-1234-5678-0000-10cf79566b77 ONLINE 0 0 0
820e704f-1234-5678-0000-4f571bbc1e3c ONLINE 0 0 0
650dbbf5-1234-5678-0000-9c7b0ef20777 ONLINE 0 0 0

errors: No known data errors

ZFS L2ARC

ref: https://serverfault.com/questions/952605/zfs-use-a-file-as-l2arc-cache

基于文件创建 L2 Cache

因为 truenas 必须安装在一个 硬盘设备 上,但是如今 NVME 硬盘普遍都是 256G/PCI4 起, 速度5G/s。Truenas 仅占用了其中的 十几G,剩下的空间都浪费掉了。

基于 NVME 的性能,可以使用剩余的空间来做 L2

  1. 创建 cache 文件,并分配大小
truncate -s 32g /data/zfs.l2arc.cache
# or
dd if=/dev/zero of=/data/zfs.l2arc.cache bs=1M count=32768
  1. 给指定的 pool 添加 L2ARC
zpool add {your_pool_name} cache /data/zfs.l2arc.cache

基于 设备 或 回环设备创建

zpool add {your_pool_name} cache /dev/loop0

创建loop设备(optional)

# 同样的先创建文件并分配大小
dd if=/dev/zero of=/data/zfs.l2arc.cache bs=1M count=32768

# 创建回环设备(从cache文件挂载)
losetup /dev/loop0 /data/zfs.l2arc.cache

# 如果不需要了 卸载回环设备
losetup -d /dev/loop0

# 还需要添加开机挂载 (/etc/fstab)
# 但是 Truenas 官方并不推荐这么做,也不想使用除 zfs 以外的文件系统。so good luck.

移除 L2ARC

zpool remove {your_pool_name} {file or vdev}

IO Monitor

zpool iostat -v {poolname} 1