一种基于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就够了。
-
一篇文章不可能覆盖到所有内容,更何况还有很多隐藏的问题我没有遇到。请善用程序提示和搜索引擎,独立解决问题,也欢迎将问题与解决方法分享出来。