搭建极简 ZFS NAS(无需 Synology、QNAP、TrueNAS)
本文介绍如何在 Debian 12 上基于 OpenZFS 与 Samba 快速部署一个无图形界面的极简 NAS,适用于仅需基础网络存储与数据冗余、不需要 TrueNAS 等“全功能”平台额外特性的场景。
范围与硬件
- RAID 级别:RAIDZ1(单盘冗余)
- 系统与软件:Debian 12 + OpenZFS 2.1.11,无加密
- 硬件示例:4 核 Xeon、16 GB ECC RDIMM、4×4 TB NVMe SSD
- 技能要求:基础 Linux familiarity,不涵盖备份方案
ZFS 的核心优势:自包含
ZFS 的全部配置、阵列状态与元数据均存储在磁盘自身。即使主机操作系统突然损坏或整机报废,只需将物理盘移至新机器、安装 zfs 工具并执行 zfs import,即可直接恢复原有的 RAIDZ 阵列与数据,无需原系统的任何配置文件。这是 ZFS 最被低估的特性之一。
步骤一:定位并组织磁盘
使用 lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE 列出所有磁盘。为避免 /dev/nvmeX 这类盘符在重启或增删硬盘时顺序变化,应通过 /dev/disk/by-id/ 下基于序列号的持久化链接来识别设备。
可选地为设备创建别名,编辑 /etc/zfs/vdev_id.conf:
alias nvme0 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
alias nvme1 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX
...
执行 udevadm trigger 生效后,可通过 /dev/disk/by-vdev/ 查看别名映射。该别名文件仅在建池时提供方便,即使丢失也不影响后续 zfs import 恢复数据。
步骤二:创建 ZPOOL
安装 OpenZFS 后(文中以 RHEL 的 dnf install zfs 命令示例,Debian 可参照官方文档),创建 RAIDZ1 存储池。现代大容量 SSD(如 Samsung 990 PRO)物理扇区通常为 4KB,但多数磁盘向 OS 报告 512B 以兼容旧系统,因此建池时建议显式指定 -o ashift=12(代表 4KB 扇区),避免性能损失:
zpool create -o ashift=12 s16z1 raidz1 nvme0 nvme1 nvme2 nvme3
通过 zpool status s16z1 查看池状态,并用 zdb | grep ashift 确认参数已生效。
随后设置文件系统属性:
zfs set mountpoint=/mnt/s16z1 s16z1
zfs set compression=lz4 s16z1
接着在池中创建数据集:
zfs create s16z1/docs
zfs create s16z1/backups
数据集不仅是目录,而是具备独立属性、快照、加密和复制能力的 ZFS 逻辑单元。按大类(如文档、备份)划分数据集,可实现更细粒度的管理与迁移,无需一次性操作整个存储池。
通过 Samba 共享
ZFS 本身不关心上层共享协议,只要数据集在主机挂载即可。以下使用 Samba 对外提供 SMB 共享。
安装并配置用户
apt install samba
useradd -m john
passwd john
smbpasswd -a john
使用 pdbedit -L -v john 验证 Samba 用户是否添加成功。
配置 /etc/samba/smb.conf
为通用文件共享与 macOS Time Machine 分别建立配置:
[docs]
path = /mnt/s16z1/docs
browseable = yes
read only = no
guest ok = no
valid users = john
create mask = 0755
[backups]
path = /mnt/s16z1/backups
read only = no
guest ok = no
inherit acls = yes
spotlight = yes
fruit:aapl = yes
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
valid users = john
客户端访问
- macOS:在 Finder 中按
Cmd+K,输入 smb://<服务器IP>/docs 或 /backups。其中 backups 会作为 Time Machine 备份目标出现在系统设置中。
- Linux:安装
smbclient 后运行 smbclient -U john //<IP>/docs -c 'ls' 进行测试。
后续扩展
作者计划在后续文章中补充 ZFS 加密与数据集远程复制(ZFS send/receive)的进阶用法。