大概是2014年的时候,出于好奇,买了一个树莓派的二代产品。期间,曾经将它改造成为过影音播放器(类似于电视盒子)、游戏机等等,但都没什么大的作用,后来就一直放在角落处吃灰。

这段时间以来,家里的电子产品越来越多,对于共用存储的要求也越来越大,于是就想着要建一个NAS。看到过网上介绍的用树莓派实现的案例很多,也就决定将吃灰的树莓派找出来,改造一个。

原材料

树莓派一只,网线一根(3代以前的没有板载的WIFI),移动硬盘一只。

改造过程

制作系统

由于改造的目标只是一个用于后台服务的NAS,不需要图形界面,且板子年代久远,如果安装官方提供的系统的话,会比较的耗资源。因此决定安装Archlinux。其安装过程也比官方系统简单,具体如下:

1.SD卡分区

Linux下可使用cfdisk /dev/sdX,将SD卡分成两个分区,一个是大约100M左右,另一个就是SD卡剩下的所有空间。

2.格式化分区

根据系统需要,将SD卡上的第一个分区(100M)格式化为FAT格式,Linux下可使用mkfs.vfat /dev/sdX1;将第二个分区格式化为ext4格式,Linux下可使用mkfs.ext4 /dev/sdX2。

3.挂载分区

建立一个临时目录,并在其中建立两个文件夹,分别命名为boot和root。

Linux下可使用mount /dev/sdX1 boot 以及mount /dev/sdX2 root两条命令,将两个分区分别挂载到boot和root下。

4.安装系统

安装系统的过程非常简单,执行以下命令即可。

1
2
3
4
# wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz
# tar -zxpf ArchLinuxARM-rpi-latest.tar.gz -C root
# sync
# mv root/boot/* boot

至此,系统制作完毕,只需要将SD卡插入树莓派通电即可运行。需要注意的是,此时,只能以用户名alarm(密码同)来登录系统,如果需要使用root账户,可在alarm登录后,使用su(密码为root)进入root账户,编辑/etc/ssh/sshd_config文件,在最后添加PermitRootLogin yes,重启系统或ssh服务即可。

挂载移动硬盘

移动硬盘的挂载比较简单,主要通过以下两步:

1.安装ntfs-3g

因为此时的archlinux还是一个非常精简的系统,如果移动硬盘是NTFS格式,还不能辨识挂载,因此需要安装ntfs-3g

2.开机挂载

在/mnt下建立一个文件夹,例如usb作为移动硬盘的挂载点,然后编辑/etc/fstab,在最后加入以下代码:

1
/dev/sda1 /mnt/usb ntfs-3g user,rw,umask=000    0       0

重启系统,此时移动硬盘就挂载到/mnt/usb文件夹下了。

打造SAMBA共享

既然是NAS,就肯定要提供共享功能。这一部分,可以参考archlinux Wiki上的指导完成。

1.安装SAMBA

1
sudo pacman -S samba

2.获取SAMBA默认配置

1
wget "https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD" -O /etc/samba/smb.conf

3.建立共享

编辑/etc/samba/smb.conf文件,添加以下内容:

1
2
3
4
5
6
[share]
path=/mnt/usb #共享路径
valid users=alarm #共享用户名
browseable=yes
public=yes
writable=yes

4.建立sambashare用户组并配置权限

1
2
3
groupadd sambashare
chown root:sambashare /var/lib/samba/usershare
chmod 1770 /var/lib/samba/usershare

5.添加用户到群组中

1
usermod -a -G sambashare your_username

6.添加用户并设置密码

1
smbpasswd -a samba_user

重启系统后,samba共享就建立好了。手机、智能电视都可以安装ES文件浏览器来访问共享了。

建立下载服务

1.aria2的安装

这里的下载服务主要是通过aria2来完成的。因此,首先要安装aria2,可通过sudo pacman -S aria2来安装。

2.aria2的配置

在用户目录下创建一个名为.aria2的文件夹,并在文件夹内建立aria2.conf和aria2.session。

