在 Hard 模式中搭建家庭存储中心NAS 的一个非主流方案

张大妈三不五时推荐个HP Gen8之类的小服务器,大多数人都是买来搞NAS的。我没钱,DIY了一个。从半个月前开始,出了一些问题,一直折腾到现在。好在数据救了回来,NAS也重新上线。

什么问题?很多问题! 什么路线?非主流路线! 且听我慢慢道来~~

为什么要搞NAS

关于NAS这个东西,曾经有人问到底为什么要搞?现在网络这么方便,云存储啊。我想了想,大概有这么几个理由:

1、网络影音是方便,画质也过得去,但是在伟大的TIC定律下,你刚追三集的剧,在某个风和日丽的下午可能就poof蒸发了。你的盒子本来有很多正版片源,但在某个月黑风高的夜晚因为没有牌照突然就非法了 。你懂的。

2、对摄影爱好者来说,现在动辄2000万像素的照片,得有个地方备份。有人用USB移动硬盘备份,USB3.0的确实是挺快(比千兆网满速都要快),但我想说用移动硬盘,很不划算也不安全。我的相片库有500G之巨,用这个真心肉疼。

3、现在网络盒子、智能电视什么的,基本都能通过局域网播放由PC共享的片子。但是用PC共享的话,你不嫌机器里的文件太乱吗?媒体库和个人文档什么的还是不要混放比较好。

4、NAS可以把系统放在U盘上,SATA口全都用于存储盘,可以获得更大的空间,也可以使用RAID ZFS等技术加强数据安全。

5、对于笔记本用户来说,内置存储很小,NAS的作用就更显著了。

NAS用来干什么

NAS能实现的功能很多,对我来说相对单纯:仅仅只是文件备份、媒体存储和共享三样就够了。

PC做的NAS,我认为还是做这三件事比较好。如果要挂下载的话,我另外有一台WD Live。虽然PC的功耗并不会很高,但毕竟PC的部件并不是为长期开机设计的,还是会有些问题。

受到惊吓的惨痛经历

前面说了,用了两年的NAS“出了一些问题”,这是我故意轻描淡写,以示淡定成熟。事实上这个过程真是一波接着又一波,波波都有小波波。简单说给你们听下。

(先说一下,之前用的NAS系统是OpenMediaVault,一个基于Debian的NAS OS)

第一波:

添加硬盘到阵列里,reshape不成功 。

第二波:

进入OMV主页……打 不 开 !!! 挂代理,打开了……这么可爱听话的一个OS的网站也会被特色?sourceforge上有iso,但是OMV的官方源也给ban掉了,让我很是疑虑。(目前似乎又恢复了)

第三波:

raid处于降级状态,数据还可以读出。赶紧想尽一切办法,腾出空间来往回拉数据。拉到一半,共享文件夹没了……没了……没了!!!到后台一看,妈呀,RAID里面一块spare,一块fail。

   彻底完蛋了!   

解决的办法简单说下:其实fail原因很简单,就是有一块盘有坏道了。把阵列删掉,再强行组装,跳过出问题的文件就可以了~一次不行就多试几次。

好吧OMV在我村不能用了,四处寻找替代品。

————————————————————————

关于NAS操作系统

NAS OS,目前有这么几个比较流行的,基本上我都玩了一遍。简单说说看法:

FreeBSD系:

FreeNAS:界面漂亮,功能强大,对ZFS有着狂热的执着。越发展,越不适合家用。他们老板家里一定是开内存厂的,推荐的最低要求就要8G,如果你要开什么什么功能,那就得要16G,如果你再开什么什么功能,那你每1T硬盘数据,就得配4GB内存,而且他们还很没人性地推荐你用ECC内存…… 我选择放弃。(其实4GB也能跑ZFS,无非是没有cache罢了)

NAS4Free:就是原来的FreeNAS,2G内存也能跑。功能上基本常用的都有。FreeBSD打底,稳定性想必也是 。用了三天,总体还是比较满意。不足是WebGUI太Geek向,基本是个命令填空生成器,不会FreeBSD的人根本看不懂。

Linux系:

OpenMediaVault:FreeNAS开发人之一不干了,跑出来把FreeNAS移植到了Debian上,弄出了OMV。经过发展,现在比FreeNAS/NAS4Free都要好用,功能强大、界面清爽。美中不足……都被特色了还讲什么足不足的真是 。

Openfiler:一个小众的NAS OS,主打iSCSI,但是2013年以后就没人管了。

关于ZFS文件系统

FreeBSD系的NAS OS,现在都在推ZFS。连Linux都在想方设法要把ZFS移植过去。ZFS确实是有很多好处,比如:ZFS建RAID-Z不需要漫长的预先初始化,有快照等等……

但是,ZFS作为家用的话,有一个死穴!请看 这里我选择放弃。

另一个问题是所谓的“如果你不用ECC,那么很可能scrub操作会毁掉你所有的数据”的说法。国外网友对此说法不一。我个人是不信的。作为一个用作生产环境的FS,不可能这么弱智,ECC就能保证不出一个bit的错吗?

好了,铺垫了这么多,值友们一定在心里想,这位大哥到底选择了怎么样的一个非主流方案呢?

我 直 接 用 Debian Linux!

理由有三:

1、在我们乡下,谁也不能保证哪天FreeNAS/NAS4Free/Openfiler这些东西不会在某天下午突然被特色掉,对不对?所以,任何一种小众系统在我们乡下都是潜在不安全的。这还不说这些系统本身的不稳定因素(比如Openfiler的用户就想不到没人管了,是吧?)debian用的人那么多,乡下的建筑工不见得这么容易砌墙对吧?

2、你其实不用每天管理服务器,WebGUI要了干嘛?(其实我有想过用Webmin,但是Webmin官网居然也被特色掉了)

3、我会用一点点Debian……

好吧,现在开始介绍一下我弄Linux NAS的过程。(以下示例是在虚拟机上做的,不要被我的3块8G硬盘吓倒)

—————————————————————————-

一、硬件配置

我的配置,仅供参考:

主板:华硕B85 M-ATX (现在建议可以考虑H97,因为有6个原生的SATA3)

CPU:Intel 赛羊 G1820

电源:XFS 550W(这个是刚买的,有点浪费的感觉,原因是被磁盘损坏的问题搞怕了)

硬盘:3T*4(ST WD的NAS盘各一块,ST SV35两块,建议你们用同型号同规格盘)

当然,我这个配置是比较奢侈的。你完全可以选择像Gen8这样的机器,SATA 3还是SATA 2也不用在乎,上了RAID5以后速度都撑满千兆网。

二、软件安装

1 准备U盘

准备一支上好的U盘,比如Sandisk的这款:

 

闪迪(SanDisk) 至尊高速(CZ48) 32GB USB3.0 U盘 读100MB/s 写40MB/s…
说起高性能U盘,大家最熟悉的莫过闪迪了(Mushkin之类的奇葩就不考虑了),闪迪的U盘产品线拉的非常长,从低价TLC小容量U盘到经常推荐的至尊极速 CZ80性能相差很大。这款至…
¥51.9京东查看百科详情

 价格低、速度快,Sandisk质量靠谱。这个作为系统盘用。如果不差钱,用CZ80级别的更好。

再准备一支U盘,随便啥的都可以,作为安装盘。

2 制作安装盘

到这里下载Debian 8.2安装iso。可以选择netinst,比较小。

使用合适的工具把iso文件写入安装U盘。比如我用的UltraISO:

流程:打开UltraISO -> 文件-打开-选择debian 8.2的iso -> 启动-写入硬盘映像 -> 选择安装U盘,写入 -> 等完成。

很简单。

3 安装系统

两个U盘都插上NAS机器,开机,选择安装U盘启动。

选择“Graphic Install”。

选择语言、键盘布局、国家地区、时区等。

输入主机名称和域名。主机名称取得好记一点,域名留空即可。

输入root密码,两遍:

新建一个普通用户,同样要输入两遍密码:

好了,关键点来了,分区。这一步关键在于一定要在系统U盘上分区。建议就把系统U盘分一个区加一个swap(相当于windows的pagefile)即可,分区格式选ext4,挂载点/。

