自建家庭私有云NAS——磁盘管理系统

 上一篇中讲到NAS基本需求和硬件设计,但 NAS 真正的灵魂其实来时内部的系统。而NAS系统中最最重要的就是磁盘和文件管理系统。

磁盘管理系统

之前GEN8上是直接使用CentOS的方式进行运行的,LVM做逻辑卷管理,各种软件基本用docker来运行,基本上可以做到连续运行一年没问题。

OpenMediaVault 是一个构建在Linux上web方式管理NAS的系统。非常的适合家庭用户。

不过,在这里我打算使用OpenMediaVault来作为操作系统(下文中或简称OMV)。首先,这个基于FreeNAS的系统其实来也是Linux系统,方便我以后继续折腾一些东西。硬盘数据以后也可以再其他Linux上读取。第二,对安装盘的要求很小,所以我计划把4个SATA全部都用来装硬盘,操作系统安装在一个U盘上。全部安装完毕后,把这个U盘拷贝下,以后就算是把这个U盘写坏了,也就是在买一个U盘的事情了。在OpenMediaVault 上有专用FlashMemory插件来减少对根目录的读写来保护U盘。 继续阅读“自建家庭私有云NAS——磁盘管理系统”

自建家庭私有云NAS——硬件篇

背景

现在网上在线看电影已经变成了常态,下载机的需求已经不再是那么的迫切。 但为什么我还是佩里不讨好的要自己DIY一个NAS呢?

听说微软准备把蓝屏改成绿屏了

我的公司笔记本电脑硬盘经常损坏,所以需要备份。但USB接口的移动硬盘也是脆弱的一个设备。而且每次都需要插上后备份。手机,家里的笔记本,台式机,相机……都存在类似的需求。这让USB接口的移动硬盘方案不太合理了。

将家人的照片和文件共享也是一个原因。现在的方法就是微信转发,但问题就是分辨率不高,或者占用大量的手机存储空间,更换手机后想要拷贝回来iCloud用量已经超标……。同时也存在检索以前的照片视频非常困难。

一台电脑编辑一个文件后,用另一个设备打开是一个非常常见的操作。比如手机或者相机拍照后用台式机来修图,然后又通过手机来分享照片。没有私有的云设备,很多时候我们不得不用微信一张张的传送分辨率极低的图片,或者用移动盘来拷贝。

实际上市面上已经有很多成熟的NAS产品,如果只是想要解决这些问题。还是建议直接采用厂家的标准解决方案,因为这些产品的软件和服务可以帮一般用户节省大量的时间和精力。但除了省钱这个必要的原因之外,DIYer的精神就是折腾,如果不能安抚自己躁动的内心,就像是没有找到合适的产品。除此之外,标准解决方案虽然非常高效,但也有一些不足的地方,我们在下面的文章中也会逐步探讨。

为什么不把数据都同步到云上面去?——这个问题怎么回答你呢?曾经突然收到网盘关门大吉的消息还没来得及备份的我看到这个问题就感觉到心里默默的痛…… 继续阅读“自建家庭私有云NAS——硬件篇”

初试物联网之远程温湿度计

将 NAS 的信息显示在面板上只能帮助家人在房间内了解信息,但更重要的是如何能够在远程获取房间内的状态呢?为了实现将远程房间内物理信息传送到云端,需要以下的几个环节相互配合

  • 物联网数据平台,作为云端保存和处理数据
  • 传感器,采集环境信息产生数据
  • 家庭网关,将传感器信息收集传送到云平台
Internet of Things
Internet of Things

随着软银宣布收购 ARM 在物联网大展拳脚,Iot 这个不断翻炒的菜也在不断升温,国内除了百度物接入阿里云,流行的物联网数据平台中 Yeelink乐联网算是比较典型解决方案。他们都提供了通过 HTTP 访问的 RESTful API 将分布在各处的数据传送到他们的数据平台上,这种开发方式对绝大多数不会产生大量数据的小客户进行快速开发是非常方便的,下面的代码就能说明。不过周末尝试了好久,就是无法在 Yeelink 上成功的注册帐号,只好转战乐联网了,不过由于 API 基本类似,即便是转平台也是非常快捷的。如果有虚拟主机,也可以自己直接采用开源的 opensensordata.net 搭建一个云端的数据平台。

