What can NAS be used for

NAS 可以用来做什么?

写一些我个人搭建NAS后的主要用途。已经买了NAS可以看下有没有哪方面能拓展自己的应用。或者有购买或搭建NAS意向的可以看着参考一下自己是否真的有这方面的需求,避免盲目跟风导致吃灰。

本人的配置 Intel N6005/16G内存/512G固态/12T RAID1(4T*6)
系统Archlinux。
网络300M宽带,动态公网IP+DDNS。

远程存储及读取

这是绝大多数人买NAS的第一需求甚至唯一需求,我也不例外。固态硬盘中安装了系统、常用软件包和各种编译环境。RAID1机械盘中存放了所有的文档、照片、视频、音乐。我没有直接把 /dev/md0 挂载成 /home ,而是挂载到 /data ,然后在用户家目录中建立软链接:

1
ln -s /data/[id]/videos ~/

这样做是因为我家目录下要放不少个人的程序项目。这些项目不想跟娱乐文件混淆在一起。你如果乐意完全可以把数据盘挂载成 /home

远程传输

所有的远程传输我都是通过 ssh 及其衍生功能( scp , sftp )来达成。安装好 openssh 包并且配置好自定义端口、禁止root和密码登录、启用密钥登录并配置好 authorized_keys 以后,即可在远程客户端利用 scp 命令或者gui客户端进行文件传输(注意要自己在客户端写好对应的 ~/.ssh/config )。如果是桌面系统(Windows/MacOS/Linux Desktop),也可以直接用 sshfs 挂载NAS到本地目录:

1
sshfs [id@]nashost:[dir] ~/nas

如果你要用移动端访问,则可以选择支持sftp密钥登录的文件应用。我自己用的是安卓端的 Cx File Explorer 和iOS端的 Secure Shellfish

另外,如果你需要视频播放器直接播放NAS上的视频文件,也许你需要建一个用户并且专门为它启用密码登录。因为大多数移动端视频播放器并不支持密钥登录sftp服务器。(桌面端没关系因为sshfs可以把nas映射成本地目录,这样你就能用任何播放器当本地视频来播)

1
2
3
4
5
6
7
8
9
10
11
sudo useradd remoteid
sudo passwd remoteid
sudo nano /etc/ssh/sshd_config

# Add following entries to the end of the file '/etc/ssh/sshd_config'
Match User remoteid
ChrootDirectory /data
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes

同步备份

将照片或某些文档同步备份是一项很常见的需求。不过我自己没有搭那些私有云的同步解决方案。我自己手机上拍的照片就用了默认的iCloud和Google Play同步。我的选择是在NAS上安装 MinIO 服务,然后在桌面客户端上使用 minio clientmc mirror 命令对需要的文件和项目进行同步。 mc mirror --watch 是一个进程可以写进 systemd 里,开启后会监视需要同步的目录的文件改变进行相应增删操作。至于为什么移动端不能进行这样的同步,主要是手机无法像pc那样将常驻一条系统进程监视文件系统目录的增减,除非是root过后的安卓然后强行突破权限。手机上这样做很麻烦且得不偿失,我就没有继续尝试。

离线下载

其实就是通过远程操作把资源下到NAS里。我自己一般是直接终端ssh进去,用 wget 下直链,用 transmission-remote 下种子:

1
2
wget 'http://download.link/file'
transmission-remote -n user:pass -a 'http://torrent.path/file.torrent'

如果是百度云,可以用 bypy

1
2
pip install bypy
bypy list

会提示登录网页获取token后贴到终端就可以登录了,然后用

1
2
3
4
bypy syncdown
bypy syncup
# or
bypy downdir /dirname

进行上传下载。

如果是阿里云盘,可以用 aliyunpan

1
2
3
4
5
6
7
8
9
wget https://github.com/tickstep/aliyunpan/releases/download/v0.2.6/aliyunpan-v0.2.6-linux-amd64.zip
unzip aliyunpan-v0.2.6-linux-amd64.zip
cd aliyunpan-v0.2.6-linux-amd64
./aliyunpan

