自从新房子交付后,一直规划着要在新房子里组建一套家用多媒体文件服务系统,因此网络的步线都是自己规划,没有按水电工的常规走,例如多媒体箱子里只保留交换机,光猫和路由器都被我独立出来放到吊顶下的托盘,这样信号极好,散热也好。
最开始,是打算购买成品NAS的,但是一来价格贵,特别是超过2盘位的,价格离谱;二来成品NAS是个黑箱子,系统不是BSD UNIX就是Linux,我自己无法控制后台进程,也无法及时发现和修复漏洞,只能通过系统自带的WEB系统进行管理,很不方便;最后客户端的兼容性很一般,体积庞大,和全家桶一样,分级管理不方便。 因此放弃了这个想法,然后考虑过采用免费的NAS软件来打造,但是其实一样,而且我不知道最新的驱动是否被编译进操作系统的内核,后期维护成本太高,因此也放弃了。至于路由器USB带硬盘的方案,想都没想直接就PASS了,只有不太懂的小白才会选择这种简单到暴的实现,影响路由器效率什么的不说,下载下来的资源,很多目录或者文件名里带空格等乱七八糟字符的,你在基于Linux系统的Android等系统里显示看看,各种问题不断的.
总结自己的需求,其实很简单,一台文件服务器,其他手机啊,台式电脑,笔记本电脑,电视盒子,平板等,都可以通过网络来实现在线看电影,听音乐,或者下载上传文件,不同的人,比如客人,只能看特定的电影目录。 然后比较了FTP HTTP SMABA/NFS, 发现只有FTP能满足这个需求,但是FTP在移动平台,特别是android系统,由于空格被当成非法目录字符[windows中为正常字符],因此好多目录或者文件都存在这样那样的问题,而且不少播放器只支持本地播放和HTTP播放,因此需要增加一个FTP文件到HTTP的自动映射,也就是,服务器端需要同时支持FTP和简单的HTTP服务,列表的时候用FTP协议,但是播放的时候,用户可以选择HTTP,也可以选择FTP.
万事开头难,最开始的时候,考虑到windows平台的FTP服务实现已经非常成熟,希望找到一个FTP服务端代码,自己修改下,去掉没用的数据库等,然后做个HTTP实现,实现一个迷你的家用FTP服务器软件,但是在几乎翻遍了各种站点后,要么是FileZilla这样的巨无霸级实现,授权不符合要求,而且修改难度太大,要么就是too too too old的代码,大部分还是windows9x/xp时代的代码,不是Unicode编译不过,就是没有支持UTF-8,各种的不兼容,最后放弃了这个想法. 好在,最早开发FtpAnywhere,后来开发P2P软件过程中,都实现了FTP功能,因此从后期的P2P软件里把Mini-Ftp实现给挖了出来,加入加密和权限管理,以及上传等,然后增加一个简单的HTTP 服务,包这两个模块整合成windows后台服务,这样,windows平台的家用多媒体文件服务器软件就做成了,再做个客户端,以及一个服务管理程序,就完成了开发,windows平台确实优秀,客户端调用各种播放器,基本全兼容,对比android平台的各种播放器实现,windows平台简直是天堂。
至于移动平台,例如电视盒子,手机,平板等,其实我之前根本不懂开发android,只是凭着一腔冲动做的决定,具体的开发经历在这里 http://blog.csdn.net/danscort2000/article/details/73997632
在手机和平板上调试完成后,上某宝买了android系统的电视盒子,上电视和投影调试,结果发现,界面和遥控匹配的不友好,我设计的登录界面是登录按钮在下方,
而用遥控的话,要按6次向下的按钮,这很不方便,于是又调整了按钮等界面,
然后在android平台的播放器选择上,头大了,按理说,开源的MPV [就是mplayer的新分支] 和 VLC播放器是最好的选择[没有广告等垃圾,真正的网络在线播放,安全性有保证],但是实际测试后,才发现比较的坑,以VLC为例子,最新版本2.0.6,结果发现无法用Intent传递url,无论是FTP还是HTTP,发现VLC直接就把目录文件给忽略了,以为是自己哪里没有写对,或者VLC有特殊要求,在vlc官网上查询了接口,发现就算按照它的示范代码来写,依然出错!而调用例如QQ播霸等播放器却没有任何问题,这是非常明显的大bug,本来想做好事的,直接发个邮件给开发组,结果找了下没找到,发现个报告bug的论坛,想报告来着,结果注册不了,因为验证图片被墙了,因为事不干己,就不管了.但是我很好奇,这么明显的错误,不可能只有我一个人遇见吧,然后搜索,发现两年前就已经有人报告了,两年后的今天,这个Bug依然存在,android平台的VLC确实很神奇.MPV在windows平台下,它的效率可能高过VLC ,但是它的兼容性并不太好,在windows平台常见的问题就是有声音没有图像,但是android平台反过来了,android平台下,MPV播放器兼容性做的不错[虽然也有问题,例如对EPSV指令的响应上,MPV只能识别||||,如果万一服务器不支持双协议,给出个具体数字,MPV就完蛋了,也就是编写网络代码的人没有吃透FTP标准,这点VLC就做的比较好], 而且我调试了几台设备,不同的cpu 显示卡配置,从android 5.0到6.0, MPV都很稳定流畅,而且没有任何广告之类的,这是最关键的. 其实国内也有做的不错的播放器,但是一个播放器软件插播广告,弹信息,甚至读SIM卡,发短信息,常驻后台,反正为了赚钱无所不用其极,所以我优先选择MPV播放器,其次是国内的QQ浏览器自己带的QQ播霸播放器,这也比较搞笑,作为浏览器带的播放器,能支持HTTP播放,而QQ出的android平台专业播放器软件QQ影音,反而无法支持网络播放,这真是!@#$%^&*()_+.
软件上搞定后,自己买低功耗配件,组装服务器就非常简单了,配置如下:
Intel pentinum g2030 , gigabyte b75-d3v 2*2g ddr3-1333
60g ssd做系统盘, 1个WD 3TB 黑盘 1个Seagate 3TB 酷鱼7200
金和田服务器机箱,磐石600s服务器电源, 为什么买服务器机箱呢,一来需要支持多硬盘,例如4个甚至6个,二来硬盘发热普遍厉害,狭小的空间不利于硬盘长时间运行的散热.
路由器,全千兆
交换机,8口千兆交换机
这里强调一点,主板和cpu 内存可以某宝买二手货,降低成本,而且低功耗的cpu你也只能在某宝买到
但是电源一定要买全新的,这关系到服务器的长时间稳定运行,以及硬盘的稳定性,其实好多硬盘都是死在垃圾电源手里,几TB的数据灰飞烟灭,会让你知道什么叫后悔,这里推荐长城金牌巨龙电源和航嘉磐石600电源,如果你能买到正品的台达服务器电源,当然更好。
经过测试,上面这台电脑待机功耗不到40瓦,千兆满负荷输出功耗60瓦左右,功耗已经达到了普通NAS或者上一代笔记本的水平,在家里使用电视盒子或者手机或者笔记本网络播放电影,感觉不到延迟。
别看着服务器体积大,但是真的很节能!!! 调试完成,软件设置等全部安装完毕后,只需要一根千兆网线和一条电源线,不需要其他外设.
其实,很多东西必须实际长期运行才能发现不足,因此加电挂机运行后,发现一天里大部分时间家里没人,服务器是在待机,而重新开机到提供服务只需要一分钟,因此有添加了自动定时关机功能,到达指定时间,如果没有连接,那么自动关机,这样一天能省下35*20=0.7KW,大约0.7度电,一年下来也挺可观的了.至于操作系统的选择,很简单,win7 pro是首选,为什么不是win10或者windows server操作系统,很简单,win10操作系统太霸道,默认开启的后台服务太多,而且很多无用的服务根本无法关闭. 而windows server虽然在支持最大连接数等上相对来说要好的多,而且稳定可靠,但是我们针对的是家用系统,用不到那么多连接,而且服务器系统配置相对桌面版windows来的困难,在节能上也不如家用系统支持的更好,因此选择win7 pro 64位版做系统,至于怎么优化,可以参考 http://www.phoenixp2p.com/cn/xapp.htm , 这里已经给出了详细的优化策略,光安装纯净版系统是远远不够的,后台一堆无用的服务,必须把那些无用的可能导致漏洞的东西统统关闭,这样的操作系统,其实在对外安全性上,基本不输Linux类操作系统了.
因为考虑到内容分级,毕竟有些内容只适合我们自己看,给家人看是不合适的,因此没有在管理程序中直接做图形化配置,而是采用了快捷键,来打开配置文件,没有管理员权限还改不了,毕竟这是服务器软件,配置好了可能好多年都不会去改动,去掉图形配置,可以带来更好的隐蔽性,防止发生不必要的尴尬.
在自己家里长时间压力测试的时候,出了问题,两台电脑进行资源备份拷贝,发现经常在传输了5到10分钟后,速度直接掉到零,有时候隔个20秒左右又能传输个几十兆,然后又是零,第一感觉是硬盘有坏道了,可是对卡住的文件进行检测,发现资源盘上的文件读取完全正常,看来是备份盘存在问题,拆出来检查,结果备份盘读写也完全正常,晕了,接回去,做本盘读写测试,测试了半天才发现,是数据线问题,长时间传输后数据线发热,导致了大量的校验错误,然后换数据线,硬件排查结束,继续测试,结果,对拷的时候还是会出现断流现象,怀疑是网卡问题,于是换网卡,结果现象依旧,一台接路由,一台接交换机,还是会出现断流,而此时发现其他设备播放正常,这才怀疑,可能是交换机有问题,当初我还特意挑选了价格比人家贵的华为交换机,结果我最信任的设备给了我意外的惊喜,在备份机上使用ping 指令ping 网关,丢包100%,在其他电脑上ping 备份电脑,发现不通,而此时直接接路由器的服务器端访问正常,重启交换机,备份电脑才恢复正常,继续做测试,问题依旧,很象是压力测试下交换机发热过大,导致的死机,然后重新买了一台其他品牌的交换机,问题解决. 这次故障的排查,直接导致我写了两个针对性的工具程序,一个用来进行文件读取测试,和那些专业磁盘测试文件不同,我需要的是针对目录的文件读测试,而不是整个磁盘读测试,这是家用文件服务器问题排查中经常要用到但是网络上基本没有的工具,另一个就是带宽测试程序,网络上的测试大部分是通过FTP文件拷贝来检测的,但是其实这些检测不专业,由于受磁盘读写以及协议等的影响,测试数据不专业,而且波动比较大,因此我直接采用了内存<->网络模式的直接读写,基本可以做到精确测试,顺便检测一下华为荣耀pro,实际测试交换口速度可以稳定传输112-113MB/s,确实是真千兆.
次序乱了,最后总结一下组建家庭文件服务器的步骤,
[1] 一台能放多个硬盘的电脑,
[2]在这台电脑上安装windows操作系统(建议win7 pro 64位),然后下载 http://www.phoenixp2p.com/cn/soft/xfilesetup.exe 并安装,然后完成设置.注意在路由器里固定这台电脑的IP地址,否则你没次开机换一个IP,会抓狂的,另外,如果家里无线播放客户端多,建议服务器的网线直接接到路由器,而不是交换机上.
[3] 在家里需要播放视频的客户端,例如手机,笔记本,其他电脑, 电视盒子等,android平台需要安装http://www.phoenixp2p.com/cn/soft/xfile.apk,如果没有mpv播放器,可以安装qq浏览器[注意是浏览器,而不是qq影音],根据安装的不同播放器,在第一次使用XFTP客户端的时候,指定默认打开的播放器[mpv 或者 qq播霸]; 苹果的移动平台比较麻烦,您可以尝试下在播放器如a player等里添加FTP服务器的方式进行播放; windows平台下,先安装我们提供的客户端,然后安装VLC播放器或者mpv播放器,当然你要使用pxxplayer之类的也可以,但是请打开http流功能,因为棒子开发的播放器,所谓的流播放实际都是通过缓冲到磁盘来执行的,你如果不想硬盘死的太快,不建议使用这种播放器. 然后在我们的客户端HomeFile里设置服务器地址,账户,以及播放器位置.
[4] 测试各种客户端,一般出现问题例如影音不同步,无图像等,都是播放器的问题,可以尝试通过钩选http流,或者升级播放器,或者更换播放器等来解决.
从硬件到软件,本人一手完成,也许在实现上没有那些一体化的NAS来的快捷,但是真正实现了windows平台从硬到软替代NAS系统的全部DIY! 几千块钱的多盘位NAS盒子功能,现在你可以用自己选择硬件,用几百块的二手电脑就能实现了.