NAS 备忘录其三:一文解读 TrueNAS Scale 如何替代群晖和部分核心功能

2024-01-16 19:29:15 15点赞 73收藏 22评论

许久不见!跟许多值友一样,笔者相当钟爱群晖系统,它提供了简洁的操作环境、稳定的服务质量、堪用的扩展空间;2022 年筹备资料服务器(NAS)时便引进了群晖系统。尽管其依旧十分可靠、任劳任怨,但时间一长,许多问题浮出水面,也让笔者不禁要为系统的可持续性着想;于是有了本次迁移过程。细节繁多,且看笔者一一道来。

零、起因

最早到 2019 年秋,笔者便开始接触群晖系统,四年间其基本满足了笔者的需求:文件服务和备份、文档同步、Docker 等等。那么为何笔者决意要脱离群晖系统这个舒适圈?主要有以下考量:

  • 系统安全性不足,新版限制较多。四年间,所用群晖系统停留于 6.2 版本;自 7.0 版本发布以来,群晖不仅逐渐收缩对 6.2 版本之支持,且在新系统中做出更多针对非授权设备的限制。非授权设备普遍有个特点,即不能随意升级系统,否则后续不可引导;得不到更新,也便增加一分受到网络攻击的风险。即使要升级,很不幸,Redpill、RR 等引导程序相继停止更新或不再公开,后续第三方维护版本是否可靠有待商榷。

  • 内核版本陈旧。尽管当前群晖系统所用内核(Linux 4.4)可以基本适配资料服务器,但它也有安全性和对未来新硬件(如十二代 Core)的兼容性问题,可能不利于日后的进一步升级。TrueNAS、Unraid 所用内核(6.1.x)要先进很多。

  • 内网传输速度有隐性限制。不知为何,通过 SMB 从服务器下载时,速度被限制于 60 MB/秒。

  • 应用版本较旧或依赖于第三方分发源。以 Docker 和 Tailscale 为例,前者因群晖停止支持,停留于 20.3 版本;后者则需从“矿神”软件库获取,随着群晖 6.2 版本日薄西山,该软件库结束支持只是时间问题。

旧的不去,新的不来;是时候回炉再造,拥抱新技术了。

另及,目前资料服务器配备为:

  • 机箱/电源/主板:惠普 800 G3 SFF

  • 处理器:Pentium G4600

  • 内存:三星 DDR4-2133 4GB x2

  • 固态硬盘联想 SL700 (128GB)

  • 普通硬盘 #1:希捷 Exos X16 (16TB)

  • 普通硬盘 #2:希捷 SkyHawk (4TB)

该服务器和《其一》所述是同一台,不同在于后续增加 4GB 内存一根。

一、理论考究

凡事做好功课,方可有备无患。笔者开始就新软硬件方案进行考究。

1.1 操作系统考究

笔者对新操作系统的要求是:安全、可靠,软硬件易于升级和维护,免于破费,支持 Docker。汇总一下较流行的、可用于资料服务器的操作系统:

  • TrueNAS Core/Scale

  • Unraid

  • Open Media Vault (0MV)

  • 群晖

  • 普通 Linux 系统

  • Windows