继续阅读“初试物联网之远程温湿度计”

13.5元搞定NAS 外置 LCD 显示

经常出差,都不知道家里面的温度如何。 另外我的 NAS 也即是前面提到过的 GEN8 曾经热死机一次,也是怕负载莫宁其妙的太高,里面的硬盘经不起来回的折腾。就琢磨用 NAS 为基础做一个远程监控的系统。

首先从近处开始,NAS 运行的是 Centos Linux,平时我需要用 putty 连进去才能看运行信息。我不在的日子,家里面人都不知道它是不是还在运行。所以,首先准备了一块 1602 的 LCD,和一个自己焊接的 LCD2USB 驱动板。不要问我为什么要自己焊接,真不是为了那 6.99 元的诱人价格,而是真的看错了,也成就了平生第一次手工焊接贴片元器件的电路板。LCD 价格 6.5 元,选用了绿色背光灯,让夜色更加迷人点。背光的亮度是通过驱动板后面的可调电阻来设置的。这样总价 13.5 元的 NAS 外置 LCD 显示就搞定了。

1602 LCD
1602 LCD

在 LCD4Linux 和 LCDProc 中选用了后者,主要的原因是前一个从 2009 年开始就没人维护了,连编译都过不去。而 LCDProc 的问题也是很多,这里把重要步骤罗列一下:

首先,必须修改一下源代码:server/drivers/timing.h,选择 DELAY 的方式为最简单的 gettimeofday 来实现,其他的模式,包括那个可怕的自动选择模式,都会带来无穷无尽的折磨。相信我,对于 LCD 这种东西,这个选项已经足够了。

//#define DELAY_AUTOSELECT
#define DELAY_GETTIMEOFDAY
//#define DELAY_NANOSLEEP
//#define DELAY_IOCALLS

然后就简单了,对于 LCD2USB 板子,只需要编译一个驱动就可以了。

./configure -prefix=/usr/local --enable-drivers=hd44780
make
make install
cp server/drivers/hd44780.so /usr/local/sbin/lcdproc

创建一个空白的 /usr/local/etc/LCD.conf 配置文件,然后根据 LCD 的型号输入以下内容。

[server]
Driver=hd44780
DriverPath=/usr/local/sbin/lcdproc

[hd44780]
ConnectionType=lcd2usb
Contrast=850
Brightness=800
OffBrightness=0
Backlight=yes
Size=16x2

以 root 运行 LCDd 服务进程,这个程序将在后台写 LCD。它输出的内容则由客户端程序——我们这里是 lcdproc 来定义。

根据电脑要显示的内容需要编辑 / usr/local/etc/lcdproc.conf 文件,比如在 Centos 上网络连接不是 eth0 而是 eno1,这个就需要在这里改一下。其他需要修改的内容并不多。修改后以 root 权限运行 lcdproc 程序,就可以看到 LCD 显示你定义的内容了。

848947878

装 LCD 的纸盒子实在是太丑了,不过本地的显示算是搞定了,然后就可以考虑远程的数据传输了。

 

家庭NAS方案-硬件篇

家庭内部是否需要一个服务器是一个因人而异的问题。如果是一个摄影爱好者,喜欢看电影,手机不离身,电脑来回换,就需要一个能够集中安放这些媒体文件,离线自动下载同步的服务器了。在本文中,我将详细的介绍一下自己DIY这个家庭服务器的主要过程。由于硬件直接使用了惠普的GEN8服务器,软件相关的内容将在下一篇中详细介绍。