swap和内存设一样大,或者像我这样有4G以上内存的,干脆不用swap分区也行,放着也没问题,基本不会用上。分区的操作不是很直观,像下面这样操作:

第一步选manual模式,以防分错盘:

第二步,在现有U盘(高亮的这一条)上双击,接下来的界面中选择创建一个新的分区表。

第三步,在Free Space上双击,选择“Automatically partition the free space”,自动分区。

第四步,选择分区方案,把整个U盘分一个/分区就可以了。

第五步,点击“finish partitioning and write changes to disk”,写入分区表。

OK了。

接下来,配置软件源。用国内的163 中国科学技术大学的源都比较快。

选择要安装的软件。建议只选SSH Server(也一定要选)和标准系统工具。

安装Grub(Linux的引导器),选yes。

选择grub安装位置,一定要选U盘。

好了,安装完成。把安装盘拿掉,重启,(别忘了将启动盘设置为系统U盘)。

4 基础设置

使用root帐号登录进去。 纯文本界面,好~酷~哦~~~

先做几年基础设置的事:

(1)安装一些软件

vim/nano : 文本编辑器,初学者建议用nano

samba : Samba/CIFS文件共享服务

mdadm : Software Raid管理器

collectl : 系统性能数据监控

cpufreqd : 启用Intel SpeedStep/EIST功能来节约功耗

安装软件用apt就可以了,主要以下几个命令:

apt-get update : 先运行这个命令,用来更新本地的apt cache。

apt-get upgrade:更新所有软件。

apt-get install 软件名:安装软件,比如装nano,用apt-get install nano。

(2)配置网络

系统默认是使用DHCP的。NAS服务器最好用静态IP。

修改/etc/network/interfaces :

注释掉iface eth0 inet dhcp这一句,并加上以下几句:

iface eth0 inet static

address 192.168.x.x(静态IP地址)

netmask 255.255.255.0(掩码,一般都是这个)

gateway 192.168.x.1(路由器地址)

网络设置完了以后,重启下。

(3)配置SSH服务

SSH就是远程操作服务器的服务。默认状态下不允许root登录,需要修改一下。

修改/etc/ssh/sshd_config这个文件,做两个修改:

一个是PasswordAuthentication yes这一条,把前面的#去掉,这是允许密码登录:

第二是PermitRootLogin,改为yes:

如果你对root登录不放心,将来可以考虑用普通用户登录,用sudo命令提权执行需要root权限的命令。还可以用RSA/DSA证书来登录。在此不表。

 安装和基础配置到此为止,现在把显示器卸下来,机器搬到NAS专用位置,接上电源线和网线,接下来更高大上,我们用SSH做剩下的事。

三、存储配置

使用XShell等软件连接上NAS的SSH,并用root帐号登录:

存储的选择,之前已经提过,ZFS看来是不太适用,在Linux中,你可以选择以下的方案:

A 最简单,每个盘一个文件系统,单独挂载,单独共享。比如你有四个盘,那就是四个共享盘。这种做法非常简便易行,维护起来也简单,缺点是需要四个共享盘,内容管理起来不方便。比如你要有很多电影的话,要分开存放在不同的盘,找起来就不容易。另外性能上不够稳定,在磁盘外圈存的数据很快,到了内圈速度就下来了,千兆网吃不饱。

B 用LVM,把四个盘在逻辑上集合成一个大盘组,再分区。这样解决了统一存放的问题。缺点是性能不稳,维护较难。

C 用RAID阵列。RAID有0 1 10 5 6等级别,RAID0的性能很强,但是万一有一块盘坏了,整个阵列就废了,肯定不能用。RAID1的安全性最好,读取速度也不错,但浪费空间,四块盘只相当于两块盘的空间。我选的是RAID5。

RAID5是这么个原理:交替在各个盘上写数据,这么看类似于RAID 0,但是每写n-1个盘的数据,剩下的那个盘写的就不是数据,而是校验数据(parity)。这样一来,如果有一块盘坏掉,那么就可以用剩下的盘上的数据来恢复数据。即便你临时无法找到另一块盘来替换坏盘,阵列也能进入降级模式,重要的数据也可以直接读取备份出来。

