把你的树莓派打造成一个NAS

本文由 极客范 - 孔垂瑾 翻译自 James Bruce。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

你有闲置的移动硬盘和树莓派吗?你可以用这些来打造一个廉价而且低能耗的NAS。最后的效果肯定比不上售价500美刀的NAS,比如Synology DiskStation出品的那些。但可以搭建出一个低能耗的网络存储平台——而且特别适用于已经厌倦了国家安全局的数据监控的那些人,你可以把数据藏在这个“小阁楼”里。
featured-pi-nas

你需要一个树莓派,和一两个闲置着的移动硬盘。体积较小的2.5硬盘可以由USB接口直接供电,但是我们需要一个带有供电功能的USB分线器,因为树莓派的USB接口提供的电是不足以给移动硬盘供电的。除此之外你也可以用thumbdrive,甚至是一张SD卡。事实上我现在在用的就是一个USB口的移动硬盘和一个thumbdrive搭建的,操作流程都是一样的。
ubs-drives

只用一个硬盘,也可以搭建分享文件的网络存储器,但是用两个硬盘,就可以设置数据备份,以防有一个硬盘坏掉。

准备硬盘

最初的步骤是在台式机上格式化硬盘。这是为了方便,如果出了问题,我们可以把硬盘从NAS上拔下来,还可以在一台PC上读上面的数据。

可以在树莓派上格式化,但是会花上几个小时,从台式机上格式化会快很多。现在就去做吧。

设置SSH,开启root用户,首先为root用户设置密码:
sudo -i
passwd root
(输入你的密码)

然后在命令行下面运行raspi-config脚本,可以用sudo命令,也可以注销当前用户,然后以root用户的身份登陆。在高级选项菜单中,开启SSH。
advanced-options

重启后,你应该可以从联网的另一台机器登陆(如果在windows上,可以使用Putty):
SSH root@[IP地址]

登陆之后,搞清楚插上去的硬盘在/dev下面的编号是什么。下文假设使用两个硬盘,创建数据备份。输入
fdisk -l

会显示出已经挂载的存储设备。你应该看到类似于这样的画面:
fdsik

/dev/mmc是树莓派系统的分区,mmc指的是SD卡。/dev/sda1和/dev/sdb1和SD卡没有关系,这些是你插上去的USB硬盘(本意是SCSI驱动器,但是现在用来指任何SATA口的或其他存储器)

安装ntfs-3g模块,于是我们就能读写NTFS格式的硬盘了。
apt-get install ntfs-3g

然后创建一个目录,以这个目录作为挂载点挂载硬盘。为简单起见,下文用1和2来指代。
mkdir /media/1
mkdir /media/2
mount -t auto /dev/sda1 /media/1
mount -t auto /dev/sdb1 /media/2
mkdir /media/1/shares
mkdir /media/2/shares

Samba

下一步我们来设置Samba。Samba是Windows使用的网络文件共享协议(事实上最新的OSX Mavericks也支持)
apt-get install samba
apt-get install samba-common-bin
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
nano /etc/samba/smb.conf

如果你不熟悉这类配置文件,行首的#表示这一行是注释,于是这一行的配置也就不会生效。要开启一项功能,可以自己添加一行,也可以把某一行前面的注释符号去掉,让它生效。

我们先来启动用户安全;按下CTRL-W然后输入”security”,来找到相关的选项。去掉这一行前面的注释符号:
security = user

然后,移动到文本末尾(或者按住CTRL V直到移动到了末尾),添加网络共享,数目取决于你自己的需求。使用这种格式:
[test] comment = Test share
path = /media/1/shares
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no

只有第一块硬盘的配置——之后我们将用第二块硬盘和第一块同步,以进行备份。

完成编辑之后,按下CTRL X然后按y来退出。
samba-config

然后用下面的命令重启Samba。
service samba restart

现在给你的树莓派添加一个用户,假设你不想用同一个用户来访问(下文的”jamie”是用户名)
useradd jamie -m -G users

