ZFS 存储结构
1+--------------+--------------+
2| fs | fs |
3+--------------+--------------+
4| pool |
5+---------+---------+---------+
6| dev | dev | dev |
7+---------+---------+---------+
安装 OpenZFS
1sudo apt update
2sudo apt install linux-headers-generic zfsutils-linux
创建 zpool
获取磁盘路径
1# 指令:
2ls -l /dev/disk/by-id/
3
4# 示例输出
5lrwxrwxrwx root root scsi-3600224803625601411d7b9ac385fe7e5 -> ../../sda
6lrwxrwxrwx root root scsi-3600224808706cf11a87183b8497a2b6e -> ../../sdc
7lrwxrwxrwx root root scsi-360022480f059432a0118aadee2d973ff -> ../../sdb
8lrwxrwxrwx root root wwn-0x600224803625601411d7b9ac385fe7e5 -> ../../sda
9lrwxrwxrwx root root wwn-0x600224808706cf11a87183b8497a2b6e -> ../../sdc
10lrwxrwxrwx root root wwn-0x60022480f059432a0118aadee2d973ff -> ../../sdb
11
12# 记下其中对应磁盘的 scsi-xxxxxxxx 或 ata-xxxxxxxx 或 nvme-xxxxxxxx
创建 zpool
${POOL_NAME} 换成存储池名称
- 单磁盘
1sudo zpool create ${POOL_NAME} scsi-xxxxxxxx - stripe ( RAID0 )
1sudo zpool create ${POOL_NAME} scsi-xxxxxxxx scsi-xxxxxxxx - mirror ( RAID1 )
1sudo zpool create ${POOL_NAME} mirror scsi-xxxxxxxx scsi-xxxxxxxx - raidz1 ( RAID5 )
1sudo zpool create ${POOL_NAME} raidz scsi-xxxxxxxx scsi-xxxxxxxx - 更多其他组合请参考: https://wiki.debian.org/ZFS#Creating_the_Pool
查看 zpool
1# 指令:
2sudo zpool list
3
4# 示例输出
5NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
6data 1.81T 372K 1.81T - - 0% 0% 1.00x ONLINE -
创建 zfs
常规创建
1sudo zfs create data/share
自定义挂载点
1sudo mkdir -p /share
2sudo zfs create -o mountpoint=/share data/share
查看 zfs
1# 指令:
2sudo zfs list
3
4# 示例输出
5NAME USED AVAIL REFER MOUNTPOINT
6data 564K 1.76T 96K /data
7data/share 96K 1.76T 96K /data/share
数据去重 | Deduplication
Tips:
- 块级去重 与 压缩 和 加密 冲突
- 去重对性能损耗极为严重,尤其是 HDD,建议设置完后参考下文的【写入性能测试】至少写入 8GB 的数据对磁盘速度进行测试
Debian Bookworm 目前支持的去重方式
onoffverifysha256[,verify]sha512[,verify]skein[,verify]edonr,verify- 其中:
sha256、sha512、skein、edonr为散列方式;[]内为可选项,使用时要将括号去除;- 带
verify的为块级去重,不带则为文件去重; off为关闭,on默认为sha256;
如何查看本机支持的去重方式:
1# 原理是给 dedup 一个无效属性,它就会告诉你支持哪些 2sudo zfs set dedup=help ${POOL_NAME}设置去重
1sudo zfs set dedup=on ${FS_NAME}
数据压缩 | Compression
- 查看本机支持的压缩方式,与上文【去重】相同,将
dedup替换为compression即可 - 启用压缩
1sudo zfs set compression=on ${FS_NAME}
写入性能测试
1cd /data/share
2sudo dd if=/dev/urandom of=16G.test bs=64K count=262144 status=progress
3sudo dd if=/dev/urandom of=8G.test bs=4M count=2048 status=progress
Samba 服务
安装 Samba
1sudo apt install samba
配置 Samba
- 备份原有配置
1sudo systemctl stop smbd 2sudo mv /etc/samba/smb.conf{,.bak} - 写入新配置
1# /etc/samba/smb.conf 2[global] 3server string = Samba(%v): %h 4workgroup = WORKGROUP 5# If has Apple devices set SMB2 6server min protocol = SMB3 7server max protocol = SMB3 8# Set off if CPU unsupport AES offloading 9server smb encrypt = desired 10server multi channel support = yes 11 12[share] 13path = /data/share 14create mask = 0755 15browseable = yes 16writeable = yes 17public= no
Tips: 加密测速指令:
1# 单线程
2openssl speed -aead -evp aes-128-gcm
3# 多线程
4openssl speed -aead -evp aes-128-gcm -multi $(nproc)
启动 Samba
1sudo systemctl restart smbd
设置用户密码
Tips: 用户必须是已存在的 Unix 用户
1# New User
2sudo smbpasswd -a ${USER}
3# Reset Password
4sudo smbpasswd ${USER}
![Featured image of post Debian 网关 [Episode 06]: 创建 ZFS 卷并启用 Samba](/post/b6b316de/cover_hue7d633b2d7f5b1b6e95a4af2800a9c85_31928_800x0_resize_box_3.png)