1 配置RAID5

使用mdadm这个工具来配置RAID 5。

好比有三个盘sda sdb sdc:

创建RAID 5:

mdadm –create /dev/md0 –level=5 –chunk=512 –raid-devices=3 /dev/sd[abc] –spare-devices=0

以上命令参数,

–create表示创建

/dev/md0是raid5卷的设备名

–level=5指示要创建一个RAID5阵列

–chunk=512表示使用512k的chunk(具体多大可自行百度)

–raid-devices=3表示用3个盘来创建,/dev/sd[abc]表示是/dev/sda /dev/sdb /dev/sdc三个盘

–spare-devices=0表示不用后备盘。

执行后,再用这个命令检查一下raid状态:

cat /proc/mdstat

如果显示成这样,就表示正在创建raid5卷:

这里的recovery过程其实就是初始化raid5,过程中理论上可以关机,下次再开机会恢复,但是建议尽量还是等它完成再关机。盘多空间大的话过程会相当慢,你可能需要等待:

初始化什么时候完成呢?当你机器的硬盘灯不亮了,它就完成了…… 完成初始化的raid状态是这样的:

如果第四排最后不是[UUU]而是别的什么,比如[UU_],就要注意了。

查看详细的raid信息用这个命令:

mdadm –detail /dev/md0

三个盘都是active sync,在线,同步,爽爽的。 

接下来对/dev/md0格式化。用这个命令:mkfs.ext4 /dev/md0

2 挂载raid卷

在/mnt底下新建个目录:

mkdir /mnt/mdstorage(名称自己编)

把/dev/md0挂上去:

mount /dev/md0 /mnt/mdstorage

成功了! 

但是总不能每次都手工加载,所以要用vim或nano改一下/etc/fstab这个文件,把md0加到自动挂载列表里:

加上最后这一句。设备名可以用/dev/md0这样写,也可以用UUID表示。推荐的是用UUID。用blkid /dev/md0命令可以显示md0的UUID。

重启测试一下是否正常。

存储部分就算配置完成了。大成功!

四、Samba服务配置

Samba服务是NAS最基本的功能之一。它就是Windows中的文件共享。当然文件共享有很多种服务都可以,比如NFS Samba等等,但是Win8开始貌似就不支持NFS了,还得装第三方软件才行,所以还是用Samba比较方便。

Samba的配置比较复杂。分步来看:

1、新建用户组和用户,专门用于samba,新建用户组用groupadd命令,新建用户用useradd,add完以后用passwd 用户名来设置密码。

2、在/mnt/mdstorage下新建一个目录,作为samba根目录,并将文件夹所有者和所有者组设置为刚才新建的那两个。

mkdir /mnt/mdstorage/nasshare

chown -R nasadmin:nasusers /mnt/mdstorage/nasshare 

3、将第一步里新建的用户导入进samba里:

smbpasswd -a nasadmin,输入两遍密码,记住这是samba用户的密码。

4、修改samba配置文件

首先修改这么几个地方:

设置可访问服务的主机IP列表:

hosts allow = 192.168.1.

这表示只允许192.168.1.2-255的主机访问,按你内网的情况具体修改。

禁止home目录共享和打印共享:

将Share Definitions一段中[homes]和[printers]、[print$]的部分全部加上#符号。

然后咱们开始添加真正的共享目录:

现在在Share Definitions整段应该都被注释掉了,在最后新加这么几行:

[mynas]

    comment = Nas Share

    browseable = yes

    path = /mnt/mdstorage/nasshare

    guest ok = no

    read only = no

    create mask = 0640

    directory mask = 0750

    valid users = nasadmin

    write list = nasadmin

    vfs objects = recycle

    recycle:versions = yes

    recycle:exclude = .tmp|.temp

    recycle:keeptree = yes

