返回

文章详情

如何在没有Synology、QNAP、TrueNAS的情况下构建一个最小化的ZFS NAS

Hacker News2026年7月8日 03:59

如何在没有Synology、QNAP、TrueNAS的情况下构建一个最小化的ZFS NAS 发表日期:2024-08-23 ZFS 系统由 Oracle 提供 如果你需要一个基本的NAS,并且不在乎图形用户界面功能,那么设置一个ZFS数据集并通过Samba在网络上共享是相当简单的。 范围: 范围与要求 RAID级别 RAIDZ1 (1个驱动器冗余) 操作系统 Debian 12 Bookworm 加密 无 ZFS实现 OpenZFS,zfs-2.1.1 CPU 4核,Xeon服务器 CPU可以便宜获得 RAM ECC RDIMM RAM 16 GB 存储 4x4TB NVMe SSD 备份 不涵盖,使用ZFS备份调度器 技能 对Linux有基本的了解 技能级别 初学者/简单 我使用这篇文章来为将来的自己记录,随意调整以满足你的需要。 TrueNAS的问题在于它是一套全功能的软件套件,声称是企业级的。虽然设置起来可能很简单(我从未尝试过),但我不需要它所提供的任何附加功能。这是我需要的与它所提供的之间的不匹配;不是TrueNAS本身有什么问题。 还有一点值得一提的是,了解所有内容的系统,而不是依赖另一个东西。 ZFS最好的特性从未在任何地方解释或记录 ZFS文件系统是自包含的。如果你的OS突然崩溃,只需将所有磁盘转移到另一台机器或安装一个新的OS,安装zfs,运行zfs导入,恢复你的数据。这种自由被低估且未被充分理解。而且也没有在任何地方解释。值得强调的是:关于ZFS的所有配置/细节都存储在磁盘上。如果你设置了一个RAIDZ2(RAID 6),使用了6个磁盘,它们是自包含的。将它们转移到安装有zfs工具的新机器上,简单地运行zfs导入。然后,它们将显示为RAIDZ2。这是一个惊人的特性,无论主机操作系统、机器等发生什么;只要磁盘没有损坏,你的数据就没问题。 第一步。定位和整理磁盘 使用lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE命令在Linux机器上列出所有磁盘。 [root@sys ~]# lsblk -d -o TRAN,NAME,TYPE,MODEL,SERIAL,SIZE TRAN NAME TYPE MODEL SERIAL SIZE sda disk 虚拟磁盘 40G nvme nvme5n1 disk 三星SSD 990 PRO 4TB XXXXXXXXXXXXXXX 3.6T nvme nvme2n1 disk 三星SSD 990 PRO 4TB XXXXXXXXXXXXXXX 3.6T nvme nvme6n1 disk 三星SSD 990 PRO 4TB XXXXXXXXXXXXXXX 3.6T nvme nvme3n1 disk 三星SSD 990 PRO 4TB XXXXXXXXXXXXXXX 3.6T 这些是三星的新NVMe驱动器,因此它们应该是完全未分配的。磁盘还映射到一个ID,运行ls -lh /dev/disk/by-id : [root@sys ~]# ls -lh /dev/disk/by-id total 0 lrwxrwxrwx. 1 root root 10 May 10 09:34 dm-name-rhel-root -> ../../dm-0 lrwxrwxrwx. 1 root root 10 May 10 09:34 dm-name-rhel-swap -> ../../dm-1 lrwxrwxrwx. 1 root root 10 May 10 09:34 lvm-pv-uuid-DGBpev-Na0C-tY20-YY6E-tpL3-epNA-8Ts3Y0 -> ../../sda3 lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme2n1 lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme5n1 lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme3n1 lrwxrwxrwx. 1 root root 13 May 10 09:34 nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX -> ../../nvme6n1 注意它们通过符号链接到/dev/中的磁盘名称。我们可以创建一个/etc/zfs/vdev_id.conf,映射别名到这些ID:[root@sys ~]# vim /etc/zfs/vdev_id.conf # 在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 alias nvme2 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX alias nvme3 /dev/disk/by-id/nvme-Samsung_SSD_990_PRO_4TB_XXXXXXXXXXXXXXX 运行udevadm trigger以设置别名(或者你可以重启机器)。我们可以通过运行ls -lh /dev/disk/by-vdev来验证别名是否已映射: lrwxrwxrwx. 1 root root 13 May 10 10:28 nvme0 -> ../../nvme2n1 lrwxrwxrwx. 1 root root 13 May 10 10:28 nvme1 -> ../../nvme5n1 lrwxrwxrwx. 1 root root 13 May 10 10:28 nvme2 -> ../../nvme3n1 lrwxrwxrwx. 1 root root 13 May 10 10:28 nvme3 -> ../../nvme6n1 别名映射是完全可选的,你可以选择在创建zpool时使用完整ID /dev/disk/by-id/nvme-eui.002538414143c248的磁盘,如我们将在下一部分中所做。使用别名使得操作更加便利。然而,请不要使用/dev/nvme1,/dev/nvme2,...因为顺序不保证,尤其是如果你将新驱动器挂载到系统时。创建vdev_id.conf确保驱动器的序列号与别名相关联。 还记得我们讨论过在主机操作系统上不需要配置吗? /etc/zfs/vdev_id/conf不是必要的,仅在创建zpool时出于方便而使用。如果你的操作系统崩溃,你丢失了vdev_id.conf,这完全不重要。 第二步。创建ZPOOL 在本教程中,我正在创建一个RAIDZ1(RAID 5)zpool。这意味着在出现故障时有一个驱动器冗余。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