一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)
一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)
本文将简要简要介绍本人自建NAS的完整配置,截至发文此NAS已经连续良好运行一年,应当说具有良好的稳定性。
本文所述配置包含洋垃圾成分,在仿照本文搭建系统前,请确保自己已掌握相关知识和具备足够的问题解决能力
0. 概论
本文将按照以下主题逐一介绍整个搭建方案:
- 硬件选择和组装
- 操作系统的选择
- 网盘的挂载与管理程序
- 将网盘服务穿透到公网
- 其他注意事项
1. 硬件选择和组装
a. CPU
基于稳定性和性价比考虑,自组NAS最好选择服务器CPU,比较合理的选择是英特尔E3平台和E5平台的服务器(洋垃圾)CPU。服务器CPU具有比普通消费级CPU更好的稳定性和设计冗余,同时支持ECC内存,保证电脑能够长时间开机运行。
E3 CPU更便宜,同时兼容英特尔4代CPU的主板,但是生产时间比较早,只支持一些较早的硬件和协议。E3 CPU一般都是4核8线程,只支持ddr3内存,最高容量支持到32G,部分型号有核显(核显可以用在流媒体解码加速上),功耗在20w到85w不等。
E5 CPU更新一些,核心数也有了显著提升,支持ddr4内存,但是E5开始服务器处理器彻底不兼容消费级主板,也就是说必须去寻找二手的服务器主板。这些主板通常比较贵,功耗通常上百瓦,开机时风扇直接起飞。
介于NAS本身并不从事高负载工作,所以E3 CPU的性能是完全够用的,而且E3 CPU功耗足够低,不需要强力的散热。
最后本人选择的CPU是E3 1265L v3,L代表低功耗CPU,这颗CPU的TDP只有45w,120块到手。
b. 主板
如果选择了E3 CPU,那么所有1150插槽的主板都可以用(包括支持4代酷睿的主板)。但是考虑到稳定性,最好还是用上服务器主板,或者工作站主板。这类主板支持ecc内存
如果选择E5 CPU,那么只能去找旧服务器主板了,价位略高;还有一些华强北产的寨板(x99),不过这种板子能撑多久不好说。
我最后选择的是华硕的 P9D-WS 主板,工作站主板,支持ecc内存,大概四五百块钱。这个板子有多达6个sata接口和四个pcie插槽,可以满足外接大量硬盘的需求。
买旧主板一定要仔细检查接口和功能,老主板经常会有各种小毛病。比如我第一次买到的主板风扇控制器是坏的,风扇一直满速运转。
c. 内存
E3 CPU只支持ddr3内存,都装服务器了,直接4根插满,内存频率能跑就行,1333M和1600M就够了。
再说一遍,为了保证稳定性一定要用ecc内存(ecc,带奇偶校验的内存,可以检测内存比特错误翻转,极大提高系统的稳定性)。ecc内存价格反而比普通内存更便宜,因为普通消费级CPU是用不了的,所以有了大量存货。
不过ecc内存也分成两种,一种是带缓冲的ecc内存(Buffered ecc),还有一种是不带缓冲的(也叫纯ecc)。买之前要看清主板支持哪种ecc内存。我这里的P9D-WS主板就只支持纯ecc内存而不支持buffered ecc。买错内存轻则失去ecc功能,重则无法开机。(你也不想为了一个内存干等两天吧,笑)
我最后买的是三星的纯ecc内存8G * 4,一共240块。
d. 硬盘
硬盘没啥好说的,建议一个固态(SSD)做系统盘,剩下的就是组NAS的机械盘(HDD)了。
固态买个一两百G的就够用了,一定要买大厂的。或者可以逝逝去捡服务器拆机的slc,mlc硬盘。
机械盘不要买氦气盘,坏得快;不要买nas盘,智商税(点名批评西数红盘);注意一下不要买叠瓦盘。一般来说买监控用的黑盘就行了,写数据优化,不容易坏也不是叠瓦盘。
e. 其他
用E3 1650L的话电源大于250w绝对够了;不要显卡;散热器用最基础的下吹式就够了;机箱要选多盘位的;服务器不需要显示器。
强烈建议再购买一个pcie/pci转Sata的转接卡,用来接系统盘,从而实现将系统盘和数据盘隔离,pcie x1转2Sata的就行了,具体原因我会在下一章讲。
总合
除去一堆机械硬盘一整套加起来1千2以内绝对能搞定。
2. 操作系统的选择
a. 虚拟化:ESXI系统
虽然最初目标只是搭建一个NAS机器,但是为了灵活性和充分利用服务器硬件资源,强烈推荐在裸机上先安装一个虚拟机系统ESXI。ESXI系统也是VMware同公司出品的,你可以把它理解为一个系统级的VMware,在上面可以运行各个虚拟机。同时,还能即时对上面的子系统进行备份和快照存档,避免手残。此外,如果一个虚拟机崩了,不会影响其他系统。
关于ESXI系统的教程,请另行寻找学习资源,并特别留意虚拟网卡相关内容,这对面内容有很大关联。大部分机制和VMware类似。本章下面介绍的所有系统都是安装在ESXI上的。
使用ESXI6或者ESXI7都没有问题,虽然ESXI7会提示硬件将在未来版本不受支持,but who cares。
补充一个小关键点:如果通过ESXI将Sata硬盘资源共享给TrueNas系统的话,硬盘是不会空载休眠的(也就是会一直转)。如果嫌费电或者费硬盘寿命,可以将六个Sata口直通给TrueNas系统。详情可参见:https://blog.csdn.net/qiaohewei/article/details/108284358
此外,你会发现P9D-WS主板的六个Sata口不在直通支持列表上(乐)。但是实际上是可以直通的,需要更改ESXI系统的配置,跟着 https://blog.csdn.net/priorhong/article/details/134393270 做就行了
但是如果把六个Sata口直通给Nas系统了,那么系统盘就不能直接接在这组Sata口上了。所以需要再买一个pcie转sata的转接卡,把系统盘接在转接卡上。
b. 硬盘管理:TrueNas系统
此系统是本方案的核心,TrueNas是一个开源的NAS系统,提供了完整的磁盘管理,RAID组建方案,并且支持将磁盘以网络存储器的形式共享给其他设备使用。
关于TrueNas的安装和使用,请参考其他教程。在新建虚拟机的时候,将磁盘分配给TrueNas虚拟机,就可以利用TrueNas构建软件冗余磁盘阵列(RAID)了。关于RAID的种类,请参考其他资料。这里我选择的是用三块盘组建RAID5,使用一块盘做校验位,保证一块盘的故障冗余。当然,还是建议将磁盘直通给TrueNas,这样TrueNas可以实现更完备的硬件监控功能。
TrueNas支持多种网络文件协议,包括SMB,NFS和WebDav,也就是说安装并配置好TrueNas后,已经相当于完成了内网NAS的搭建,并且可以从内网访问并使用磁盘了。
c. 搭载其他服务:Linux/Debian系统
为了完成一些其他的任务,例如内网穿透或者网盘程序,我们还需要一个Linux系统来搭载这些服务。在Linux发行版中,比较稳定适合做服务器的有Debian和CentOS,但是CentOS已经不再被支持,所以这里首推Debian。什么,还有人不会用Linux,不会吧不会吧(手动滑稽)。
d. 更好的网络管理:OpenWrt软路由系统(可选)
如果有更复杂的路由管理需求,可以考虑安装这个软路由系统。不过绝大部分情况ESXI系统自带的虚拟路由器和家用路由器已经足够应对了。
3. 网盘的挂载与管理程序
a. 将NAS挂载到Linux系统上
为了完成这一步,需要将TrueNas中的SMB或者NFS共享打开,并且在Linux中挂载到本地文件树下。这样就可以以访问本地目录的形式访问NAS了。这一步请确认ESXI虚拟网卡的设置,最好使用桥接模式,让每个系统都分配到家中路由器的独立ip。
还可以考虑使用autofs这个工具实现挂载管理,好处是在一段时间没有访问行为后,会自动断开挂载,然后在下次访问时重新挂载,可能对硬盘休眠有一定帮助。
另:如果路由器的网口不够了,一个交换机就能够解决问题。
b. NAS的管理程序(网盘软件)
如果我们希望能够在浏览器上利用一个网页就能够完成文件的上传/下载与管理,就像那些商业网盘一样,我们还需要一个网盘软件。有很多软件可供选择,这里只推荐我试过的两个:Alist和Nextcloud。这些软件都推荐安装在那个Linux上。
Nextcloud是一个开源的网盘软件,基本实现了所有市面上的网盘功能,甚至做得更好。功能全面的代价就是占用的资源会大一些。不过上文的配置完全能够流畅运行Nextcloud。Alist相比则比较轻量,只实现了文件相关的功能,但是在用户分组或者访问权限方面功能没有那么全面。
总体而言,如果你想用作公共网盘,需要给其他人创建账号或者有其他协作内容,我推荐使用Nextcloud。如果只是想用作私有网盘,不共享给其他陌生人使用,我推荐Alist。
这里还有一个细节,一般的网盘,特别是涉及多用户权限的网盘,会使用自己的文件存储格式,例如打乱的存储路径,重命名而不可认的文件名等等。也就是说使用这类网盘软件之后,绕过网盘软件直接去访问磁盘,会根本看不懂也找不到对应文件。而Alist的优点就体现出来了,Alist软件中列出的文件组织和硬盘上实际的文件组织是完全相同的,也就是说,不管从网盘程序中看,还是直接到磁盘中看,文件夹层次和文件名都是完全一致的。在这么多款网盘软件中只有Alist是这样设计的。但正因为这样,Alist的用户管理就不够好了。
c. 题外话:一定要试试docker
docker相当于一种程序级别的虚拟机,相当于为不同的程序提供了不同的运行环境。如果你因为配运行环境心态爆炸过,就懂得docker的好了。(比如,两个程序,一个需要某某库版本>=1.6.0,而另一个程序,需要同一个库版本==1.5.0。在普通环境下,两个程序根本就同时跑不起来,而docker直接创建了两个虚拟运行环境,两个程序装在自己的环境中就能够同时运行)
使用docker,很多程序被封装在镜像中,直接下载下来就能运行,实现了真正的开箱即用。此外,docker还保证了一个程序的崩溃并不会影响到其他的程序,更不会导致系统崩溃。
4. 将网盘服务穿透到公网
如果你有公网IP,可以直接跳过这章,不过这种情况应该很少。还有网上一堆免费内网穿透的教程,一个都不要信,天下没有免费的午餐。
a. 购买一个云服务器
为了完成内网穿透,需要先租用一个拥有公网IP的(云)服务器(VPS)。国内有各种云,国外也有很多厂商。建议还是优先选择国外厂商。国内虽然便宜,但是买服务器还要备份,买到的服务器带宽更是小得可怜。普遍正常价位只能买到5M,10M带宽的VPS,折成字节最多也就1.2MBps,传个上G的东西要十几分钟,完全不能用。
国外的可以自己去找,有每个月五美刀的服务器,带宽基本是千兆级上下等宽,每个月1个t流量,个人完全够用。当然国外服务器最重要的还是能不能直连,这个要自己想办法。
b. 安装内网穿透软件:frp
frp是一个开源的内网穿透程序,分为客户端和服务端两个程序。frp的作用是将内网中指定机器和端口的服务投射到拥有公网ip的机器上,在其他电脑上看来就像公网ip机器上在运行这个服务(也就是隧道技术)。
frp服务端(也叫frps)安装在有公网IP的机器上,而frp客户端(frpc)安装在内网机器上(在我的方案中,当然也是安装在Linux上)。映射类型选择tcp类型就可以了,具体的配置方法请参照frp官方网站和其他博客。
配置好以后,输入云服务器的ip和端口号,就可以访问到内网的网盘服务了。例如:12.34.56.78:11451
(怎么确定端口号?frp里面可以自己设置)。
frp软件是提供docker镜像的,上面的alist和nextcloud和下面的nginx也是。Why not try?
c. 做得更好:购买域名
如果您记不住自己的服务器ip,或者觉得直接把ip分享给别人有些掉价,可以去购买一个域名,然后让域名和服务器ip相关联。这样访问网站时输入域名就等同于输入ip,例如:输入domain.top:11451
也可以访问到网盘。具体操作请参阅其他教程。
域名最好也去国外网站购买,虽然国内便宜,但是要审核和报备。如果绑定的ip是国外的,大概率不过审。
d. 给完美主义者:利用nginx实现子域名转发
绑定域名后,网站看起来很完美了,但是最后的那个端口号看起来仍然不舒服。这个最终问题可以使用nginx的端口转发功能实现。具体实现可以参见 https://blog.csdn.net/u013810234/article/details/89707077 或者其它教程。当然,需要先熟悉nginx的使用。配置成功后,输入类似nas.domain.top
的url就会被重定向到domain.top:11451
上。这样,url中终于看不到数字了。当然,nginx的功能比这强大得多,可以试试再搭建一个个人主页或者个人博客,然后用不同的子域名定位到他们上面。
重要:如果用nginx转发网盘程序的话,上传文件时会出现上传大小超过nginx默认值的问题。解决方法见:https://www.cnblogs.com/hellojesson/p/13393512.html nginx默认的文件上传大小限制为1M,可以手动改成更大的数值,比如几个G。
5. 其他事项
如果家里路由器网口不够,可以买一个交换机。
断电对机器极为不好,如果家里供电不稳,可以考虑配置一个ups(不间断电源)
虽然TrueNas也有自己的插件库,里面也有类似nextcloud的插件,但还是建议将这些功能单独配置到隔壁Linux上。一方面这些插件不好自定义和管理,另一方面插件会降低系统的稳定性。NAS系统专注于NAS就够了。
一篇文章不可能覆盖到所有内容,更何况还有很多隐藏的问题我没有遇到。请善用程序提示和搜索引擎,独立解决问题,也欢迎将问题与解决方法分享出来。
一种基于E3处理器平台的NAS完整方案(从电脑组装到网站部署)的更多相关文章
- 基于BM3803处理器平台的PCI软硬件调试问题汇总(持续更新中)
一:相关基本配置: FPGA: XILINX XC5VFX130T-1FFG1738 PCI接口部分使用XILINX提供的pci32_v4_8硬核:PCI控制器由FPGA逻辑实现,主要完成PCI设备 ...
- 一种基于路网图层的GPS轨迹优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 GPS数据正常情况下有20M左右的偏移,在遇到高楼和桥梁等情况 ...
- 轨迹系列1——一种基于路网图层的GPS轨迹优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 GPS数据正常情况下有20M左右的偏移,在遇到高楼和桥梁等情况 ...
- 【Microsoft Azure 的1024种玩法】三.基于Azure云平台构建Discuz论坛
[简介] Discuz!是一套通用社区论坛软件系统,用户在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能.很强负载能力和可高度定制的论坛服务. [前期文章] [操作步骤] ...
- 【Microsoft Azure 的1024种玩法】二.基于Azure云平台的安全攻防靶场系统构建
简介 本篇文章将基于在Microsoft Azure云平台上使用Pikachu去构建安全攻防靶场,Pikachu使用世界上最好的语言PHP进行开发,数据库使用的是mysql,因此运行Pikachu需要 ...
- C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...
- 基于综合服务平台浅谈Sass应用
一. 前言 CSS不是一种编程语言,只是单纯的一行行的描述,没有逻辑没有变量,因此写CSS对于习惯于运用逻辑思维编码的程序员来说是一件很头疼的事.于是勤奋的程序员就开始运转他们敏捷的大脑, ...
- 分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用
原文:分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用 毕业半年,又总结了一下之前的工作,发现很多知识不复习都忘记了.最近新闻总是报道北京的空气污染,各种雾霾,各种PM X ...
- 基于微软开发平台构建和使用私有NuGet托管库
本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...
- 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0
实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...
随机推荐
- MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理
MMDeploy部署实战系列[第四章]:onnx,tensorrt模型推理 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给补充. 目录: 0️⃣ ...
- Pytorch-实战之对Himmelblau函数的优化
1.Himmelblau函数 Himmelblau函数: F(x,y)=(x²+y-11)²+(x+y²-7)²:具体优化的是,寻找一个最合适的坐标(x,y)使得F(x,y)的值最小. 函数的具体图像 ...
- Django框架——Q查询进阶、ORM查询优化、事务操作、字段类型、字段参数、Ajax、Content—Type、ajax携带文件
Q查询进阶 from django.db.models import Q q_obj = Q() # 1.产生q对象 q_obj.connector = 'or' # 默认多个条件的连接是and可以修 ...
- 力扣585(MySQL)-2016年的投资(中等)
题目: 写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数. 对于一个投保人,他在 2016 年成功投资的条件是: 他在 2015 年的投保额 (TIV ...
- 阿里本地生活全域日志平台 Xlog 的思考与实践
简介: 作者:王宇(御田).当你踏进了编程的领域,代码和日志将是你最重要的伙伴".基于日志的问题排查是研发效能领域的重要部分,阿里集团本地生活在支撑多生态公司.多技术栈的背景下,逐渐沉淀了一 ...
- 基于 Mesh 的统一路由在海外业务的实践
简介:本文主要介绍我们最近在利用 Service Mesh 架构解决海外业务问题中一些实践和价值探索.我们在海外业务引入 Mesh 架构过程中,充分利用 Istio 的基于 yaml 来描述和定义路 ...
- 使用ssh连接远程仓库的方法(github)
使用ssh连接远程仓库的方法 但是当我登录虚拟机想提交csapp的代码时,我发现需要验证我的账号密码,感觉每次提交都要输入这个很麻烦.然后就在网上查询了下为何提交代码需要输入账号密码. 使用 HTTP ...
- dotnet 警惕 C# 的 is var 写法
本文将和大家介绍 C# 语言设计里面,我认为比较坑的一个语法.通过 is var 的写法,会让开发者误以为 null 是不被包含的,然而事实是在这里的 var 是被赋予含义的,将被允许 null 通过 ...
- VSCode和PhpStorm配置进行PHP断点调试
本文环境:php版本:5.4.45 (phpstudy),Xdebug 2.4.1(phpstudy文件夹中自带),phpstorm 2021.3 目录 PHP配置 关于Xdebug 浏览器配置(插件 ...
- SAP Adobe Form 教程六 FormCalc和JavaScript的实践
前文: SAP Adobe Form 教程一 简单示例 SAP Adobe Form 教程二 表 SAP Adobe Form 教程三 日期,时间,floating field SAP Adobe F ...