我的家庭需要就是一个网络存储设备(NAS),主要用于离线下载,用于连接媒体播放器(树莓派+OpenELEC),几台电脑数据集中存放和同步(包含苹果电脑的时光机同步),若干个移动设备,提供科学上网服务等。

正如标题所说,这里说的是家用网络存储服务器,所以我们在本文中探讨的内容也只会涵盖家庭用户(不是办公室那种可靠性要求的客户)。对于重要的数据(比如我有两百多G的照片)并不是放在这个服务器上就万事大吉了,重要的事情说三遍:多多备份,多多备份,多多备份!千万不要迷信服务器是绝对安全的,唯一安全的方法就是在多个地点,不同的硬盘里面把重要的数据都保存几份。

服务器的选择

曾经在万能的马云家花费不到200块买了一个迈拓的MSS第一代,里面那块三星的160G硬盘在服役8年后依然还在7*24的运转着。通过这几年对MSS的使用,也使我更加明确了我所需要的家庭NAS可能面对的主要问题

  1. 硬盘容量,原有的160G硬盘对于现在动辄几个G的电影来说实在是捉襟见肘。对于家庭用户,需要对家庭所有NAS的潜在用户所需要的硬盘容量进行一下简单的统计然后才能规划所需的硬盘容量。
  2. 硬件性能和操作系统的支持,人工增加内存的MSS1也只有128M的内存。CPU是一个博通的内置MIPS指令集的处理器。能够在这硬件和内存上稳定操作系统只有OpenWRT了。这样就严重的影响了能够使用的软件数量,以及同时能够运行的进程数量。
  3. 稳定和能耗,家庭用户基本上希望NAS是在角落天天运转而无需操心的一个黑盒子。市面上其实来有还能找到很多二手的服务器,非常的便宜,同时也满足前面几条要求,唯一不满足的就是能耗(其实来还有噪音)。找一个7X24运行,而且比较省电的服务器是必要的。
迈拓的MSS
DIY迈拓的MSS曾经也是一种乐趣

告别了不到了两百块的MSS,我们现在能在市场上找到更多更好的NAS硬件解决方案。在性价比和灵活性之间拿捏是一个很困难的事情。如果动手能力还不错,可以选择和我一样使用CHH上最为热门的惠普GEN8服务器。

HP ProLiant MicroServer Gen8
HP ProLiant MicroServer Gen8

通过德国网站在促销的时候海淘,基本上通过花1450块人民币你就可以得到了这样一个基本上满足我所有硬件需要的服务器了:

  • 为7X24小时运行而设计的专业服务器,ECC内存,双千兆网线接口,体积小巧,而且是HP的牌子,最重要的是外观实在是讨人喜欢啊,自己DIY真是也做不出这么好看又逼格的服务器来。
  • 支持4个硬盘,自己还可以在光驱的位置上加一个硬盘。对于家庭用户余量充足。GEN8还内置了B120i的磁盘阵列控制器,支持RAID0和RAID1模式,如果真的有需求就算是赚到了。
  • 有iLO远程管理,很多人说这个有啥用?没有管过服务器的人真是没有感觉啊,像是NAS这类服务器基本是不会去接显示器,键盘的,那你准备怎么安装操作系统,出了问题怎么查看?iLo可以帮你在一台电脑浏览器上直接操作和查看服务器,就像是直接操作服务器硬件一样。
目前只用了两块硬盘,其他的两个硬盘位等待以后扩展
目前只用了两块硬盘,其他的两个硬盘位等待以后扩展

不过乞丐版的GEN8的缺点也是显而易见的

  • CPU只是赛扬G1610T(双核,主频2.3G),对于负载的运算和数据加工时有些 不堪重任。不过对于NAS来说,主要的任务就是下载,上传文件,无需进行太多的媒体文件加工,这个配置对我而言还是足够的。
  • 内存默认只有2G的确是很让人困扰的,如果要运行GUI的系统,如果要安装虚拟操作系统,起步至少8G。不过,我为了提高自己对服务器操作经验(其实来就是没钱),还是选择了不升级内存,只用终端操作,不搞虚拟操作系统。