其它的都好理解,最需要注意的是两个mask。它指示了当你使用samba共享目录时,创建的文件和目录的权限!我这里分别设置为文件权限0640,目录权限0750,代表的意思是:文件所有者(nasadmin)可以读写,组成员可以读,其它人啥也不能干。目录的所有者可以读写,可以新建、重命名和删除目录,组成员可以读和列出内容,其它人啥也不能干。

另外,recycle的部分,用于开启回收站,默认的被回收的文件在根目录的.recycle底下。

如果你对环境比较放心,也可以设置得宽松一些。

设置好了,运行:systemctl restart smbd ,重启samba服务。

接下来是见证奇迹的时刻!

到你的电脑上,比如Win7上,在网络里面找NAS机器的共享:

好激动, 点击它,输入用户名(nasadmin),密码,进去了,进去了!!   

新建个文件夹试试,新建个文件试试,一切OK~~~

如果需要的话,建议把这个共享映射到本机,以后操作就像本机的一个分区一样。

另外,有时候你可能需要在其它机器上读取,但不希望别人误操作删掉你的文件,那么就可以在nasusers组里新建一个用户,导入到samba中,由于权限的限制,这个用户只能读,不能修改写入,就比较保险了。

五、维护

每个月最好维护一下,最主要两件事:

1、更新软件

apt-get update

apt-get upgrade

2、检查RAID状态

cat /proc/mdstat

mdadm –detail /dev/md0

最主要看看有没有盘FAIL掉,raid是否健康。一块盘fail,阵列会降级,但你在共享中是看不出来的。所以要经常查看一下,免得又坏一块,那就回天无力了。

—————————————————————–

最后,请允许我小小的总结一下。

NAS,尤其是PC-NAS,用它来挂BT、当web服务器都不是很合适。但是你会发现你的电脑里挂了3、4块硬盘,而里面一大半数据是不常用的,你觉得每次开机都要启动这些硬盘好费电,而且数据那么多,硬盘好乱,每次找文件就像在大海里找一叶小舟,你觉得很无助好想哭。而且,有一些重要的数据,你会想要找个地方来备份它,而NAS,就是拯救你的这么个东西。

当你决定购买一款NAS,你是否真的需要一台成品机?那些机器很好用,小巧、省电、安静、软件强大。但是它的价格让你肝颤,它的性能不温不火(要达到我的配置的性能水平,四千以下的成品机搞不定),而当你需要扩展时难于登天。万一有一天机器挂掉,想救出数据又是一个极其艰难的任务。而且,它的功能多数你是用不上的!难道你真的会用一台4盘位的NAS来7*24小时挂下载吗?你真的需要web server吗?你在家需要LDAP吗?你需要自己建云存储?

好了,你选择用PC来搭建NAS,你需要FreeNAS/NAS4Free/OpenMediaVault这些NAS OS吗?……是的,你需要…… 可是,在我村这样对“可控”非常敏感的地方,这些没有“主管部门”的组织,是很容易被那啥的。所以,如果你在国内,最好不要选它们。

除了成品NAS,自己动手,是目前来说最让人放心的一种做法。

上面的配置内容看上去很多,但其实并不复杂(教师口气),一个晚上的时间就可以搞定。

而它是多么让人安心呢?如果你对这台机器不满意,你完全可以再配一台机器,把硬盘、U盘转移到新机器上,开机仍然是一切照旧!如果你不喜欢Debian,你完全可以换成Ubuntu Fedora CentOS……,RAID5卷并不会丢失,只要重新配置一下samba什么的就好了……天哪太棒了 

而且,此时你已经不需要被那些NAS OS束缚,你可以想干嘛就干嘛,你就是主宰,你就是root。说实话习惯了SSH以后,什么WebUI那都是浮云。

如果你实在接受不了SSH这种方式,得了“看到命令行我就想吐”的病,那你也可以试试安装一个图形界面的Linux,然后用VNC或者是xmanager这样的软件从Windows上远程操作。

如果你需要UPnP/DLNA,也可以自己去安装miniDLNA、Fuppes这样的软件,配置方法网上都有,各大搜索引擎一搜一大把。

最后再声明一下,本人不是Linux专业人员,以上配置均为网络搜索或自行摸索的结果,如果有技术大牛觉得不对,请不吝赐教!