写在前面
回顾一下,我的第二代 NAS,使用已经刚好两年了,距离最开始的NAS,已经过去四年了。
其实最近才又开始重新折腾,发现之前对软硬件的使用率都太低了. 这带来了生产率和效率问题。
服务和结构
对于 NAS 本身来讲,功能单一是最优解,一个特定的功能只解决一件事。但是这无法提高 NAS 上的利用率。附加一些随时可中断的服务,对于现在是更好的选择。
对于我不可接受或最好不要被暂停的服务,我会尽量把它挪到 服务商(Cloudflare, Github)进行托管。
那对于可接受短时间中断的应用,则以应用类型和用途部署到NAS的不同环境上,例如 需要直接访问NAS上的文件,都会尽量通过 NAS 的 Applications(k3s)来提供,部署方式比较复杂或主要提供应用能力的会放在虚拟机上。
所以会有这两种方式来提供效率:
- Applications(K3s)
- Virtual Machines(QEMU - Kvm)
- OpenRC
- docker-compose
K3s
K3s 上对于直接访问文件系统是比较友好地,不需要绕弯路,所以会挂载和文件相关的应用,比如
- transmission(PT)
- qBitTorrent(PT)
- aria2c(常规离线下载)
- IPFS(去中心化的文件服务)
- Photoprism (照片备份)
对于减少中断时间的应用也可以部署到这儿
- clash
对,现在已经不在做透明代理了,会直接使用 HTTP Proxy,透明代理会导致更多问题 弊大于利。
Kvm
虚拟机可玩性就高太多了,想部署什么服务都几乎不会碰到问题。
但是有坑点还是要讲一下的:
- 访问宿主机(需要桥接网络,然后再用局域网的IP来去挂载 SMB 等)
- VirtIO (在一些没有集成这些驱动的系统上,你可能需要先加载 VirtIO 的驱动,然后才能安装操作系统。 但其实 VirtIO 没有原生级别的体验 也没有稳定到不会出错)
虽然但是,这两个缺点都不至于放弃 Kvm,在这点上 利远大于弊。
我在上面部署了这些应用
- tailsacle(用于异地组网)
- AdGuardHome(提供本地缓存的DNS,而且可以自定义域名访问)
- Alist (用来挂载各类网盘,和 NAS 文件,相当于我可以远程以 WebUI 的方式访问 NAS 的内容)
- cloudflared (用来提供 tabby 公开的服务,和当前的运营商的 动态IP)
- natfrp (打洞提供服务, 发现了个新用法,可以固定域名,就不用考虑换线路要换域名了)
- caddy-server (提供基本的代理转发,部署到虚拟机上 是因为配置和代理比较复杂,且经常变动)
- v2ray (用于转发和加密请求,配合natfrp的)
- docker.io (用于复杂环境的应用部署和 测试类型的应用部署)
tailsacle
用于异地组网,很安全, 不过现在的用法更多是当成网关来用(和zerotier的设置方法一致),减少设备的安装部署,同时可以更顺畅的访问(很优雅)。
Alist
用来挂载各类网盘,和 NAS 文件,相当于我可以远程以 WebUI 的方式访问 NAS 的内容
但是 Alist 提供的 WebDAV 不靠谱,不能通过 WebDav 去大批量的写数据到网盘上,而且还有内存泄露问题。
所以 Alist 其实更适合简单的浏览文件。
docker.io
在虚拟机上的 Docker,主要目的就是为了让系统更干净,避免应用侵入系统散落各地造成一些不必要的破坏,这会对系统维护带来麻烦。
比如我这台 Alpine Linux,运行了两年没有更新系统,现在已经成功更新到了最新,非常容易。
- homepage (一个页面可以展示所有在 NAS 上运行的服务 `almost)
- grafana (用来展示 日志和统计)
- homeassistant (HA是比较复杂的, 所以一开始就没打算安装到主机上, K3s上的安装是有问题的。)
- tabby-server (Tabby Shell 的 配置服务器)
OpenRC
通过 OpenRC 可以使用 rc-update add {service} default
来让服务开机启动,这可以和k3s带来几乎一致的体验。
硬件改进
NAS Gen2,从之前的 ITX NAS机箱 换成了 2U 服务器机箱,整体都不错,但散热一致不满意。
最好的硬件改进就是换了散热风扇,由原来的服务器 3个 暴力扇 换成了 idcolling 的 8010 风扇(4个,之前是有一个没安装)
1cm的厚度,则代表了这个风扇可能是和显卡风扇一个生产线上下来的,和显卡采用同规格风扇就意味着 更安静,效率更高。
之前的暴力扇虽然限制了速度,但是我猜应该没有工作在最佳效率区间,噪音难以抑制,风量也不高。
现在晚上的噪音,从原来的 或许能接受 改进到现在的 完全没问题,而且硬盘温度整体下降5度。这是一个最棒的硬件改进。
BTW,有一个 RJ45 SFP+ 模块 已经挂掉了。现在正在用的是另一块,NAS的网络从 10Gb 降级到了 2.5Gb。
辅助改进
路由器
经一个朋友(xking)的指导,看了一眼光猫,发现了个好东西:端口转发
那么有了端口转发,那就相当于我有了可靠的公网链接,那么 我就可以考虑在路由器上做点事情了。
- 端口转发(PT Client, VPN Client)
- wireguard
- ddns
- 静态路由
wireguard
特别吹一下 路由器上的 wireguard。
WG的优点非常明显:
- 基于TCP(ISP对于TCP的影响较小, IKEv2是走UDP的,效果没那么好)
- 只需要一个 TCP 端口,而且是写在配置文件里的,这就意味着,只需要在光猫上映射一条记录。
- 配置文件简单清晰(可以很简单的更改配置, 不限于端口和路由)
- wireguard 应用轻量高效,整体优雅(iPad和iOS,macOS,Windows,都有很好的客户端,而且比较新)
最最最大的好处就是,用了在 wireguard 连回家,可以获得和在家一样的体验。
以前通过 Tailscale 连回家 需要让每一个被链接的设备都安装 Tailscale,然后再获取 Tailscale 下发的 IP 才能连上。
现在 访问局域网设备,和在家里完全一致,仍然是家里路由器上的设备的 IP,也可以直接使用 AdGuardHome 提供的自定义域名。
更棒的是,你在路由器上配置的静态路由,也可以使用,比如:配置在路由器上的 Tailscale 静态路由,可以让你不必启动 Tailscale 直接通过家里转发到对端(不在家,但是在异地的虚拟局域网)设备。
Fantastic !!
ddns
华硕路由器上自带 DDNS,但是有个小问题,这个记录更新太滞后,所以搞了 serverless 函数 托管在 Cloudflare 上。
所以现在路由器 只负责注册。
数据保护(备份)
Dataset 和 Zvol
Periodic Snapshot Tasks
Snapshot 用于快照目标,就像虚拟机中的 快照 一样,但是 Periodic Snapshot 可以快照数据集,这就非常棒。
但是 Snapshot 会非常占空间,这带来了两倍空间的消耗。
解决办法就是 Snapshot 的 lifetime 设置短一点,让本次 Snapshot 尽快过期自动删除。
那数据怎么办呢? 答案是:Replication Tasks
Replication Tasks
Replication 是复制 Snapshot 到指定目标。
且可以永久保留 Snapshot。
而且 可以指定 Snapshot 的 lifetime,和上面的 Periodic Snapshot Tasks 的 lifetime 分开,这太棒了。
需要注意的是:Zvol 不可以复制到 Dataset, 最好的方式是 什么类型的 就复制到什么类型上(新建 snapshot 专用的 Dataset 和 Zvol )
Cloud Sync Tasks
Cloud Sync Tasks 可以用 rsync 把数据备份到 WebDAV,Google Drive,S3 等。
但 国内相对 不太友好,或者成本比较高,像 S3,十几T的数据备份过去,要很多很多钱了。
所以还有个方案就是:使用 Alist 挂载 WebDAV,然后通过 Alist 挂载的网盘,上传到国内“免费”的大容量网盘上。
但 Alist 还没到生产级的可靠,所以这个方案是半死不活,只进行小量数据的同步,目前稳定运行。
计划改进
- 引入一个新的独立计算设备(mac mini 最佳),把 虚拟机资源 和 DNS 独立出来。避免中断。
- 以前服务占用的内存不到1/4,现在已经占用一半还多了,而且还要和ZFS的Cache抢内存,目前内存总计32G,其实我更希望内存更多一点。