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
- 创建 cache 文件,并分配大小
truncate -s 32g /data/zfs.l2arc.cache
# or
dd if=/dev/zero of=/data/zfs.l2arc.cache bs=1M count=32768
- 给指定的 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