构建家庭NAS之二:TrueNAS Scale规划、安装与配置

首先声明一下,我用的版本是TrueNAS SCALE 24.04.1.1(目前的最新版本),其它版本的界面和操作方式或有不同。我安装使用过程中网上的一些教程里的操作方式和这个版本不一样,造成了一些困扰。

TrueNAS SCALE的最低硬件需求:

  • 双核64位CPU
  • 8 GB内存(推荐16GB)
  • 16 GB SSD 系统盘
  • 2个相同容量的数据盘(其实1个盘也可以,后面细讲)
  • 不需要硬件RAID卡

存储规划

TrueNAS SCALE对家庭用户不太友好的地方就是它的存储设计。家庭用户很多时候希望用一块硬盘快速跑起来,后续再根据需要逐步增加硬盘。然而官方文档里提到最低配置是1块系统盘+2块数据盘,也就是最少也要3块盘,这个最低要求其实是相当高。不过经过一番学习和尝试之后,我发现基本上用一块硬盘(的费用)也是可以用起来的,只是没有数据冗余和保护。不过后期也可以方便地转换为镜像方式,从而提供额外的数据保护。

系统盘

首先就是系统盘,官方要求必须是一块单独的SSD,上面不能存用户数据。这个要求对于企业不是大事,但对于普通玩家不仅意味着要多花一笔钱,还要额外占用一个宝贵的硬盘接口。想想心里就不爽,有没有其它办法呢?

后来发现一个接近完美的解决方案:Intel的傲腾M10 SSD 16GB,海鲜市场上只要十几块钱包邮。说“接近”完美,是因为这个方案虽然花钱很少,但是仍然需要占用一个M.2接口。
在这里插入图片描述

额外的补充:

  • 购买的时候也考虑过海鲜市场的质量和可靠性问题,后来觉得一是系统盘坏了恢复起来不难,二是价格很便宜,翻车了损失也不大。读者可以自行斟酌。
  • 不需要考虑那些32G/64G或者更高容量的傲腾,因为价格贵了很多,而且多出来的容量装系统也用不上。
  • 从第 12 代和第 13 代开始,英特尔处理器将不再支持傲腾技术。虽然我用的是12代处理器,但这个消息对我其实没有影响,因为上面写的停止支持是指把傲腾作为机械硬盘的加速缓存。把它作为独立的SSD硬盘使用是没有问题的。
  • 因为针对需要一块单独的系统盘这个问题吐槽的用户太多,TrueNAS官方专门做了一个回应。意思就是这才是我们(企业)的应用场景,我们要把宝贵的开发资源用在服务客户上,巴拉巴拉,所以请不要再提这个需求给我们了。如果你觉得不爽,欢迎你选择其它更合适的系统或自己开发一个。详情见:
    I have to waste an entire drive just for booting?
    实际上我个人是挺理解官方立场的,毕竟人家不是专门做慈善,也要挣钱养家。感谢iXsystems开发和分享了这么好的产品。
  • 个别高手会从数据硬盘里划出一个分区来安装系统。这个方案在技术上可以操作,但是后续故障恢复等比较麻烦,需要对Linux非常了解。所以普通用户还是算了吧。好奇心强的读者可以参考这篇文章:
    Install TrueNAS SCALE on a partition instead of the full disk
  • 如果硬盘接口比较少的话,把系统装在U盘上也是一个选项。有兴趣的读者可以试试。

数据盘

TrueNAS的存储是基于ZFS的。简单来说,ZFS是一个超大容量(个人用户基本用不上)、数据高度可靠的文件系统。RAIDZ是基于ZFS的RAID实现,和传统的RAID很类似,但也有一些自己的特点。比如RAIDZ的块大小是可变的。希望对ZFS/RAIDZ有更多了解的读者请参考:

  • 初学者指南:ZFS 是什么,为什么要使用 ZFS?
  • What is RAIDZ

ZFS的一些特性很酷,但也有一些不那么讨人喜欢的地方。最典型的就是至少需要两块盘!

下面是RAIDZ 级别比较表:

-StripMirrorRAIDZ1RAIDZ2RAIDZ3Strip+Mirror
最小磁盘数量122454
允许坏掉的磁盘数量N-1123N个磁盘组成的Mirror中的 (N-1) 个磁盘
磁盘空间开销(N-1)/N123(N-1)*P 基于N个磁盘组成Mirror再组成P个Strip
读取速度
写入速度一般一般
硬件成本便宜最高很高很高最高

其实上面这么复杂的表格可以简化成下面几种场景:

  • 只有1个硬盘:只能选strip。也就是说只有一个数据盘也是可以用的,和前面提到的官方最低推荐配置有点不同。预算紧张的用户可以用strip起步,后期有钱了买一个相同大小的盘升级为mirror。所以前面“至少需要2块盘”的说法更准确一点的话可以改成:如果要发挥ZFS的全部特性,至少需要2块盘。
  • 有2个相同大小的硬盘:追求性能的用户组strip;需要可靠性的用户组mirror。
  • 有4个相同大小的硬盘:推荐strip+mirror。
  • 有更多硬盘的用户:土豪你想怎么玩都可以。
  • 最后:如果我有2个不同容量的硬盘怎么办?或者组成2个单独的pool(没有数据冗余),或者卖掉小容量硬盘再买个大的组成镜像。

我自己因为有2个4TB+2个2TB,所以组了两个mirror。

系统安装

TrueNAS SCALE的安装过程简单明了。我这里不会手把手地写每个步骤,只是把要点简单说一下:

  • 下载官方的镜像文件
  • 用rufus(或其它工具)把下载的镜像文件烧录到一个U盘上,烧录的时候不要选ISO模式,选DD模式。
  • 用烧录好的U盘启动,按照提示一步一步操作就好,基本只需要按回车。需要详细步骤和截图的读者可以参考这篇文章:
    How to Get Started with TrueNAS Scale

配置存储

ZFS的基本概念

ZFS存储的基本概念有如下4个。注意这里只说我自己简化后的理解,实际ZFS比这个复杂。

  • 磁盘(disk):这个就不用多做解释了。

  • 虚拟设备(vdev):可以理解成多个磁盘组成的RAIDZ设备。升级一个vdev要把vdev里所有磁盘一起升级(换掉)。当然也有例外,后面再说。

  • 池(pool):多个虚拟设备组成一个池,我理解主要是把较小而便于管理的vdev组成更大的存储。为什么说便于管理呢,如果整个NAS只有一个大的vdev的话,要升级磁盘容量就需要把所有磁盘全部换掉,这是很麻烦而且很费钱的动作。有多个vdev的话,就可以按照vdev一个一个地升级。组成池的虚拟设备的RAIDZ模式必须相同,不能把一个条带化的虚拟设备(striped vdev)和一个镜像的虚拟设备(mirrored vdev)组成一个池。
    注意:
    在池这个层面是没有办法再组成RAID,或者可以理解成ZFS组成池的时候只有一种RAID方式,那就是条带化(strip)。因此,一个池的vdev数量越多,通常读写性能越好。
    ZFS写入的基本逻辑是尝试在同一时间点把池里所有vdev的空间用完。这种算法导致的一个后果就是如果各vdev的容量不相同,分布在各vdev上的IO就会不均匀,导致系统性能很难保持一致。所以最好还是让一个池里面各vdev的大小也相同。

  • 数据集(dataset):可以理解成UNIX/Linux里的文件系统或windows里的盘符,把pool划分成dataset的目的在于设置不同的用途和存储参数,比如块的大小,是否压缩等。另外在设置文件共享的时候,只能共享一个dataset,不能共享pool。

可以借用trueNAS网站上的一张图来说明这几个概念:
Storage Hierarchy

明白上面这几个概念之后,再去配置存储就会比较直观明了。

想要更多了解ZFS的读者可以参考下面的文章:

  • TrueNAS Storage Primer on ZFS for Data Storage Professionals
  • Choosing the Right ZFS Pool Layout
  • ZFS Storage Pool Layout White Paper