其中,TrueNAS Core 基于 FreeBSD 内核,不具备支持 Docker 之基础,故略过。
Unraid 需购买授权(有“开心”的办法,但如此则软件升级受阻);需通过 U 盘运行,可靠性稍逊。略过。
OMV 系统在早年是有试水经验的;功能马马虎虎,软件获取有一定阻碍,浅尝辄止。
只要给以恰当的配置和足够大的软件源,普通 Linux 也有成为资料服务器的潜力——不过笔者当下没那份闲心去重温 Arch Linux 安装之路……
至于 Windows,自身的资源开销就不小,Docker 支持则要绕些弯路(依赖 Linux 子系统,微软文档有详细说明 ,笔者对网上各种授权工具也不放心。
仅剩下 TrueNAS Scale:基于 Debian Linux 而建,稳定可靠且完全免费,对新平台和 Docker 支持较佳。

1.2 TrueNAS Scale 相关特性考究

新系统在很多特性上无疑是区别于群晖系统的——尤其是 ZFS 文件系统的支持。针对这种文件系统,笔者特意做了相关调查,结论是:ZFS 文件系统之可靠性基本与 BTRFS 相当;现有硬件无需调整即可支持新系统;可以引入 NVMe 固态盘用于引导或缓存。

具体而言,笔者通读了 Jason Rose 撰写的《TrueNAS 和 OpenZFS 入门详解》以及诸社交平台的帖子,其中和硬件相关的有:

  • 处理器需求。一般“四核”处理器可堪一用,部分需求如 ZFS 加密需更高算力。

  • 内存需求。TrueNAS 会利用闲置内存空间作为一级缓存;8 GB 是底线,16 GB 适合小型服务器;并发用户越多、文件访问频次越高,内存需求越大。考虑到家中几乎只有笔者一个用户,故现有内存无需调整。
    此外,据传 ZFS 文件系统有“每 1TB 存储需耗费 1GB 内存”之要求;经查证,该要求当且仅当存储池的区块去重(Deduplication)功能启用时成立,其余情况下,内存仅略为影响系统的读取性能,即缓存命中率。

    对于内存校验功能(ECC),TrueNAS 官方文档和《详解》称并非强制要求,但推荐使用。考虑到内存比特翻转风险极低,即使在进行全盘校验(即“数据清理”或 Scrubbing)时,发生不可逆错误的风险也微乎其微。此前在群晖系统中曾进行多次数据清理,未见错误报告;故 ECC 不是目前需要关注的特性。此外,如将来有就地升级处理器之需,如七代 Core i5,则新处理器连支持 ECC 的余地也剥夺了。

  • 二级缓存需求。选项有“二级动态切换式缓存(L2ARC)”“独立 ZFS 意向暂存(SLOG)”以及“元数据专用分区(Special Metadata VDev)”。L2ARC 对并发读取有益,SLOG 对并发写入有益,但在家庭环境中罕见并发操作;据官方文档,“元数据分区”是和存储池强绑定的,一荣俱荣,一损俱损。最终决定通过 SLOG 试水——毕竟这次硬切换要求从多地往回倾倒数据,可以验证 SLOG 是否适用于当前环境。

  • 固态硬盘需求。TrueNAS 支持从 NVMe 固态盘引导,非常可靠;系统本身占地较小,小至 16GB 的固态盘也足以承载——这里包括笔者垂涎已久的蓝厂 Optane(傲腾)固态盘。既有 120G 固态盘可用于托管 Docker 容器数据。

  • 其余硬件需求不影响新系统之运作。

对于软件,我比较关心的是如何管理各种应用。得知新系统依赖 Kubernetes 容器提供额外服务,但要连接国际开源交流平台方可获得这些容器必需的信息,且据传容器管理方式和 Docker 稍有不同;早期版本(注意,这是个伏笔)的 Scale 对 Docker 有充分支持。可以考虑绕过系统管理界面,安装 Portainer 以便统一管理诸容器。

二、前期准备和系统安装

这次迁移要求格式化文件系统,故需要清空资料服务器的一切数据。笔者准备总计 11 TB 的海量空间来备份,均为既有硬盘,分布于移动硬盘盒、联想个人云 A1 和旧资料服务器(蜗牛星际)。其中文档、照片、音乐等重要资料需有两个副本(总大小不足 1 TB),其余保留单副本。既有 Docker 容器数据一律遗弃(当然可以保留,不过笔者希望另起炉灶)。

如上文所述,硬件需求基本等同于群晖系统;此次出于尝鲜和寻求耐久度高的二级缓存之需,购置 Optane 固态盘三根,作价 38.7 元。此外准备了佳翼牌 PCIe—M.2 转接卡两片,成本 30.8 元。主机配备四个 PCIe 槽位和两处 M.2 槽位(分别供无线网卡和固态盘使用),故三根 Optane 可一并安装。

Optane 固态盘全家福Optane 固态盘全家福

服务器支持从 NVMe 固态盘引导,故安装 TrueNAS 至其中一根 Optane。系统版本为当前最新的 23.10.1。硬盘均格式化为 ZFS;希捷 16 TB 硬盘划入主存储池,另两根 Optane 分别划为主存储池 SLOG应用级二级缓存池(实为普通存储池,分配数据集给 Docker 容器使用);启用 SMB 服务,向主存储池恢复数据。恢复完毕后,取回希捷 4TB 硬盘并格式化,作为热备份存储池

格式化后,可见主存储池之可用容量为 14.42 TB,较群晖系统中的 13.97 TB 增加良多——增量近乎 500 GB。但是,热备份池的容量仅增加 0.02 TB。

三、调试和验证

基本存储服务就绪,让我们为它增添更多可能性!

3.1 SLOG 在实际环境中的可行性

从监测数据可见,在持续两日的恢复资料过程中,SLOG 的吞吐量接近于零,证明其对经 SMB 共享产生的请求没有响应。数日后取消 SLOG,改为将这根 Optane 划入缓存池,进行后续测试。

自 1 月 5 日起 SLOG 所属硬盘的吞吐情况自 1 月 5 日起 SLOG 所属硬盘的吞吐情况

3.2 数据集/目录访问权限

数据集/目录权限的设置难度明显高于群晖系统。一般设置下,选项有目录所有人、所属用户组,以及所有人、用户组和其他用户的访问权限。同时有高级访问控制(ACL),可以认为 ACL 功能与群晖系统的权限管理基本一致。比较简明的做法是,将根数据集以下一切数据集/目录的所有者一律改为可公开访问的非 root 用户(组),且赋予其读写权限。

3.3 Docker 可用性

系统自备的 Charts 应用服务不尽人意。一方面,Charts 列表要从国际开源交流平台下载,不可能直连,“镜像”更新频率也不高;另一方面,“Custom App”在唯一一个 Charts 列表不可用的情况下根本没有入口,即使有入口,设置也让人摸不着头脑。同时,Charts 可用的软件远不及 Docker 要多。

正当笔者试图以命令行操作 Docker 时,出现意想不到的情况:Docker 命令根本不存在!这意味着最新版 Scale 23.10.1 根本没有预装 Docker!试图利用 apt 时,又发现尽管 Apt 命令存在,却不能提权使用;换言之,iXsystems 故意取消了 apt 的执行权限!通过 chmod +x /usr/bin/apt 给予权限后,再来搜索官方仓库,确有提供 Docker,虽版本较早(20.10.24),但聊胜于无,遂安装。(引入普通 Debian 软件库的话,虽可加速下载,但笔者担心有破坏某些定制组件的可能,故未采用。)

中文社区就此问题有零星讨论,这里找到了一篇知乎专栏,其介绍通过 Jailmaker 引入 Docker,供值友参考。

参考网上教程,在命令行下部署 Portainer,此处不复赘述。

3.4 Docker 应用安装

登录 Portainer 部署其它应用。笔者所需应用有:

  • 媒体管理:Jellyfin、Plex

  • 私有 Git 服务:Gitea

  • 文件同步:NextCloud + MariaDB、Syncthing

  • 离线下载:qBittorrent

  • Docker 容器管理:Portainer

  • 内网穿透:Tailscale

  • 文件在线管理:File Browser

不同于群晖,Portainer 界面不会提供 Docker Hub 等仓库的搜索结果,需要手打镜像名称(分支)来引入(因此,需要另辟蹊径来获得镜像的具体地址,当然下面截图有)。但创建容器时,Portainer 提供的选项远远丰富于群晖:例如,GPU 等硬件设备可以单独指定,毋须给予高权限即可调用。

群晖的文件同步功能非常实用;为替代之,选择 Nextcloud 及其依赖的 MySQL (MariaDB) 并安装。MariaDB 需要预先指定以下设置:

  • 环境变量:MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD / MYSQL_ROOT_PASSWORD。前三者是初始数据库名称和用户,供 Nextcloud 使用;后者是数据库最高权限密码。

  • 命令行参数:--transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW

  • 映射目录 /var/lib/mysql,存储数据库。

  • 分支:lts。无需跟进最新版本 latest

  • 主机名称(Hostname):mariadb。

二者被划入独立的内联网络。Nextcloud 预先指定的设置有:

  • 环境变量:MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD / MYSQL_HOST 。必须和 MariaDB 的设置一致。后者填写数据库主机名称“mariadb”。

  • 映射目录 /var/www/html,存储网页、凭证、同步文件夹等。

Gitea、Jellyfin 等应用设置与在群晖系统上基本无异。其中,Jellyfin 和 Plex 单独指定 GPU /dev/dri/renderD128 以便转码,无需再赋予高权限。

如果在容器的环境变量中指定用户(PUID)和用户组(PGID),需要注意被映射的数据集/目录所有者要与设置一致,且有读写权限。这两项设置并非强制;笔者在 Jellyfin 和 Plex 的设置当中并未指定用户(组)。在群晖系统,管理员帐户被赋予一切共享文件夹的读写权限,平时仅指定管理员帐户,故这个问题并不明显。

应用部署完毕应用部署完毕

关于 Jellyfin 运行表现:

由于早前放弃了刮削好的数据库,这回要重新刮削。将刮削所需接口对应的 IP 写入主机系统的 Hosts,重启容器,刮削基本正常。

需人工检索 IP 地址的有:

api.themoviedb.org
api.thetvdb.com
image.tmdb.org

转码表现正常,如下图所示,转码某动画片时有 75 fps 的速率。

转码情况转码情况

同时观察到转码产生的临时文件被均匀写入缓存池的两根 Optane。现在缓存池有约 21.3 GB 空间,以转码目标码率为 10 Mbps 计算,可存储约 12 小时的视频,那么可应付至少 4 部电影的转码视频流——堪称实用。

3.5 热备份和容灾设置

数据安全方面,TrueNAS 管理界面提供多种方案:数据清理、云同步、定期快照、Rsync 同步、复制和硬盘运行参数(SMART)检查,和群晖系统基本一致。云同步支持较有限,仅有国外云服务商接口和 SFTP、WebDAV 等通用协议可用。联想个人云支持 WebDAV 挂载。最终作出以下安排:

  • 数据清理:所有存储池每月一次。

  • 云同步:文档、照片同步至联想个人云,每日一次。

  • 快照:Docker 容器数据和重要资料每日一次;前者保留两日,后者保留两周。

  • Rsync 同步:无。

  • 复制:Docker 容器数据和重要资料从固态盘、主存储池复制到热备份池,每日一次。群晖系统中,与“复制”相似的做法是设置一个定期运行 Rsync 的任务。

  • 硬盘运行参数检查:短检查每两周一次,长检查每四个月一次。

3.6 不间断电源支持

去年“双十一”,笔者购得硕天牌不间断电源(UPS)UT650EGC 一台,群晖对其支持良好;网上资料称该品牌同样受 TrueNAS 支持。在“服务 - UPS”设置中选用 “usbhid-ups” 为驱动(型号任意),随后启动 UPS 服务即可。

四、评价

TrueNAS 仪表板TrueNAS 仪表板

作为推出两年有余的新分支,TrueNAS Scale 在其最基本的用途——网络存储服务上是非常称职的;阵列冗余、数据保护、外地备份、SSH 公钥鉴权,应有尽有。但在其余方面,该系统似乎不大上心:例如在管理界面,“仪表板”上可见网络实时吞吐量是实际值的 8 倍(或为单位运用错误),以及线程由“零”起计;Charts 和应用系统在大陆的可用性存疑,而 Docker 不再随新版系统预装;apt 包管理命令被故意锁定;自带功能远不及群晖丰富;等等。尽管如此,其自由度仍远超群晖系统,免授权亦使其不复有后顾之忧。 行百里者半九十;望再接再厉。

这也是首次尝试将多个 Optane 固态硬盘应用于资料服务器上。Optane 因耐久度高,用于缓存是非常合适的,但也需因地制宜;家用环境中鲜见并发访问和 iSCSI 这类并发应用,因此作为存储池的二级缓存作用有限;而作为独立的缓存池时,实用性更强,但也受制于容量,仅部分应用可从中受益。如有大缓存之需,应考虑采用企业级 NAND 固态盘产品。

有任何疑问可以留言,笔者会尽量答疑解惑~

展开 收起
22评论

  • 精彩
  • 最新
  • 目前在PVE下安装了TrueNAS 24.10-BETA.1 内置了Docker SMB读写200M+(2.5G网卡+20G内存缓冲,没上L2ARC),网卡吞吐量单位是Mb而不是MB(类似于宽带200兆实际下载25M)。总的来说比群晖7稳定,之前在PVE用arpl引导7.1/7.2系统会经常无故重启,折腾了很久下定决心上TrueNAS才发现真的香 [吃饭]

    校验提示文案

    提交
  • 开同步写的情况下,独立SSD SLOG对写入性能有极大提升,可以保留。

    校验提示文案

    提交
  • 我想知道应用部分怎么连上的github,我卡在这了

    校验提示文案

    提交
    需要些非常规上网手段。这个办法可以完全绕过 Catalog 下载和国际开源交流平台,当然风险自负,毕竟不受官方支持了。

    校验提示文案

    提交
    收起所有回复
  • 缓存盘用来干嘛的?

    校验提示文案

    提交
    给机械盘加速。

    校验提示文案

    提交
    目前用于托管系统数据集和为 Docker 应用提供缓存。将来考虑迁移 Docker 镜像目录至此,以便升级系统。

    校验提示文案

    提交
    收起所有回复
  • 值得买只适合保姆及文章。这篇文章看得懂的人不会看,会看的人都看不懂。

    校验提示文案

    提交
  • 写的非常好 看完想前半段想安装,看完后半段又不想安装了 还是继续黑群晖 应用在pve里用docker和lxc解决

    校验提示文案

    提交
    不想折腾就用黑群晖,但我现在又想折腾了,所以我也装了turenas

    校验提示文案

    提交
    收起所有回复
  • TRUENAS中文教程不好找,很多功能整不明白,我都想换unraid试试了。

    校验提示文案

    提交
    用 unraid 建议选个好 U盘,闪迪不耐用。

    校验提示文案

    提交
    装了个unraid,连不上应用商店 [喜极而泣]

    校验提示文案

    提交
    收起所有回复
  • smb 60m这个限制从何而来?

    校验提示文案

    提交
  • 不错不错,谢谢。

    校验提示文案

    提交
  • truenas升级系统版本也没那么可靠,注意安全!

    校验提示文案

    提交
  • 非常不错的文章,干货很多,有自己的思考与经验,有平时的数据测试和功能的验证讲解,受益很多

    校验提示文案

    提交
  • 感谢分享,最近入了浪潮服务器做 allinone,很有参考价值。

    校验提示文案

    提交
  • 想问一下,用syncthing同步的东西,不会自动同步到nextcloud的文件目录中,是需要每次都手动扫描吗?

    校验提示文案

    提交
  • 现在出飞牛了,可以试试

    校验提示文案

    提交
  • nas系统只用来管理硬盘,各种应用全靠pve下一个linux服务器实现用啥系统好点呢

    校验提示文案

    提交
  • 支持作者分享,加油。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
73
扫一下,分享更方便,购买更轻松