一个家庭网络环境的组建
第一篇blog,其实是很多次想单独写一点,但是却因为仅有一点而懒得写,越积越多,最终又感觉太多了太麻烦不想写,然而觉得不写好像又有点内心不安的情况下决心还是写一下。有些啰嗦,不过却也是现在的心情写照吧。
既然拧巴,就先大题说一下可能有点拧巴的网络和设备环境需求。总体硬件如下:个人笔记本电脑一台,家庭组装nas一台,小米路由1DR一台,树莓派一台,另有小米全家桶设备几十种。
由于本人做硬件电路设计(candence为主),写硬件的程序(stm32,keil环境为主),也写一些电脑端的程序(由于有跨平台需求,所以用Qt为主),再加上个人的一些照片、影片等,所以电脑中的文件类型就比较乱,有些资料也最好是要备份一下,于是nas就有了需求,远程同步也有了需求,同时还有远程桌面的需求,远程下载的需求等等。现在做到的是可以随时随地同步个人电脑的文件到nas,nas可以做双备份,可以远程网络唤醒。下一步还想做到手机端控制所有过程自动完成,一点点来吧。
NAS篇:
这个其实当时是考虑省心一点白群晖来着,不过本着折腾一下还能增长一点知识的原则,自己组装了一个,华擎J3455,4G,HGST 4T*2,迎广MS04机箱,总体也花了3500+,比起白群晖还是要便宜一些的,论起来性能也还好。一开始还是买了个8G的SSD做了黑裙的系统,也买了BK650做后备(不过后来bk650坏了,于是有了后边的自做类ups)。黑裙的一大劣势于是体现出来了,就是节能方面不占优势(因为其实并不需要每天都要同步一下资料,所以大部分时间是空载的,而且不能休眠),而且系统文件要读取的话麻烦一些,更为关键的是cloudsync同步起来实在是有点问题,很多时候keil下的某个小文件会一直同步不过去,同步的时候对系统性能也有挺大的影响,思来想去还是改成linux吧,于是取出这个8G的ssd,换了个120G的笔记本硬盘,做了一个lubuntu系统,配置了ssh,vnc、rsync、wol,暂时做到这些,先这样用着,具体细节后边细表。
树莓派篇:
说起来这个其实是买来玩玩的,不过鉴于它很低的功耗、很强的可扩展性,现在是让它24小时不停运行的,作为随时听候召唤的家庭电脑。在上边配置了transmission可远程通过电脑或手机下载资料,配置了vnc,可远程连接桌面,主要是为了随时作为跳板在局域网内设置路由器以不断增加一些功能、登录ui界面操作一下ssh不太好操作或者不太会操作(汗一个)的东西,比如现在在用的将transmission下载的东西上传到小米路由1的内置存储上,虽说put的方式也是可以的,但是效率还是不如ui界面。
小米路由器篇:
其实小米路由器这个因为只是开通了ssh,而且是比较早做的,现在还没有空出心思仔细弄一下相关的系统,暂时只是除了路由器外只作为家庭摄像头的影像存储盘和家庭成员手机照片的自动存储设备用,后边会考虑定期自动唤醒nas自动同步指定文件夹功能,这样就比较安全了。另外前一阵子小区电源不太稳定,路由器经历了多次非正常关机,这次用自制的小ups供电还牵扯到自动关机的问题,准备写一个脚本每分钟检测一次树莓派,如果几分钟检测不到就执行关机指令,至于树莓派,可以通过自制ups的串口发送关机指令来关机,关机后自然无法响应路由器的检测行为。
自制UPS篇:
这个其实并不是为本系统专门制作的,而是手头的一个项目需要为设备的计算机设备提供保护,不能整体断电就非法关机而制作的。由于设备是12~19V供电,并且有多路串口,并并且断电后只需要几十秒的时间来处理计算机的存储和关机,电量需求并不大,所以直接采用了长期13.8V浮充的简单电路作为蓄电池的充电电路,检测到没有外部输入后会通过串口发送关机指令让计算机关机,所以整体电量需求量不大,虽说电路挺简单但是也能保证蓄电池10年8年的使用寿命(理论上),也提供了三路5V输出,正好可以用在树莓派上。用它可以保证路由器和树莓派的安全,不过暂时还不能保证nas的安全,这个后续再考虑办法吧。
软件环境篇:
个人电脑为windows+lubuntu,主要工作在windows下完成,资料也在windows下的bitlocker盘中,所以主要的同步任务就要在windows下完成,同步软件使用cwrsync,说实话rsync感觉比群晖的cloudsync要好一些。具体同步的指令用bat来完成,具体内容如下:
wan环境:
set RSYNC_HOME=C:\Program Files (x86)\cwRsync\bin cd %RSYNC_HOME%
rsync --port=873 -avztu -e "./ssh.exe -p *** -l root" /cygdrive/d/ root@***.***.***.***:/media/***/maindisk/D_sync
echo "D_sync OK"
rsync --port=873 -avztu -e "./ssh.exe -p *** -l root" /cygdrive/e/ root@***.***.***.***:/media/***/maindisk/E_sync
echo "E_sync OK"
rsync --port=873 -avztu -e "./ssh.exe -p *** -l root" /cygdrive/f/ root@***.***.***.***:/media/***/maindisk/F_sync
echo "F_sync OK"
rsync --port=873 -avztu -e "./ssh.exe -p *** -l root" /cygdrive/g/ root@***.***.***.***:/media/***/maindisk/G_sync
echo "G_sync OK"
这样做需要每个盘同步完成后需要输一遍密码,不过考虑到同步起来很快,而且如果自动密码的话需要明文存储,就没有自动密码。
lan环境:
只需要将wan环境下的ip改成内网ip就行,速度方面实际测试可以达到外网的3倍以上。
nas端:
nas端需要做的是根据需要挂载合适的硬盘,比如当个人电脑跟nas同步的时候只需要挂载maindisk,maindisk做备份的时候再挂载backdisk然后用rsync将两个硬盘的数据同步,同步完成后硬盘卸载然后休眠或者关机,具体的执行过程也用shell脚本完成。
如自动挂载、自动同步、自动卸载、自动休眠的一些代码:
#!/bin/bash
mount /dev/sda /media***/maindisk echo "mount maindisk OK!"
mount /dev/sdb /media/***/backdisk echo "mount backdisk OK!"
rsync -avtuz /media/***/maindisk/D_sync/ /media/***/backdisk/D_sync/
echo "D_sync OK"
rsync -avtuz /media/***/maindisk/E_sync/ /media/***/backdisk/E_sync/
echo "E_sync OK"
rsync -avtuz /media/***/maindisk/F_sync/ /media/***/backdisk/F_sync/
echo "F_sync OK"
rsync -avtuz /media/***/maindisk/G_sync/ /media/***/backdisk/G_sync/
echo "G_sync OK"
rsync -avtuz /media/***/maindisk/backup_file/ /media/***/backdisk/backup_file/
echo "backup_file OK"
umount /media/***/maindisk echo "umount maindisk OK!"
umount /media/***/backdisk echo "umount backdisk OK!"
umount /media/***/downdisk
echo "umount downdisk OK!"
hdparm -Y /dev/sda
echo "maindisk sleep OK!"
hdparm -Y /dev/sdb
想到哪里写到哪里,先写这么多吧,想一次写明白受限于文学功底还是力有不逮,具体的各个组件的细节后边再单独补充。