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

news2024/10/6 23:20:17

首先声明一下,我用的版本是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.coloradmin.cn/o/1855010.html

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

相关文章

DC/AC电源模块:提高太阳能发电系统的效率和稳定性

BOSHIDA DC/AC电源模块:提高太阳能发电系统的效率和稳定性 DC/AC电源模块是太阳能发电系统中的一个重要组成部分,其作用是将太阳能转化为交流电以供家庭或工业使用。它可以提高太阳能发电系统的效率和稳定性,使得太阳能发电系统更加可靠和持…

Pikachu靶场--CRSF

借鉴参考 CSRF跨站请求伪造(CTF教程,Web安全渗透入门)_bilibili pikachu靶场CSRF之TOKEN绕过_csrf token绕过的原理-CSDN博客 CSRF(get) 发现需要登录 查看提示,获取username和password 选择一个用户进行登录 选择修改个人信息 …

Applied Spatial Statistics(七):Python 中的空间回归

Applied Spatial Statistics(七):Python 中的空间回归 本笔记本演示了如何使用 pysal 的 spreg 库拟合空间滞后模型和空间误差模型。 OLS空间误差模型空间滞后模型三种模型的比较探索滞后模型中的直接和间接影响 import numpy as np impor…

Vue.js 自定义组件的三种用法

1.创建项目 创建项目,你可以参考我以前的博文,这里省略了 项目的目录结构如下: 接着,我们在 src/components 目录下创建一个自定义的组件 SplashHello.vue,示例代码如下所示: <template><div><p>{{ title }}</p><p>{{ message }}</p&…

深入探索 Nuxt3 Composables:掌握目录架构与内置API的高效应用

title: 深入探索 Nuxt3 Composables&#xff1a;掌握目录架构与内置API的高效应用 date: 2024/6/23 updated: 2024/6/23 author: cmdragon excerpt: 摘要&#xff1a;“本文深入探讨了Nuxt3 Composables&#xff0c;重点介绍了其目录架构和内置API的高效应用。通过学习本文&…

Leetcode 2713. 矩阵中严格递增的单元格数(DFS DP)

Leetcode 2713. 矩阵中严格递增的单元格数 DFS 容易想到&#xff0c;枚举每个点作为起点&#xff0c;向同行同列的可跳跃点dfs&#xff0c;维护全局变量记录可达的最远距离 超时&#xff0c;通过样例193 / 566 class Solution {int res 0;public void dfs(int[][] mat, in…

网络编程之XDP、TC和IO_URING以及DPDK

一、网络编程常见的技术 在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了&#xff0c;但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢&#xff1f;其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断…

视频格式怎么转换?9 个免费视频转换工具

前 9 款免费视频转换器有哪些&#xff1f;在此视频转换器评论中&#xff0c;我们收集了一些有用的提示并列出了顶级免费视频转换器软件&#xff0c;还找出了适合所有级别&#xff08;从初学者到专家&#xff09;的最佳免费视频转换器。 1. Geekersoft免费在线视频转换 最好的免…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

vue3源码(五)ref、toRef、toRefs、proxyRefs

1.ref 功能 ref与reactive功能类似,都是将数据变为响应式&#xff0c;ref通常用来定义基本类型数据&#xff0c;如字符串、数字、布尔值等。而reactive用来定义对象&#xff08;或数组&#xff09;类型数据。虽然ref也可以用来定义对象或数组类型的数据&#xff0c;但内部会通…

Rxjava2最全面的解析

说到区别&#xff0c;可能有的小伙伴会问&#xff0c;我没看过rxjava1。可以直接看rxjava2么。个人觉得不必要&#xff0c;因为 rxjava2.x 是按照 Reactive-Streams specification 规范完全的重写的&#xff0c;完全独立于 rxjava1.x 而存在&#xff0c;它改变了以往 rxjava1的…

Springboot 项目启动时扫描所有枚举并存入缓存(redis)

为什么这么做? 为了springboot 注解属性转换字典方便一点(使用缓存的方式在Springboot 启动时获取字典数据) 在启动时会扫描com.vehicle.manager.core.enumerate包下的所有枚举(包括类中的内部枚举),并取出对应属性以json的方式存入redis 目录结构如下: RedisUtil可以在Red…

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加…

【数据结构与算法】图论 详解

何为完全图、稀疏图、稠密图。 完全图&#xff1a;完全图是一种简单的无向图&#xff0c;其中每对不同的顶点之间都恰好有一条边。对于有n个顶点的完全图&#xff0c;它包含n(n-1)/2条边。在有向图中&#xff0c;如果任意两个顶点之间都存在方向相反的两条边&#xff0c;包含n(…

汇编快速入门

一.基础知识 1.数据类型 DB&#xff08;Define Byte&#xff0c;字节类型 占位8位bit 1字节&#xff09; 范围&#xff1a;DB可以用来定义&#xff08;无符号、有符号&#xff09;整数&#xff08;包含二、十、十六进制&#xff09;和字符 语法&#xff1a;a DB 数据个数…

C++基础知识——引用

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

热电阻温度计的测量电路

热电阻温度计的测量电路&#xff0c;为达到高精度测量&#xff0c;通常会采用电桥测量原理&#xff0c;并结合适当的热电阻类型和连接方式。 惠斯通电桥是用于测量一组电阻式元件阻值变化的电路。该电路具有两个并联电阻支路&#xff0c;充当激励电压 VEXCITATION 的分压器。每…

C++ 教程 - 04 类的使用

文章目录 类的定义类定义案例构造函数 类的定义 C 在 C 语言的基础上增加面向对象编程&#xff0c;类是用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;封装了数据和函数。类可以被看作是一种模板&#xff0c;可以用来创建具有相同属性和行为的多个对象…

LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理

LLM技术全景图&#xff1a;技术人必备的技术指南&#xff0c;一张图带你掌握从基础设施到AI应用的全面梳理 LLM 技术图谱&#xff08;LLM Tech Map&#xff09;是将 LLM 相关技术进行系统化和图形化的呈现&#xff0c;此图谱主要特点是“专注于技术人视角”&#xff0c;不求从…

【吊打面试官系列-Mysql面试题】视图有哪些优点?

大家好&#xff0c;我是锋哥。今天分享关于 【视图有哪些优点&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 视图有哪些优点&#xff1f; 答&#xff1a; (1) 视图能够简化用户的操作&#xff1b; (2) 视图使用户能以多种角度看待同一数据&#xff1b; (3) 视…