输入下面的命令给新用户设置密码,完成后确认。
passwd jamie

然后我们把这个用户加入到Samba中。你需要两次确认你的密码。
smbpasswd -a jamie

然后就去测试网络存储功能吧,应该可以在其他机器上看到了(Windows或Mac),而且你应该可以往上面写入文件。
file-on-nas

现在还剩一个问题,你重启树莓派,驱动器的挂载就会失效。为了解决这个问题,我们需要安装autofs。
apt-get install autofs
nano /etc/auto.master
在+auto.master下面加入一行:
/media/ /etc/auto.ext-usb –timeout=10,defaults,user,exec,uid=1000

现在就可以安全重启,不会破坏配置了。

数据备份

如果你安装了两个硬盘,我们现在就可以用一个脚本来同步数据,如果一块硬盘坏了,还有一份备份的。我们用rsync来做备份。
apt-get install rsync
crontab -e

linux下面的crontab是用来自动运行某个任务的一个软件。我曾经在《自动备份你的网站》中简要提到过。加上这一行:
30 5 * * * rsync -av –delete /media/1/shares /media/2/shares/

数字的格式是这样子的:
分钟|小时|一个月中哪一天|月份|一个星期中哪一天

所以我们加进去的那一行,rsync命令会在每天的早晨5点30分运行(*通配符表示“所有”,所以会在“每个月的每一天”运行)

如果你想立刻进行一次备份,只要粘贴这个rsync的命令:
rsync -av –delete /media/1/shares /media/2/shares/

取决于共享文件夹里放的东西,耗费的时间可能只要几秒钟,也可能会长一些,在完成之后会给你一个报告。rsync最棒的地方在于它会记录哪些文件更新了,哪些文件添加近来或是应该被删除。你可以再试一遍那个命令,应该立刻就会完成的,因为rsync知道没有文件发生了变动。

教程到这里就结束了——现在你搭建起了自己的NAS,虽然细节上有待改进,但是现在就可以用起来了。虽然没有市面上出售的NAS那些华丽的特性,但是它也能漂亮地完成任务,而且耗电会少很多。

有问题请在评论区提出,我会尽力帮忙的,但是请确定你在使用最新的树莓派系统镜像。



原文链接: James Bruce 翻译: 极客范 - 孔垂瑾

译文链接: http://www.geekfan.net/2767/

[ 转载请保留原文出处、译者和译文链接。]

读TAOCP,爱Lisp,用OS X的一名hacker 新浪微博:@rosynirvana

4 评论

  1. Y.S  /  2013 年 8 月 8 日, 下午 3:10 回复

    廉价、低功耗确实不假,但百兆网卡的速度我就不想吐槽了。换成千兆网卡做NAS很合适。

    Thumb up 1 Thumb down 0

    • pesoft  /  2013 年 9 月 4 日, 上午 8:51 回复

      曾经尝试过,网络速度太慢。下载也不方便。

      Thumb up 0 Thumb down 0

  2. [...] 原文链接: James Bruce 翻译: 极客范 - 孔垂瑾译文链接: http://www.geekfan.net/2767/[ 转载请保留原文出处、译者和译文链接。] [...]

    Thumb up 0 Thumb down 0

  3. 通过树莓派局域网中共享影片和文件 | Nginlion  /  2013 年 10 月 20 日, 下午 11:50 回复

    [...] 但是问题在于,每次更新硬盘内容还是超级麻烦的,要从电脑上拷进下好的电影到硬盘,然后又通过OTG线插到盒子上,手头上有一个树莓派,想了一下这货跑的不就是debian的一个变种吗,想起以前别人共享文件的办法,决定试试看安个samba上去试试,配好了做个网络位置映射,直接把迅雷什么的下载目录设定成映射的位置。配置的过程可以参考这篇文章。另外,为了能够挂载外接的硬盘,需要一个有源Hub。有了有源Hub,Pi也不需要电源线了,直接从USB就能供电。 [...]

    Thumb up 0 Thumb down 0

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">