Hacker News 中文摘要

RSS订阅

如何搭建一个无需群晖、威联通、TrueNAS的极简ZFS NAS(2024版) -- How to Build a Minimal ZFS NAS Without Synology, QNAP, TrueNAS (2024)

文章摘要

本文介绍了如何在不使用Synology、QNAP或TrueNAS等商业系统的情况下,基于Debian 12和OpenZFS搭建一个极简的NAS。核心步骤包括配置RAIDZ1、安装Samba共享文件,适合熟悉Linux基础操作的用户。

文章总结

如何搭建一个极简的 ZFS NAS(无需 Synology、QNAP、TrueNAS)

如果你只需要一个基础的 NAS,并且不关心图形界面功能,那么用 ZFS 创建数据集并通过 Samba 共享网络,其实出奇地简单。

配置概览

| 项目 | 说明 | |------|------| | RAID 级别 | RAIDZ1(1块硬盘冗余) | | 操作系统 | Debian 12 Bookworm | | 加密 | 无 | | ZFS 实现 | OpenZFS, zfs-2.1.1 | | CPU | 4核,可选用便宜的至强服务器CPU | | 内存 | ECC RDIMM 16 GB | | 存储 | 4×4TB NVMe SSD | | 备份 | 本文未涉及,可参考 ZFS Backup Scheduler | | 技能要求 | 基本熟悉 Linux | | 难度 | 初级/简单 |

TrueNAS 功能全面,但如果你不需要那些花哨的特性,自己动手搭建反而更灵活。更重要的是,你完全了解自己的系统,不必依赖第三方软件。

ZFS 最被低估的特性

ZFS 文件系统是自包含的。如果操作系统突然崩溃,你只需将所有硬盘移到另一台机器,安装新系统,装上 zfs,运行 zfs import,数据就能恢复。所有 ZFS 的配置信息都存储在硬盘本身——即使主机系统或机器出问题,只要硬盘没坏,数据就安全。

第一步:定位并整理硬盘

使用 lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE 列出所有硬盘。例如,四块三星 990 PRO 4TB NVMe 硬盘会显示为 nvme5n1nvme2n1 等。

硬盘在 /dev/disk/by-id 下也有对应的 ID 链接。你可以创建 /etc/zfs/vdev_id.conf 文件,为这些 ID 设置别名(如 nvme0nvme1 等),方便后续操作。运行 udevadm trigger 使别名生效,之后可通过 ls -lh /dev/disk/by-vdev 验证。

注意:别名映射是可选的,但建议使用硬盘 ID 而非 /dev/nvme1 等名称,因为后者顺序不固定。即使系统崩溃丢失了 vdev_id.conf,也不影响数据恢复。

第二步:创建 ZPOOL

本教程创建 RAIDZ1(RAID 5)的 zpool,即允许一块硬盘故障。如需更高冗余,可选择 RAIDZ2。

首先安装 ZFS(例如在 RHEL 9 上运行 dnf install zfs)。创建 zpool 时,建议设置 ashift=12(代表 4KB 扇区大小),因为这是最后一次设置机会,能显著提升性能。

运行以下命令创建 zpool: zpool create -o ashift=12 s16z1 raidz1 nvme0 nvme1 nvme2 nvme3 之后用 zpool status s16z1 检查状态。s16z1 是自定义的池名称,你也可以用常见的 tank

创建 zpool 后,会自动生成一个 ZFS 文件系统。用 zdb | grep ashift 确认 ashift=12 已生效。

接着设置挂载点和压缩: zfs set mountpoint=/mnt/s16z1 s16z1 zfs set compression=lz4 s16z1

然后创建数据集(dataset),例如: zfs create s16z1/docs zfs create s16z1/backups 数据集比普通文件夹更强大,支持加密、快照、复制等 ZFS 全部功能。建议按大类创建数据集,方便后续单独备份。

第三步:通过 Samba 共享

安装 Samba:apt install samba。创建 UNIX 用户(如 john)并设置密码,再用 smbpasswd -a john 将其关联到 Samba。

编辑 /etc/samba/smb.conf,添加共享配置。例如 [docs] 共享指向 /mnt/s16z1/docs,允许用户 john 读写;[backups] 共享指向 /mnt/s16z1/backups,并配置为 macOS Time Machine 可用。

在 macOS 上,通过 Finder 的 cmd+K 输入 smb://服务器IP/docssmb://服务器IP/backups 即可挂载。在 Linux 上可用 smbclient 测试。

backups 共享挂载后,macOS 的 Time Machine 会识别并允许你添加备份。


本文仅为基础搭建,后续计划介绍加密和 ZFS 数据集复制等高级功能。

评论总结

根据评论内容,总结主要观点如下:

1. 对DIY NAS方案的认可与质疑并存 - 支持者认为DIY方案灵活可控,如评论3(splitbrain)提到:“Just Nix for the system, zfs for raid and docker compose for any service I might want to run”(仅用Nix系统、ZFS RAID和Docker Compose即可运行任何服务)。 - 质疑者强调可靠性风险,如评论2(beagle3)指出:“data loss is significantly more likely”(数据丢失的可能性显著增加),并批评指南未包含“disk 3 failed, this is how you safely replace it”(磁盘3故障时如何安全更换)的指导。

2. ZFS在Linux上的稳定性争议 - 评论7(naturalmovement)强烈反对在Linux上运行ZFS:“ZFS is a permanent second-class citizen on Linux”(ZFS在Linux上永远是二等公民),建议使用FreeBSD或Illumos。 - 评论16(giov4)报告了实际故障:“drive gets disconnected during scrub or high load”(在清理或高负载期间驱动器断开连接),并指出“zfs nvme pcie or usb problema or disconnect”(ZFS NVMe PCIe或USB问题或断开)是常见问题。

3. 硬件选择与成本考量 - 评论4(Confiks)建议通过“shucking 4x the 14 TB WD Elements Desktop”(拆解4块14TB WD Elements桌面硬盘)降低成本,但警告“warranty is a definite downside”(保修是明显缺点)。 - 评论10(bradley13)强调低功耗:“It should be low power and fanless”(应低功耗且无风扇),推荐N100处理器。

4. 替代方案与工具推荐 - 评论13(INTPenis)推荐RHEL10:“It's free up to 16 licenses, it's ultra stable”(免费最多16个许可证,极其稳定),并提到Cockpit GUI管理工具。 - 评论14(kartoshechka)认可Cockpit:“incredibly useful for managing NAS and VPS”(对管理NAS和VPS非常有用),尤其适合管理Samba和监控磁盘使用。 - 评论15(Havoc)建议直接在Proxmox主机上运行ZFS:“use zfs on a proxmox host and use that both for NAS duty and for the VMs”(在Proxmox主机上使用ZFS,同时用于NAS和虚拟机),避免额外网络层。

5. 备份与数据安全建议 - 评论2(beagle3)强调专业NAS的易用性:“when a disk goes bad... pop its tray out, replace the disk... click a couple of widgets”(磁盘故障时弹出托盘、更换磁盘、点击几个控件即可)。 - 评论12(jmusall)质疑备份工具选择:“Why would they recommend this over something more established like sanoid?”(为何推荐这个而非更成熟的sanoid?)。

总结:评论者对DIY NAS方案存在明显分歧,核心争议在于ZFS在Linux上的稳定性、硬件成本与可靠性平衡,以及备份恢复流程的完整性。多数评论者认可ZFS的潜力,但建议谨慎评估风险,并考虑FreeBSD、RHEL或Proxmox等替代平台。