家庭NAS服务器安装配置
如果转载需要注明出处来源: www.warfalcon.com
NAS是Network Attach Storage的缩写,是一种具备网络存储的服务器,也称为网络存储服务器。家庭NAS服务器是正对个人家庭用户,结合廉价硬件和免费软件搭建的具有一定性能、稳定性和可靠性的网络存储服务器。
组建家庭NAS服务器的原因
我决定组建NAS服务器的原因是难忘和惨痛的。一个月前家里台式机的硬盘在毫无征兆的情况下坏掉了,硬盘里面保存了我们家庭近几年外出旅游的数码相片,更重要的是女儿从出生到现在的所有成长照片也在里面(庆幸的是我重要的工作资料文件备份在Thinkpad笔记本里面)。
这次的硬盘数据丢失事件让我总结了两点:
- 硬盘就是一个消耗品,它是有寿命的;
- 各类硬盘(如服务器硬盘、监控硬盘、普通硬盘、SSD硬盘)的主要差别除了性能外,最主要的差别就是使用寿命。
家庭NAS服务器的硬件系统组建
一、硬件系统方案选择
- 标准服务器方案
- 方案优点
标准服务器最大的优点莫过于性能和稳定性,这类服务器都经过厂商专门设计和优化过的,在性能和稳定性上处于最优结合,常常被用于企业级的应用。 - 方案缺点
标准服务器的设计初衷就是针对于企业级用户的,但是对于我这种家庭及个人用户来说缺点就很多:
1) 价格昂贵,价格一般在8000元人民币以上,二手服务器(机房淘汰下来的)的不好说,这个看运气了。
2) 噪音巨大,这类服务器以稳定见长,需要努力控制CPU及周边大功率器件的工作温度,保证服务器的稳定性。因此它们安装了很多大风扇,噪音非常大,不太适合家庭级应用。
3) 功耗巨大,因为要保证性能和稳定性,因此这类服务器的电源都是大功率的,也不考虑什么低功耗。因此也不太适合家庭及的应用。
- 方案优点
- 微型服务器方案
- 方案优点
跟标准服务器一样,微型服务器是专门针对小型企业或家庭个人级别设计的小型服务器,非常适合做NAS服务器。市面上比较有名的莫过于惠普的MicroServer GEN10:
- 方案缺点
要说微型服务器最大的缺点就是价格,虽然它没有标准服务器贵,但是2600~3000元左右的裸机价格也着实不便宜。
- 方案优点
- 自组建(DIY)方案
- 方案优点
自组建方案的最大邮件就是配置和价格弹性,不同性能和不同品牌的硬件设备价格不相同,根据自己需求进行硬件设备的采购,达到满足需求的最高性价比。 - 方案缺点
自组建方案的缺点就是需要方案设计者有足够的经验,因为自己DIY的设备在组建的时候会出现很多问题,需要自己进行解决。另外就是当前硬件设备基本都是在网上进行采购(我比较喜欢在淘宝上采购,没有什么特别原因,就是选择多,价格便宜),需要对硬件设备的性能、是否正品进行辨别,一旦下单采购后发现设备不兼容,再进行退货,代价将会很大。
基于以上几个方案,优选方案当然是微型服务器方案,虽然价格用于组建家庭NAS服务器稍微贵点,但相对于其性能和稳定性来说,性价比还是非常高的。但对于我这个资深的技术宅来说,自组建(DIY)方案最适合,不仅能够省钱而且还能享受到组建过程中的乐趣。因此我坚决选用自组建(DIY)方案。
- 方案优点
二、硬件设备选型
- 服务器主板及相关器件选型
经过一天的网上搜索,从性能、稳定性、功耗、噪音和性价比各个方面比较,我选择了华擎J3455主板:
· 主板尺寸符合MIN-ITX规格(17cm*17cm);
· 主板集成低功耗CPU(Intel四核J3455,主频1.8GHz),板载散热器,无需风扇;
· 板载4个SATA3接口,对于存储类服务器组建RAID来说比较重要;
· 板载千兆以太网接口,可以有较高的网速,当然路由器也得是千兆级别的;
· H.256硬件解码,家庭NAS服务器肯定要兼职做HTPC,视频硬件解码是播放流畅的必要条件;
· 其他什么USB3.0、HDMI的基本该有的都有了,完全符合家庭NAS服务器的配置要求。
· 内存我选用的是金斯顿的8G,DDR3 16000笔记本内存条,原因是组建软RAID消耗的内存比较大。
- 服务器电源选型
电源的选择我一直奉承大体积(散热好)和大功率(足够的功率容量保证系统的稳定性),当然还有就是家庭NAS服务器要求的静音需求。因此我选择了全汉的320W静音电源:
- 服务器机箱选型
机箱选型比较重要,需要满足体积、噪音、硬盘容量,安装方便性,当然还有外观。淘宝上有很多专门NAS服务器的机箱,可以方便的从机箱前面抽插硬盘,但是价格都比较贵而且外形不好看。因为家庭用的NAS服务器除了硬盘坏掉,基本不会去取换硬盘,因此我选择了乔思伯W1机箱,可以安装全尺寸电源,4个3.5寸机械硬盘位和2个2.5寸SSD硬盘位,机箱包含两个静音风扇,体积和外观都比较合适:
- 服务器硬盘选型
如文章开头我的总结,硬盘就是一个消耗品,再好的硬盘也会坏,只是时间长短而已。因此我选用1块小容量的廉价SSD硬盘当操作系统盘,它不仅可以加快系统启动时间,而且即使它坏了,再买一块SSD硬盘重新装系统就行,不会影响我的数据存储部分。而数据存储部分的的硬盘也是普通的廉价机械硬盘,坏了就直接换掉,而数据完整的保证性就依赖于RAID系统了(在后面ZFS系统搭建时会讲到)。
基于上述考虑,我选用了一块30G的杂牌子SSD硬盘作为操作系统盘,而用于存储数据的硬盘选用了3块容量为2T的机械硬盘,3块2T的硬盘组成RAIDZ1,实际存有效储容量只有4T(有一块2T硬盘拿去做RAIDZ1的备份),但是它可以保证任意坏1块硬盘都不影响数据,重新更换同样容量的硬盘后可以重建数据。
家庭NAS服务器的软件系统组建
本片笔记比较重要的就是软件系统的搭建,本次软件系统搭建花了我不少的时间。以前觉得搞运维就那样,反正是拿人家的软件安装配置,不懂就到网上查,没有太多的技术含量。但是经过这次搭建NAS服务器才知道,搞运维可不是那么简单的,特别是基于Linux的运维,要求的知识面很广。
家庭NAS服务器的软件系统方案
家庭NAS服务器的主要目的是保证体现数据存储性能和安全,因此在我软件系统构架设想是:Linux+OpenZFS+NFS+Seafile,下面我会介绍这几部分组成。
- Linux操作系统
我最初的设想是Linux选择CentOS,毕竟是企业级的操作系统,性能和稳定性都能够得到保证。但是在安装操作系统的时候才发现CentOS与华擎的J3455主板不兼容,原因是在硬件系统时钟上面,华擎的J3455主板是采用最新TSC方式,只有Linux内核版本在4.8以上的才能够支持,而CentOS最新的CentOS 7.2的内核版本是3.6版本………,发现这个问题后,我查找了当前所有合适的发行版Linux,只有ubuntu 17.04版本的才是试用4.8版本内核,所以我最终选择了ubuntu Server 17.04(无GUI界面的服务器版本)。 - 存储系统OpenZFS
OpenZFS是最初SUN公司未Solaris系统开发的基于软RAID系统,它涉及之初的目的就是使用廉价的硬盘,通过ZFS系统组合成高可靠性软RAID系统。根据网上的资料,ZFS组建的RAIDZ完全可以可以匹敌硬件RAID的性能,并且还解决了硬件RAID的一些无法解决的问题(如RAID 5的写入空洞问题)。因此我的NAS使用3块容量2T的硬盘,通过ZFS系统组建成RAIDZ1(等同于RAID3),组建完成后存储容量为4T,3个硬盘中的任意1个坏掉,都可以恢复所有数据。最让人兴奋的是,无须添加任何硬件(如昂贵的RAID卡)。但是ZFS有个特点就是内存需求大,内存容量按照1T配1G进行配置,因此为了方便后续再扩展1个2T的硬盘,我选择的8G的内存。 - 网络文件系统NFS
网络文件系统NFS是由SUN公司开发,目的是让世界上不同的操作系统通过NFS协议进行数据交换。NFS对于家庭NAS服务器其实是可选项,因为Seafile其实已经包含这个功能。但是NFS系统成熟稳定,作为在Seafile系统的备用。平时可以代替U盘进行数据导入导出,并且Windows和Linux都可以原生支持。 - 分布式存储系统Seafile
分布式存储系统Seafile是家庭NAS服务器软件方案的核心,它是由国内公司开发的开源软件产品,分为社区版和专业版。社区版相比专业版功能些企业级的应用和要求,但其核心存储共享功能都有,因此我使用免费的社区版本。其实Seafile还提供企业级的云盘功能,并且支持docker方式安装,非常不错。但这次我是建立自己的私有云,因此这个云端必须是家里NAS的硬盘。
家庭NAS服务器的软件安装与配置
ubuntu Server 17.04安装与配置
操作系统U盘的制作
首先到ubuntu官方网站下载ubuntu Server 17.04的镜像文件:
ubuntu Server 17.04的镜像文件下载使用UltraISO软件将镜像文件打开
- 点击UltraISO软件菜单的启动->写入硬盘映像,进入写入硬盘映像界面。然后在硬盘驱动器的下拉菜单选择需要写入的U盘(因为Linux服务器版本没有GUI,镜像文件小于1G,选用1G以上的U盘即可)。
- 操作系统U盘制作完毕
- 操作系统的安装
ubuntu操作系统的安装与windows比较类似,过程还是比较简单。但是由于Linux的发行版比较多,每个版本可能都有差别,因此建议在PC上先使用虚拟机进行安装,确定安装过程中的各种选项后再进入实体机安装,这样比较省时间,避免重复折腾。
- 将NAS服务器通过网线连接路由器,路由器的DHCP功能必须打开,并且保证网络可以访问Internet。
- 华擎J3455主板的BIOS需要升级,否则会有二次启动问题。该款主板的BIOS升级比较简单,直接在BIOS设置界面中选择在线升级。
- 将U盘插入NAS主机,进入BIOS中的BOOT菜单,选择First BOOT为U盘作为启动硬盘(一定要选UFI方式,即EFI打头的U盘选项)。
- 进入安装界面后按照提示进行安装即可,注意的是在分区的界面时,一定要选择安装在我们NAS主机的SSD硬盘上(如果SSD硬盘连接的SATA1口,那么SSD的盘符应该是sda)。不使用LVM的卷管理,因为我们后面使用ZFS系统,不需要这个。
- 安装到最后时系统会提示你拔出U盘,拔出后点击确定,NAS主机自动重启。如果一切正常将进入系统。因为是服务器版本系统(没有GUI界面),使用命令行输入账户名和密码(账户名和密码在安装时设定)收进入系统。
- apt-get下载源的更新
ubuntu系统属于debian系统的分支,使用apt-get完成软件下载、依赖性检测和安装,基本不用担心兼容性问题(因为发行版厂商已经测试完成)。
但有点非常重要,由于ubuntu 17.04是我目前最新的ubuntu发行版本,如果使用很多第三方的源还未来得及更新此发行版的软件,因此建议使用官方的源最为稳妥。新安装的ubuntu系统中安装源文件位置:/etc/apt/sources.list。
ubuntu 17.04发行版的官方安装源文件如下:
deb http://us.archive.ubuntu.com/ubuntu/ zesty main restricted
deb http://us.archive.ubuntu.com/ubuntu/ zesty-updates main restricted
deb http://us.archive.ubuntu.com/ubuntu/ zesty universe
deb http://us.archive.ubuntu.com/ubuntu/ zesty-updates universe
deb http://us.archive.ubuntu.com/ubuntu/ zesty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ zesty-updates multiverse
deb http://us.archive.ubuntu.com/ubuntu/ zesty-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu zesty-security main restricted
deb http://security.ubuntu.com/ubuntu zesty-security universe
deb http://security.ubuntu.com/ubuntu zesty-security multiverse
将以上内容替换原/etc/apt/sources.list即可,然后在执行原更新命令即可:
sudo apt-get update
- 网络工具安装
新安装的ubuntu Server操作系统不包含一些实用的网络工具软件,如ping, ifconfig等。因此我们在更新安装源后首先要安装这些工具,执行以下命令即可安装:
sudo apt-get install net-tools
然后执行ifconfig命令,确定路由器给我们NAS主机分配的IP地址
warfalcon@warfalcon:/etc/apt$ ifconfig
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.112 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::7285:c2ff:fe50:d4bb prefixlen 64 scopeid 0x20<link>
ether 70:85:c2:50:d4:bb txqueuelen 1000 (Ethernet)
RX packets 17006490 bytes 24779051275 (24.7 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8472522 bytes 975636730 (975.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1882027 bytes 9824820859 (9.8 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1882027 bytes 9824820859 (9.8 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中192.168.0.112即为路由器分配给NAS主机的IP地址,这个地址一定要记住,后面很多地方会用到。因为使用的是路由器的DHCP分配的IP,有可能下次会发生该变,因此建议在路由器的静态路由变将NAS主机的MAC与这个IP地址进行绑定,确保192.168.0.112永远都只分配给NAS主机。
- 升级vim软件
由于安装的新操作系统中的唯一的文本编辑软件是vi,它是vim的简化版软件。我在使用它编辑配置文件时发现键盘输入会出错,虽然网上有解决办法,但觉得没有必要在这上面费劲。因此升级vi为vim。具体操作如下:
sudo apt-get remove vim-common #先删除原来的vim通用文件
sudo apt-get install vim #重新安装完整变的vim
安装完毕后输入命令打开vim编辑软件:
- 安装OpenSSH Server
因为Linux服务器都都不接显示器(因为没有GUI),所以对服务器的操作都是使用SSH Client软件(我常用SecureCRT软件)进行操作。但是新安装的服务器版本操作系统是不带OpenSSH Server的服务,需要自己安装。
sudo apt-get install openssh-server
安装完成后检查是否正确
warfalcon@warfalcon:/etc/apt$ pstree
systemd─┬─agetty
├─ccnet-server───{pool}
├─cron
├─dbus-daemon
├─dhclient
├─mysqld───39*[{mysqld}]
├─named───6*[{named}]
├─nginx───4*[nginx]
├─python2.7───3*[python2.7───5*[{python2.7}]]
├─rpc.idmapd
├─rpc.mountd
├─rpcbind
├─rsyslogd─┬─{in:imklog}
│ ├─{in:imuxsock}
│ └─{rs:main Q:Reg}
├─seaf-server───11*[{seaf-server}]
├─seafile-control
├─sshd───sshd───sshd───bash───pstree
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-timesyn───{sd-resolve}
├─systemd-udevd
├─transmission-da───2*[{transmission-da}]
└─zed
只要里面有sshd的进程,说明OpenSSH Server安装成功。然后我们在windows电脑上使用SecureCRT登录NAS主机,以后我们基本就靠在windows电脑上使用SecureCRT软件去操作NAS主机了。
设置Hostname为NAS主机的IP地址,Username为NAS主机账户名
设置完成后点击连接,如果成功的话就会显示以下界面
OpenZFS安装与配置
OpenZFS是最初SUN公司未Solaris系统开发的基于软RAID系统,它涉及之初的目的就是使用廉价的硬盘,通过ZFS系统组合成高可靠性软RAID系统。Ubuntu Seriver 17.04的内核已经将OpenZFS编译进去了,因此只需要简单安装即可完成ZFS系统在NAS中的安装。
sudo apt- install zfsutils-linux
安装完成后使用zpool命令建立RAIDZ池
warfalcon@warfalcon:~$ sudo zpool create -f falcon raidz sdb sdc sdd
..........
warfalcon@warfalcon:~$ sudo zpool status
pool: falcon
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
falcon ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
解释一下,使用sudo zpool create -f falcon raidz sdb sdc sdd命令创建由3块硬盘组建的RAIDZ池,它可以实现任意一块硬盘坏了,在跟换硬盘后仍然可以重建数据。其中
zpool create -f: 创建RAIDZ池命令。
falcon: 创建的RAIDZ池的名字,可以根据需要任意取。
raidz: 池的类型,除了raidz外还有mirror(2块硬盘,等同于RAID1),raidz2(5块硬盘,等同于RAID5),raidz3(9块硬盘,等同于RAID6)等。
sdb sdc sdd: 只是NAS3个主机的硬盘设备号(sda是NAS主机的SSD硬盘,用于操作系统的安装)
具体更多的ZFS系统的知识请参考以下参考文章:
How to install ZFS on Ubuntu Linux 16.04 LTS
如何在Centos7上安装和使用ZFS
Oracle Solaris 管理:ZFS 文件系统
NFS Server安装与配置
网络文件系统NFS用于不同操作系统之间的数据传输,它与微软的SAMBA系统类似,只是后者只用于Windows系统与Linux系统之间的数据传输,有局限性。NFS和SAMBA这种网络文件系统与FTP或SFTP不同,前两者不需要将文件下载到本地,可直接在服务器端执行,这样可以实现HTPC的功能(在线电影观看)等。而仅仅需要执行一条挂载命令即可。
- NAS主机上安装NFS Server系统
sudo apt-get install nfs-kernel-server
- 修改配置文件/etc/exports
sudo vim /etc/exports
在配置文件最后增加一行脚本
/falcon/nfs-files *(rw,sync,no_root_squash,no_subtree_check)
其中/falcon/nfs-files是NAS主机需要共享映射出去的目录,后面跟着的就是控制命令
rw: 允许客户端进行读写该目录下的文件。
sync: 允许异步拷贝。
no_root_squash: 不允许客户端使用root账户登录所拥有的权限,也就是无论客户端使用任何账号登录, 都只有NFS服务器的指定权限。
no_subtree_check: 不对父目录的权限进行检查。
- 在修改完毕配置文件后重新启动服务,使配置生效。
sudo systemctl restart nfs-kernel-server #重新启动NFS服务使配置生效
sudo systemctl status nfs-kernel-server #查看NFS服务是否启动成功
- Linux系统和Windows系统客户端操作
Windows客户端操作
Windows客户端去挂载NAS主机的NFS系统是使用得比较多的,比如使用HTPC看电影就需要Windows客户端去挂载NAS主机。使用Windows系统的命令行执行命令
mout 192.168.0.112:/falcon/nfs/nfs-files Z: #Windows命令,将将NAS主机的NFS目录挂载到本地的Z盘, 跟使用U盘和光驱一样
执行完毕后将在【我的电脑】中看到Z:盘上,命令行操作是最简便的方式,也可以采用GUI方式操作,可参考自行网络资源。
Linux客户端操作
首先需要在本地系统上建立一个文件夹目录,然后将NAS主机的的NFS目录挂载过来
sudo mkdir /mnt/nfs-files
sudo mount 192.168.0.112:/falcon/nfs-files /mnt/nfs-files -o nolock,rsize=1024,wsize=1024 #Linux命令,将NAS主机的NFS目录挂载到本地的目录,跟使用U盘和光驱一样
Seafile社区版安装与配置
Seafile是一款国内团队开发的分布式网络存储系统,可以运行在Windows,Linux系统上,可以实现WEB端操作、移动平台端操作和网络映射功能。现在我们首先来安装Seafile到NAS服务器上。
- 首先到Seafile官网上下载最新版的Seafile软件。
Seafile 6.2.2 64bit Linux版本 - 按照官网上的服务器手册进行安装,这里我们部署基于MySQL和Nginx的Seafile系统
Seafile服务器安装指南 - 在配置开机启动Seafile服务
开机启动Seafile服务进程
这里需要说明的是在创建及配置/etc/systemd/system/seafile.service文件时,仔细阅读第3行的注释:
- 使用的MySQL数据库
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target
After=mysql.service
.............
- 使用的PostgreSQL数据库
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target
After=postgresql.service
.............
- 使用SQlite数据库
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target
.............
- 使用Seafile系统方法
- WEB端使用Sealfile
打开浏览器输入http:192.168.0.112:8000如果一切配置OK的话,你会看到如下登录界面,输入安装Seafile时设置的用户名和密码即可登录。
- WEB端使用Sealfile
Seafile系统使用seahub进程负责WEB前端的工作,端口号8000(可以自行设置),使用seafile进程负责后台数据处理,端口8082(可以自行设置)。登录之后界面如下,网站功能比较齐全,还可以进行权限分配,分组共享等。
客户端使用Sealfile(以Windows客户端为例)
- 下载Seafile for Windows客户端软件
Seafile for Windows客户端 6.1.1 - 双击seafile-6.1.1.msi文件进行安装,安装完成后按照提示进行设置和登录。
Seafile for Windows客户端使用手册
- 下载Seafile for Windows客户端软件
挂载方式使用Sealfile
- 下载Seadrive for Windows挂载驱动
Seadrive for Windows挂载驱动 0.8.0
Seadrive for Windows挂载驱动使用手册
- 下载Seadrive for Windows挂载驱动
其他实用软件的安装与配置
由于我们的NAS是家庭使用,当然需要多功能集合在一起。我的规划是在这台NAS服务器上除了实现文件存储和HTPC功能外,还能充当其他功能服务器:
- 远程下载服务器Transmission
- 安装Transmission软件
#daemon版本使用用于无GUI的Linux服务器,客户端使用WEB对transmission进行操作
sudo apt-get install transmission-daemon
- 配置Transmission环境
安装好transmission还不能够使用,需要配置/etc/transmission-daemon/settings.json文件
#关闭Transmission服务
sudo systemctl stop transmission.service
#修改transmission的主要配置文件
sudo vim /etc/transmission-daemon/settings.json
setting.json文件修改如下
{
"alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 50,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "http://www.example.com/blocklist",
"cache-size-mb": 4,
"dht-enabled": false, #此处修改为false
"download-dir": "/falcon/torrent-download", #此处的目录修改为自己的下载目录
"download-limit": 100,
"download-limit-enabled": 0,
"download-queue-enabled": true,
"download-queue-size": 5,
"encryption": 2, #此处修改值为2
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "/var/lib/transmission-daemon/Downloads",
"incomplete-dir-enabled": false,
"lpd-enabled": false,
"max-peers-global": 200,
"message-level": 1,
"peer-congestion-algorithm": "",
"peer-id-ttl-hours": 6,
"peer-limit-global": 200,
"peer-limit-per-torrent": 50,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"port-forwarding-enabled": false,
"preallocation": 1,
"prefetch-enabled": true,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": true,
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "{ac603e60775dda43415e2b96e06b6eabd00ffedcs1LKHC9h", #此处修改为自己的登录密码,在服务器运行后明文密码会被加密
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "warfalcon", #此处修改为登录账户名
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": false, #此处修改为false
"scrape-paused-torrents-enabled": true,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"speed-limit-down": 100,
"speed-limit-down-enabled": false,
"speed-limit-up": 100,
"speed-limit-up-enabled": false,
"start-added-torrents": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-limit": 100,
"upload-limit-enabled": 0,
"upload-slots-per-torrent": 14,
"utp-enabled": true
}
- 重新启动Transmission服务
sudo systemctl start transmission.service
- 配置Transmission下载目录
#建立一个下载存储目录,NAS服务器的/falcon目录是挂载在ZFS的RAIDZ池的,即存储在受ZFS系统保护的外部机械硬盘
mkdir /falcon/torrent-download
#修改下载存储目录及子目录的权限为775
sudo chmod -R 775 /falcon/torrent-download
#将root追加到debian-transmission用户组里,因为torrent-download用户是root
sudo usermod -a -G debian-transmission root
#改变下载目录的用户组为debian-transmission
sudo chgrp -R debian-transmission./torrent-download/
- 使用Transmission文件下载
打开浏览器输入http://192.168.0.112:9091/transmission/web/,并提示输入设置在setting.json里的用户名和密码后,你会看到Transmission的WEB控制台界面,然后就可以进行BitTorrent种子下载了
让家庭NAS服务器变成真正的私有云
到目前为止,这台NAS服务器已经具备私有云的功能,但仅仅在在局域网范围内。如果要成为Internet范围内的私有云,那必须有一个固定的公网IP地址和一个DNS域名(可选)。获得一个公网IP实现方法有以下几种:
- 使用电话线拨号的ADSL网络
每次拨号成功后ISP运营商就会分配1个公网IP,虽然每次拨号分配的公网IP地址都会变,但只要在NAS主机上运行类似花生壳类的动态DNS软件,客户端任然可以通过固定域名对NAS服务器进行访问。然而目前运营商的ADSL业务基本停止了,同时ADSL的速度也不能满足NAS服务器的要求。 - 使用网络的虚拟主机
目前由于云端和虚拟主机(docker)技术的成熟,像BAT这类的大型互联网企业都停供虚拟主机服务,你通过购买活动的虚拟的主机(速度、内存、硬盘大小均可选择),这类虚拟主机拥有公网IP和域名,因此现在建立小型网网站、WEB应用服务器等非常简单。但做NAS服务器要求的存储量会非常的大,比如我现在规划的6-8T的存储量,这样的虚拟主机月租会很高,家庭级应用的费用也增加不少,因此不太适合做私有云。 - 使用内网穿透技术
内网穿透技术不是个新技术,其实它的原理很简单。在Internet网路上有台拥有公网IP和域名的服务器A,NAS主机上会运行个常驻后台的进程,负责与服务器A进行通讯。当有Internet客户端要访问NAS服务器时,可以与服务器A建立连接,建立稳定连接后客户端通过服务器A将数据转发给NAS服务器,NAS服务器通过服务器A转发给客户端。这样完成客户端与NAS服务的数据交换。对服务器A的要求就主要是网络速度了,这个实现的费用就相对来说小得多。
虽然内网穿透技术的细节非常多也复杂,但简单的原理就如上述。目前实现这种内网穿透技术的方案有以下几种:
1. 使用开源的ngrok软件
将ngrok部署在上诉的服务器A上,实现内网穿透功能。使用这种方案除了完成有台公网服务器外,最主要的是要对ngrok软件配置熟悉(ngrok传说使用go语言编写),同时原生的ngrok服务器存在内存泄漏问题,原作者已经停止更新(估计是要实现商用了)。目前淘宝上有人可以付费代配置这种ngrok服务器。
2. 使用花生壳内网穿透硬件
这种方案是购买个花生壳公司生产的内网穿透硬件,接到路由器就可以了
只购买硬件可以获得每个月1G~2G的流量,如果付费将获得无限流量和更好的稳定性。
3. 使用提供内网穿透功能的服务商
提供这类功能的服务商的技术与方案一相同,只不过是有专业的服务商提供运营服务。国内比较有名的算是花生壳和NATAPP了。
以NATAPP为例,通过付费购买,NATAPP将提供隧道(其实就是端口号)供NAS服务器与Internet客户端进行数据交互。但比较麻烦的是购买1条隧道只能提供1个端口。比如Seafile系统分为Seafile(负责数据存储)和Seahub(负责前端WEB)两部分,分别使用8000和8082端口,这样必须购买两条隧道才能够满足应用要求。
综上所述,使家庭NAS服务器变成正在的私有云,最适合的方案就是内网穿透技术。而内网穿透技术的3种实现方式中我建议选择后面2种方案。
- 如果需要内网穿透的设备具备运行Linux&Windows这类的操作系统,我建议使用第3种方案。
- Linux&Windows这类的操作系统但是不具备运行是智能设备不具备运行Linux这类服务器,就使用花生棒这种硬件,它等同于把运行在NAS服务器上的常驻后台的进程拿到外部硬件上运行。同时没有端口数量限制,适合多个设备同时穿透。
家庭NAS服务器性能测试
到目前为止,一台家庭NAS服务器就架设完成了,按照设计之初的设想,服务器有几个重要的性能指标:
- 噪音水平
实在没有测试噪音分呗的环境设备,但是经过几天运行观察,NAS服务器运行得非常安静,几乎听不到声音,这点我非常满意。 - 功耗水平
测试NAS服务器的功耗其实很简单,只要有个功率测试仪就行。根据网上众多网友实机测试,我配置的NAS服务器的功耗水平大概在35W~60W之间,这个指标不好不坏,算是合格吧。 - 传输性能水平
传输性能测试也许是大家最关心的指标之一。经过我实测,使用我的电脑笔记本,通过WIFI连接路由器,传输大小2G左右的文件,在NFS、Seafile-http和Seafile-mount上的成绩如下
NFS系统 | Seafile-http | Seafile-mount | |
---|---|---|---|
平均传输速度 | 1 ~ 2Mb/s | 2 ~ 3Mb/s | 3 ~ 5Mb/s |
- NAS服务器整体性能分值
Linux的跑分软件我暂时还没有找到,待测试后再更新文档。 - 长期稳定性
到目前为止,这台NAS服务连续运行了4天左右,无论是硬件系统还是软件系统,表现出来的稳定性还是不错的,还待长期测试。
心得体会
2017年的这个国庆节,经过了1天的硬件组装和3天的软件系统装机,终于初步完成了家庭NAS服务器的搭建。我总结如下:
- 服务器的运维工作一点不比编程设计弱,要求运维人员的知识面很广。作为一个好的运维人员不仅仅要掌握软件的配置,而且还要清楚系统的运行机制,才能在遇到问题的时候从原理上进行分析解决。
- 经过了3天的软件系统搭建,进一步加深了我对Linux运行机制的了解,具备初步分析和解决问题的能力。
- 后续进一步了解分析Linux系统,我的主攻方向不是运维,还是在嵌入式Linux系统。