如此而来我能得到的一个硬件基础就是:一台稳定的电脑,但只支持安装一个Linux,剩下的花样就要靠软件来解决了。不过目前看来我的服务器负荷率通常都在百分数,即便是所有NAS功能全开,几个电脑进行拷贝同步操作,CPU负荷也不会超过60%,内存更是只需要不到500M,大部分内存通常都在做系统缓存。

服务器架构和操作的安装

应为定位是一个服务器,稳定就要压倒一切,在GEN8服务器上安装操作系统对我而言只有一个选择CentOS,原因是这个是Redhat的官方复刻版,基本上除了官方的服务,一切功能,稳定性,可靠的更新都是一样的。这也是惠普网站推荐的操作系统之一。如果对Ubuntu比较熟悉,也可以尝试Ubuntu server版本,不知这款服务器对这个操作系统的支持如何。不过如果看过这篇文章的后续-服务器软件篇,就知道操作系统真是没有太大的关系了,现代的Linux系统真是太灵活了,我们可以汲取各个发型版本的优点来为我所用。

安装操作系统的可以参考iLo安装操作系统的介绍。注意:在这个服务器的安装中,我没有使用GEN8内置的RAID功能,因为不论0模式,还是1模式,对于家庭NAS来说都是有点极端的。

正确设置STATA控制器是安装Linux的必须步骤
正确设置STATA控制器是安装Linux的必须步骤

请通过iLO在BIOS中使能AHCI,否则是无法成功安装操作系统的。据说使用AHCI方式后主板无法检测硬盘温度,会造成GEN8风扇转速升高,进而噪声巨大。网上的经验是升级iLO4的固件。不过经我本人验证,倒没有出现这个问题,而且机器是放在客厅角落的,白天更本听不见,晚上能感觉到一点声音不过和硬盘本身的噪声,以及其他设备的声响比较起来也不是很突出。

为了充分利用GEN8 的四个硬盘位,在操作系统安装中,我才用了如下的硬盘分区规划

Boot root swap Home Media
500M -Disk1 80G – Disk1 2G – Disk1 500G – Disk1 其他

也就是说除了主要目录分了第一块硬盘大概600G容量,其他的容量和第二块硬盘全部空间,都通过LVM(逻辑虚拟卷)变成了一个分区。LVM可以实现跨物理硬盘来管理一个逻辑分区,而且这个分区是可以调整大小,更换其中的物理硬盘。也就是说如果以后添加或者更换硬盘,就可以通过LVM来灵活的复制,扩充这个分区,而不用影响系统程序安装的分区了。另外,LVM也让多块硬盘在系统中成为一个连续的空间,无论文件或者目录大小都不会出现一个分区被占满,别的分区却空着的情况了。如果以后添加硬盘,只需将新硬盘制作成物理卷,然后加入到虚拟卷中。

除了LVM之外,还有一个选择就是ZFS-号称终极文件格式系统,这种文件格式系统也可以实现跨硬盘的文件管理,而且这种逻辑卷的管理和文件格式管理是一个整体的,不像LVM那么分裂。非常出名的NAS操作系统FreeNAS系统就是用ZFS来实现的多磁盘管理。不过需要注意这个文件系统的支持在主要Linux发行版本中都是测试性质的,稳定性有待商榷。

另外需要注意的是CentOS默认使用XFS来格式化分区,在安装系统之前,我现在虚拟机上演练LVM时发生过XFS无法解决的问题,但Ext4则没有问题。所以在此次安装NAS的时候,我毅然决然的选择了Ext4格式。虽然网上对两者的性能对比非常多,不过对家庭NAS来说,这些微小的区别基本上是可以忽略不计的。

操作系统安装完毕后,和硬件相关的内容就可以暂时先搁一下了。我会在接下来的一篇中详细介绍一下如下的内容

  • 操作系统的设置和优化
  • NAS主要软件和架构
  • 通过Docker来虚拟化