配置存储池和数据集

这部分我也不打算一步一步地讲。可以参考下列资料:

  • 【干货】小白快速上手TrueNAS!第二期:基础设置+存储池建立+快照建立
  • 官方文档:Creating Pools

值得单独说一下的是:

  • ZFS的pool在系统间可以很方便地迁移,如果在一台机器上创建了一个pool,可以把组成这个pool的磁盘卸下来安装到另外一台机器上,再导入(import)这个pool,你的数据就全部回来了。和单个磁盘的迁移几乎一样,不需要处理配置信息这些比较麻烦的事情。
  • 这个特性带来的一个好处是你的NAS装好以后,可以放心地重装系统而不用担心数据丢失。比如我在测试速度的时候就把系统从TrueNAS改成Ubuntu,再把在TrueNAS中创建的pool导入到Ubuntu中进行测试,非常方便。

关于存储的一些碎碎念

因为NAS最重要的功能就是数据存储和数据安全,所以对这部分就多说几句。不感兴趣或没时间的读者可以直接跳过。

  • 可以只用一个硬盘玩TrueNAS吗?答案是“可以”。可以像我一样找一个傲腾做系统盘,或者把系统装在U盘上。数据盘只用一个盘,使用条带模式。后期方便的时候可以再买一块盘升级为镜像模式。升级镜像模式的操作很简单,原来的数据也不会损坏。
  • 只有一块数据盘又想实现数据可靠性怎么办?可以用一个外置移动硬盘备份重要文件。或者把文件从NAS备份到网盘上。后面这个方法也是TrueNAS SCALE官方推荐方案(之一),我有时间准备试一下。
  • 同一个虚拟设备(vdev)是否可以混用不同容量的硬盘?答案其实是“可以”,官方说不行,但其实只是不推荐。因为这么做的话,系统会按照这个vdev里所有磁盘里面容量最小的那个盘来使用这一组盘。比如你把一个1TB和一个2TB组成mirror,系统会把它们当成两个1TB的盘,组完后的实际可用容量只有1TB。
    这个特性其实可以用在容量升级场景里面。比如我有一个2TBx2的镜像vdev,我想升级为4TBx2,但是硬盘接口有限,不能同时安装新旧4块硬盘,这时可以先拆下一块2TB硬盘,把一块4TB装上去,然后把这个4T的盘加入镜像vdev,让系统进行数据恢复。恢复完成之后系统有一个2T+4T的镜像vdev(实际可用容量2TB)。然后再把另外一个4TB替换2TB,再次恢复。第二次恢复完成后把整个vdev做一次expand操作。这样就可以在有限的接口情况下把原来的磁盘组进行容量升级,并且不需要额外的数据备份。
  • 一个池里面是否可以混用不同容量的vdev。答案是“可以”。但建议各vdev的RAID模式保持一致。
  • 系统盘要不要做镜像?我的选择是不要,理由是对我来说没有必要。系统坏了可以重装,重装之后把原来的ZFS池导入进来也很方便。
  • 像slog/ZIL这样的高级功能有什么用,要不要配一个?slog我的理解是用来降低写入延迟的,一般用在高并发的数据库存储这样的场景,家用的文件共享和备份用不上。
  • L2ARC有没有必要?这个是用SSD硬盘作为缓存来提高读取速度的,通常是有部分数据需要经常访问的场景下用到。家用也基本没必要。如果反复读取的数据不是很大,可以增加内存,把这些数据缓存到内存里。如果这部分数据大到内存放不下,设置L2ARC才有意义。

设置用户和权限

TrueNAS的权限管理其实和Linux是一样的(似乎是废话)。我的做法是这样的:

  • 为家庭成员建一个组(group),比如"myfamily"。
  • 每个家庭成员建一个用户,用户组(Primary Group)设置为上面建立的"myfamily"。创建用户的时候,如果需要让用户通过SSH远程登录,就把“允许SSH密码登录”勾选上。

设置共享和权限

这部分也比较直观,直接按照界面的提示来就可以了,也可以参考上面那个司波图的视频。