# or if you have golang installed
go install github.com/tickstep/aliyunpan@latest
cd ~/go/bin
./aliyunpan

目前百度盘非会员限速严重,阿里云盘暂无限速,未来则不确定。

视频转码压缩

大多数时候你下载的电影电视剧都是用的最常用格式和编码,如mp4/h264或mkv/h65。这些视频大多数播放器都能直接播。而如果你下的是bdrip raw,那往往就需要先转码才能远程串流播放。

最常用的转码工具当然是 ffmpeg

1
ffmpeg -i moviename.m2ts -map 0:0 -c:v libx264 -map 0:1 -c:a aac -map 0:9 -scodec copy MovieName.mkv

虽然NAS没有显卡,但是有些cpu也是有 Hardware Acceleration 的,你可以在参数里加上相应的硬件加速,参考 这一篇装好相应的驱动软件包。

1
2
ffmpeg -vaapi_device /dev/dri/renderD128 -i moviename.m2ts -map 0:0 -c:v hevc_vaapi -map 0:1 -c:a aac -map 0:9 -scodec copy MovieName.mkv

当然,CPU的硬件加速肯定不如显卡给力,这样的转码往往需要很久。

内网中继

一般家用电脑或者其他内网设备不会被暴露给公网。NAS作用唯一的公网可访问设备,可以临时当一下中继(譬如你出门忘关电脑)。
ssh进NAS后通过内网地址访问到家用PC:

1
2
ssh user@192.168.1.x 
shutdown /s /t 0

当然也可以作为 wol 的唤醒端,在你需要的时候远程开启家用电脑并访问。

1
2
# 你需要先知道家用PC网卡的mac地址并在BIOS/UEFI上启用WOL
wol target_MAC_address

事件监听

如果你跟我一样有写机器人的需求(譬如 telegramdiscord ),那么你往往需要这么一个服务器来放机器人相应的事件handler.最好的选择当然是买个VPS来放。不过要是你的机器人平时访问量不大,而且你刚好有台NAS。那么用NAS来放这个机器人事件监听进程也未尝不可。

智能家居中枢

Home Assistant是一个python模组,可以用来管理一些智能家居的自动化。安装起来很容易,

1
pip install homeassistant

不过我试用下来只有水果家的 HomeKit 可以很好地支持,国产的像是小米米家的部分设备就搜索不到(如果同时支持homekit和mijia的就可以)。如果你家里的生态是水果家的生态,或者智能家居走得都是通用协议(zigbee/mqtt),那么用这个工具可以很好地编写家电控制脚本。

除了直接编写python脚本外, HomeAssistant 甚至提供了网页GUI。非常人性化。

家庭监控推流

用NAS可以很方便地把 usbcam 变成 ipcam 。普通的USB摄像头插上去后会识别成 /dev/video0 (video后面数字根据具体设备数而定)。同样用 ffmpeg 可以把摄像头推流到 rtsp server

首先需要安装一个rtsp服务,推荐 rtsp-simple-server

下载解压后,甚至不用改配置直接运行

1
2
cd rtsp-simple-server
./rtsp-simple-server

然后开启 ffmpeg 推流:

1
ffmpeg -vaapi_device /dev/dri/renderD128 -f v4l2 -s 1280x720 -i /dev/video0 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -qp 20 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/home

然后你就可以用vlc之类的工具直接观看自家摄像头的rtsp流了。当然了,出于安全考虑,务必在实际应用的时候在配置文件中加上推流(publish)和读取(read)的用户名密码验证

1
2
3
4
5
6
7
8
9
10
nano rtsp-simple-server.yml

paths:
all:
publishUser: yourusername
publishPass: yourpassword
publishIPs: [127.0.0.1/16]

readUesr: yourusername
readPass: yourpassword

然后用 rtsp://yourusername:yourpassword@nashost:port/home 来读取视频流。
不这么做有可能会让你家的实况被全球直播,切记切记。


暂时先写这些,如果有其他想法欢迎补充。