Featured image of post Debian 网关 [Episode 06]: 创建 ZFS 卷并启用 Samba

Debian 网关 [Episode 06]: 创建 ZFS 卷并启用 Samba

实现基础 NAS 功能

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 目前支持的去重方式

    • on
    • off
    • verify
    • sha256[,verify]
    • sha512[,verify]
    • skein[,verify]
    • edonr,verify
    • 其中:
      • sha256sha512skeinedonr 为散列方式;
      • [] 内为可选项,使用时要将括号去除;
      • 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}
CC BY-NC-SA 4.0 转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!
最后更新于 Apr 28, 2023 02:38 +0800
人最重要的特点是会思考,写博客的初衷是保存思维的电子快照。 当然各种文档工具亦或是简单的文本编辑器也能随时记录点滴,选择建个人网站无非是想满足技术爱好者的偏执。
Built with Hugo
主题 StackJimmy 设计