需要注意的是:共享的路径必须要选池下面创建的数据集,不能直接共享池。比如,我的池名称叫“test”,这个池会自动挂载到系统路径/mnt/test下面。我在池里创建了一个叫做“downloads”的数据集,这样在共享的时候,就需要选择/mnt/test/downloads作为共享路径,不能选择/mnt/test。
在这里插入图片描述

小结

安装和配置TrueNAS SCALE的时候,最重要的是规划存储方案。对家庭用户来说,如果追求性能、不怕数据丢失、那就用条带化(strip)方案,但对于大多数人来说,镜像才是最实用的。

家庭用户完全可以用一块数据盘起步,后期根据需要添加硬盘。操作也比较简单。当然也有一些限制,比如一个vdev里的所有磁盘容量要保持一致,要替换或者升级最好一起做,不然会有容量的浪费。

接下来,准备结合自己的下载需求,说一下如何使用在TrueNAS SCALE上使用docker。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试八股之什么是mybatis流式查询

什么是mybatis流式查询 Mybatis流式查询是一种处理大量数据的有效方法,它允许你以低内存消耗的方式来处理查询结果。传统的查询操作会一次性将所有数据加载到内存中,如果数据量非常大,可能会导致OutOfMemoryError(OOM&#xff09…

代码随想三刷回溯篇2

代码随想三刷回溯篇2 39. 组合总和题目代码40. 组合总和 II题目代码131. 分割回文串题目代码93. 复原 IP 地址题目代码78. 子集题目代码39. 组合总和 题目 链接 代码 class Solution {public List<List<Integer>> combinationSum(int[] candidates

基于matlab的SVR回归预测

1 原理 SVR&#xff08;Support Vector Regression&#xff09;回归预测原理&#xff0c;基于支持向量机&#xff08;SVM&#xff09;的回归分支&#xff0c;其核心思想是通过寻找一个最优的超平面来进行回归预测&#xff0c;并处理非线性回归问题。以下是SVR回归预测原理的系统…

ViT:4 Pruning

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

QT事件处理系统之四:自定义事件的注册及拦截、发送

1、自定义事件的注册 自定义事件对象 自定义的事件类必须继承自QEvent,并且无需指定父类 自定义的事件类必须拥有全局唯一的Type值,使用QEvent::User+value即可。 class MyEvent : public QEvent {public:MyEvent();QString getStr() {

文华财经T8自动化交易程序策略模型指标公式源码

文华财经T8自动化交易程序策略模型指标公式源码&#xff1a; //定义变量 //资金管理与仓位控制 8CS:INITMONEY;//初始资金 8QY:MONEYTOT;//实际权益 8QY1:MIN(MA(8QY,5*R),MA(8QY,2*R)); FXBL:N1; DBKS:8QY1*N1;//计算单笔允许亏损额度 BZDKS:MAX(AA-BB,N*1T)*UNIT; SZDKS:MAX…

北方银行 - HDFS 现代化快速案例研究

故事很重要&#xff0c;客户故事是最好的。他们提供令人瞠目结舌的统计数据或克服巨大障碍的那些是获得最佳头条新闻的那些。它们也是最难发表的。我们知道&#xff0c;因为我们将与您分享一些我们正在孜孜不倦地努力出版的内容 - 但现在它们将保持匿名。话虽如此&#xff0c;如…

爬取同样内容,xpath方法会比bs4要慢很多吗?

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 红豆生南国&#xff0c;春来发几枝。 大家好&#xff0c;我是Python进阶者。 一、前言 前几天在Python白银交流群【沐子山树】问了一个Python网络爬虫的…

ARM32开发--WDGT看门狗

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 什么是看门狗 ARM中的看门狗 独立看门狗定时器 窗口看门狗定时器 独立看门狗FWDGT 初始化配置 喂狗 完整代码 窗口看门狗WWDGT 初始化配置 喂狗 完整代码 注意 总结 前言 嵌入式系统在如今的科技发…

JSON序列化与反序列化

目录 JSON序列化 查看JSON文件&#xff0c;设置数据模板类 ​编辑 Newtonsoft.Json下载 运行结果展示 JSON反序列化 序列化是将对象或数据结构转换为可以存储或传输的格式&#xff08;如JSON字符串&#xff09;的过程&#xff0c;而反序列化则是将这个格式的数据转换回原…

Web渗透:文件上传-后端过滤

在上一篇文件上传的内容中笔者阐述了文件上传漏洞产生的相关原理以及使用了一个pikachu靶场的例子进行演示&#xff0c;在这个例子中涉及到了前端代码对于文件上传漏洞的相关防护&#xff0c;以及站在攻击者的角度我们要如何绕过前端的防护成功进行攻击&#xff1b;但是事实上对…

Linux下手动查杀木马与Rootkit的实战指南

模拟木马程序的自动运行 黑客可以通过多种方式让木马程序自动运行&#xff0c;包括&#xff1a; 计划任务 (crontab)&#xff1a;通过设置定时任务来周期性地执行木马脚本。开机启动&#xff1a;在系统的启动脚本中添加木马程序&#xff0c;确保系统启动时木马也随之运行。替…

力扣-2663

题目 如果一个字符串满足以下条件&#xff0c;则称其为 美丽字符串 &#xff1a; 它由英语小写字母表的前 k 个字母组成。它不包含任何长度为 2 或更长的回文子字符串。 给你一个长度为 n 的美丽字符串 s 和一个正整数 k 。 请你找出并返回一个长度为 n 的美丽字符串&#…

JAVA+Netty简单实现Nginx反向代理网关功能【设计实践】

背景 本文实现一个类似于nginx或gateway的反向代理网关&#xff0c;实现思路是访客通过网络请求反向代理服务&#xff0c;代理服务连接到真实服务&#xff0c;维护访客和真实服务的数据交互。 这个实现和之前的内网穿透项目思路相似&#xff0c;只不过内网穿透是由客户端主动…

用python写一个AI Agent对接企业微信上下游协同的案例

要实现一个AI Agent对接企业微信上下游协同&#xff0c;我们可以使用Python编写一个企业微信机器人&#xff0c;用于接收和处理来自企业微信的消息。在此示例中&#xff0c;我们将使用wechatpy库来实现企业微信机器人&#xff0c;并使用requests库实现与上下游系统的通信。 首…

很冷门但真的有趣的IOS应用

Tuesday Tuesday纪念日小组件是一款功能丰富的倒数日和桌面小组件工具APP。此外&#xff0c;Tuesday软件还具有超萌小清新的风格&#xff0c;界面设计清新可爱&#xff0c;适合各种场景使用。用户可以通过小组件实现各种趣味功能&#xff0c;满足不同心情需求。 SideNotes Si…

查看显卡使用情况

查看 NVIDIA 显卡的使用情况&#xff0c;你可以使用命令行工具 nvidia-smi。这是一个非常有用的命令&#xff0c;可以提供关于你的 NVIDIA GPU 的详细信息&#xff0c;包括 GPU 的使用率、显存使用情况、GPU 时钟频率、电源使用情况、温度以及正在运行的进程等。 以下是一些基…

吴恩达机器学习 第三课 week2 推荐算法(上)

目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 &#xff08;1&#xff09;了解推荐算法 &#xff08;2&#xff09;掌握协同过滤推荐算法&#xff08;Collabo…

2025秋招NLP算法面试真题(一)-史上最全Transformer面试题

史上最全Transformer面试题 Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09;Transformer为什么Q和K使用不同的权重矩阵生成&#xff0c;为何不能使用同一个值进行自身的点乘&#xff1f; &#xff08;注意和第一个问题的区别&#…

查找和排序

目录 一、查找 1.1查找的基本概念 1.2顺序查找 1.3折半查找&#xff08;二分查找&#xff09; 1.4散列表的查找 1.4.1基本概念 1.4.2散列函数的构造方法 1.4.3解决冲突的方法 二、排序 2.1排序的基本概念 2.2插入排序 2.2.1直接插入排序&#xff1a; 2.2.2希尔排序…