编辑aria2.conf,以其中输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#rpc-user=user
#rpc-passwd=passwd
#rpc-secret=token
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
#rpc-listen-port=6800
input-file=/home/**YOURTPATH**/.aria2/aria2.session
max-concurrent-downloads=5
continue=true
max-connection-per-server=10
min-split-size=10M
split=10
max-overall-download-limit=0
max-download-limit=0
max-overall-upload-limit=0
max-upload-limit=0
#lowest-speed-limit=0
#referer=*
dir=/mnt/usb/videos
#disk-cache=0
#enable-mmap=true
file-allocation=trunc
save-session=/home/**YOURTPATH**/.aria2/aria2.session
save-session-interval=300

3.aria2开机自启

将aria2作为系统服务,使其开机自启。在/etc/systemd/system下建立一个名为aria2.service的文件,在其中输入以下内容并保存。

1
2
3
4
5
6
[Unit]
Description=Aria2 Service
[Service]
ExecStart=/usr/bin/aria2c --conf-path=/home/alarm/.aria2/aria2.conf
[Install]
WantedBy=default.target

此时,只需要sudo systemctl enabel aria2.service,就可以将aria2可以作为一个系统服务运行了。

4.WebUI的建立

(1)安装nginx服务器

(2)配置nginx服务器

修改/etc/nginx/nginx.conf中的location部分为以下内容:

1
2
3
4
location / {
root /var/www/html; #修改此处为存放WebUI页面的位置
index index.html index.htm;
}

(3)建立/var/www/html目录

(4)安装WebUI内容

1
sudo git clone https://github.com/ziahamza/webui-aria2.git /var/www/html/

此时,重启nginx服务,就可以通过http://localhost 来浏览WebUI页面了。

远程管理

由于树莓派运行在家庭网络中,没有公网IP,那如何在外网对其进行管理呢?以下内容需要用户自备一个拥有公网IP的VPS或者服务器。

该部分主要使用的是ssh的反向代理功能,其工作原理通过阅读ssh的参数说明即可了解。

-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口

因此,主要使用的是SSH -R的功能,将树莓派的本地端口转发到VPS的远程端口上,再通过VPS的端口进行访问。以下为主要步骤。

1.建立免口令登录

通过以下命令,生成一个ssh的密钥,并传送到VPS上,实现ssh免密码登录

1
2
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub user@VPS

2.建立自动登录的服务

在/etc/systemd/system下建立一个名为myssh.service的文件,并在其中输入以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=My Reverse SSH Service
ConditionPathExists=|/usr/bin
After=network.target

[Service]
User=root
ExecStart=/usr/bin/ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -i /home/**YOURPATH**/.ssh/id_rsa -R 2222:localhost:22 -R 8081:localhost:80 -R 6900:localhost:6800 user@VPS

RestartSec=3
Restart=always

[Install]
WantedBy=multi-user.target

启动这个服务。此时,就将本地的22端口映射到了VPS的2222上,将80端口映射到了8081上,将6800端口映射到了6900上。在外网也就可以来管理树莓派了。

移动硬盘的优化

由于树莓派处于不间断的工作状态,如果不对移动硬盘的配置进行优化,那么势必会导致移动硬盘也一直处于运行状态,长此以往,会大大降低移动硬盘的寿命。因此,在打造完成NAS基本功能之后,再来对移动硬盘进行一些配置。

1.安装hdparm

2.hdparm的配置

一是加载一条hdparm运行的规则,具体如以下步骤。编辑/etc/udev/rules.d/50-hdparm.rules,并在其中输入:

1
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"

其中:参数B表示设置高级电源管理功能,其值应在1-255之间,值越小意味着越积极的电源管理,越大意味着更好的性能。从1-127表示允许减速,从128-254则表示不会减速,255表示禁用该功能。参数S表示设置驱动器的待机超时,表示在一定时间后就关闭电机,值为0的时候表示禁用,值从1-240之间,是指该值乘以5秒以后的时间,如12表示60秒,从241到251之间,则表示该值乘以30分钟后的时间。

二是可以创建一个服务,让树莓派开机时就运行节能功能。具体可参考以下代码。

1
2
3
4
5
6
7
8
9
[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sda

[Install]
WantedBy=multi-user.target

如此,一个可以服务家庭基本应用的NAS就搭建完毕了。