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 | sudo useradd remoteid |
同步备份
将照片或某些文档同步备份是一项很常见的需求。不过我自己没有搭那些私有云的同步解决方案。我自己手机上拍的照片就用了默认的iCloud和Google
Play同步。我的选择是在NAS上安装 MinIO
服务,然后在桌面客户端上使用 minio client
的
mc mirror
命令对需要的文件和项目进行同步。
mc mirror --watch
是一个进程可以写进 systemd
里,开启后会监视需要同步的目录的文件改变进行相应增删操作。至于为什么移动端不能进行这样的同步,主要是手机无法像pc那样将常驻一条系统进程监视文件系统目录的增减,除非是root过后的安卓然后强行突破权限。手机上这样做很麻烦且得不偿失,我就没有继续尝试。
离线下载
其实就是通过远程操作把资源下到NAS里。我自己一般是直接终端ssh进去,用
wget
下直链,用 transmission-remote
下种子:
1 | wget 'http://download.link/file' |
如果是百度云,可以用 bypy 1
2pip install bypy
bypy list1
2
3
4bypy syncdown
bypy syncup
# or
bypy downdir /dirname
如果是阿里云盘,可以用 aliyunpan 1
2
3
4
5
6
7
8
9wget 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 | 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 | ssh user@192.168.1.x |
当然也可以作为 wol 的唤醒端,在你需要的时候远程开启家用电脑并访问。
1 | # 你需要先知道家用PC网卡的mac地址并在BIOS/UEFI上启用WOL |
事件监听
如果你跟我一样有写机器人的需求(譬如 telegram
或
discord
),那么你往往需要这么一个服务器来放机器人相应的事件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
2cd rtsp-simple-server
./rtsp-simple-serverffmpeg
推流: 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
10nano rtsp-simple-server.yml
paths:
all:
publishUser: yourusername
publishPass: yourpassword
publishIPs: [127.0.0.1/16]
readUesr: yourusername
readPass: yourpasswordrtsp://yourusername:yourpassword@nashost:port/home
来读取视频流。 不这么做有可能会让你家的实况被全球直播,切记切记。
暂时先写这些,如果有其他想法欢迎补充。