什么样的 NAS 方案(All In One)比较好?

什么样的 NAS 方案(All In One)比较好?

换成裸机Debian 12 Server + OpenZFS + virt-manager + docker了,省事,除了docker瞎改iptables有点烦之外体验良好。

先强调一下,如果没有一定的技术能力还是远离AIO比较好,AIO本身更像是技术玩具或者学习工具而不是满足什么必要的需求,更不是什么为了省钱的选择。部署一台稳定可靠的AIO服务器不可能是傻瓜式的。实际上只要牵涉到网络永远会有一大堆乱七八糟的配置需要调整或者排错,很多人连虚拟机和主机的网络拓扑关系还有网关路由表的概念都弄不明白折腾AIO软路由炸了都不知道怎么炸的。家里的入户宽带炸了可以直接call电信公司上门解决,你整个AIO挂了自己不懂网络谁来给你调试?

比PVE/ESXi更小白的AIO方案可能就是黑群挂openwrt虚拟机啥的了,但是我不认为能部署基本网络配置的人会弄不明白PVE的操作。如果只是希望配个NAS不需要开别的容器和虚拟机的话弄个TrueNAS或者黑群晖就完事儿了,GUI界面基本满足所有基本操作了,更适合小白。

另外AIO跟数据安全没有任何关系,不做备份、不带UPS的话任何单机系统都是不安全的,也不会存在AIO更不安全的说法。文件系统损坏/硬件损坏本身跟做不做AIO没有关系。经常断电又没有UPS的多盘系统的话还是别用raid和高级文件系统了,老老实实ext4/NTFS+单盘吧。

如果对Linux/Debian相对熟悉的话,可以参考这个方案。

物理机装PVE,然后PVE上做存储(比如硬RAID或者ZFS),然后bind mount到小鸡上的LXC的nas容器。LXC容器随便用ubuntu或者debian都可以,容器上装docker和samba做共享还有运行plex之类的应用。容器上装wsdd和avahi-daemon可以让windows和mac的客户端识别到samba共享。这样的好处是小鸡上的NAS性能和母鸡基本一致,非特权的LXC容器在安全性上也完全没问题。母鸡上只处理存储本身相关的任务,尽量不做多余的改动,比如可以定期跑跑快照啥的,小鸡上折腾挂了或者被勒索病毒搞了也不会影响到母鸡的快照。

另外开一个LXC(就叫network吧)处理所有网络相关的需求,openwrt也有LXC模板,不过我在国外不太需要魔法网关,就直接开了个debian处理网络。因为我这里刚好没有公网IP,就开了个wireguard做VPN网关,然后用iptables把公网VPS的HTTP请求转发到本地的network容器,最后用nginx反向代理把公网的HTTP请求转发到nas容器。这里如果图省事可以直接用frp做这件事,不过这样所有的公网访问客户端地址都会变成局域网地址。如果有公网IP的话把network当成防火墙和网关就可以了,不需要做内网穿透。

这里说一下大致怎么做吧。

1、安装PVE在物理机上,然后建立存储,PVE官方就有相关教程。一般来说PVE的系统盘建议单独弄一个SSD或者高速U盘装,不要跟存储混在一起,这样以后重新部署的时候会方便很多。

这里存储以ZFS为例,假设建立的存储池名字叫storage。默认建立ZFS存储之后这个池会默认挂载在/storage目录,这里可以在这个池子里建一个新的数据集比如说叫nas-storage,之后会把这个新的数据集挂载目录/storage/nas-storage挂在后面建立的nas的LXC上。

基于debian的PVE母鸡拓展性非常好,对于消费级UPS也能直接装debian上的驱动实现自动开关机,消费级主板的传感器数据也能直接读取,这些特殊需求对于esxi就没那么容易解决了,毕竟esxi主要还是面向企业级设备优化的。

在母鸡上建存储有很多好处。首先绝大部分用途下基本不太可能有虚拟机/无特权LXC穿透的风险,真有这么大的0day bug一般人够不上资格被攻击,这样一来在快照保护下母鸡数据被误操作删除或者勒索病毒加密的风险非常小,当然要是你非要没事折腾母鸡弄一堆奇怪的操作把母鸡搞挂了那也没话说。其次母鸡上可以直接对整个数据集做加密操作,这意味着所有的密钥都在母鸡上管理,解密之后对于小鸡是透明的。同时bind mount之后母鸡的数据池可以在文件系统层面给所有小鸡共享,空间利用率,性能还有可靠性都比虚拟磁盘文件这种共享方式高不少。

2、安装debian的LXC容器作为NAS主容器,这个容器会bind mount之前创建的数据集。

关于绑定挂载的命令,先SSH到PVE的主机,然后运行

即可。这里100是创建的LXC的ID,/mnt/storage是之后会挂载的目录。LXC容器使用无特权的即可。注意可能需要把/storage/nas-storage的owner修改成100000否则LXC内部没有写权限,因为无特权容器的root用户会被映射到uid为100000的用户。剩下的安装docker和配置一堆文件共享啥的跟普通debian没啥区别。

这个NAS容器可以安装所有需要的NAS组件,也可以在上面装docker。其中一些包括

samba/timemachine:samba上的timemachine服务器是目前我用过最稳定的方案了,没出过问题,局域网速度也可以。

avahi/wsdd: 很多人可能知道安装Avahi可以让苹果的系统找到Samba的共享目录,但搞不定Windows下的网络发现。实际上Win10某个版本开始微软取消了老古董的NetBIOS支持,所以Linux下需要额外安装wsdd包来启用新的查找协议。

别的大部分服务比如plex、qbittorrent啥的我都是用docker装的,相对比较省事

3、创建一个新的LXC容器(可以是debian或者openwrt)作为主要负责网络(内网穿透、web服务器)的容器。

对于不能很方便物理接触的设备来说独立的网络容器是很重要的。把复杂的配置项放在各个小鸡而不是母鸡可以很大程度上隔离风险,折腾挂了也很容易从快照或者备份还原。

实际上我的网络容器配置好之后很少会改动,NAS那边部署新服务挂了也不太会影响到网络这边。网络容器其实也跟普通debian配置没多大区别,需要VPN网关就装一个wireguard,然后把家里局域网的网段写在VPS那边的AllowedIPs里面就会自动生成路由表。如果对网络配置不太熟悉也可以装zerotier,界面相对比较友好。如果需要对外暴露端口和服务的话装个frp是最省事的方法。我个人会另外装一个nginx把外网连进来的链接转发到NAS那边的端口上(注意PVE默认配置下所有小鸡和母鸡都被桥接在物理鸡的同一个局域网里面,小鸡之间没开防火墙的话是可以直接访问的,也可以访问家里局域网上的别的设备)

4、创建一个LXC容器用作Proxmox备份服务器

PVE自带的备份工具就是直接打包,不支持增量备份和去重,而PVE官方的Proxmox Backup Server支持这些高级特性。所以这里我建了一个新的数据集挂在/storage/pbs-storage下面然后bind mount给一个新的pbs容器(操作系统为debian)。这个pbs容器可以通过PVE的官方源安装pve备份服务器,然后PVE上所有的小鸡和母鸡都可以被备份到pbs-storage这个数据集去。当然了最安全的做法是另外弄一个新的物理鸡专门搞备份,但一般家庭用户嘛,差不多就行了。

5、关于别的虚拟机的安装

除了LXC,PVE基本支持所有主流系统的虚拟机,可以直通几乎所有的设备,包括独显,网卡,蓝牙,USB,实际上如果要折腾甚至可以把物理机的独显直通到显示器,键鼠通过USB直通,就当普通的Windows使用。

没有特殊需求这个配置下其实没太大必要装黑群晖,实际上黑群这东西本身就有很多不确定因素,遇到一些乱七八糟的bug只能等破解接着折腾要不然就忍着(比如HEVC照片转码出问题呀之类的)。实际上基本上只有群晖Photos这个应用暂时没有特别好的替代品,视频库远不如Plex或者免费的Jellify之类的方案,下载器也是不入流的水平,一般家庭用户也用不上那堆合作办公的软件。如果没有特别的需求其实装个win server/lstc就够了,专门用来跑各种国产流氓和下载软件115/百度云之类的。

上面写的看起来比较繁琐,不过如果对Debian熟悉的话这些操作都比较简单,主要提供的是一种思路,用过PVE的玩家一个小时就能全部部署完。

这个方案主要的好处在于基于Debian系的PVE拓展性上非常好,需要什么功能就自己部署在容器上就可以了,如果希望装黑群晖也可以另外开个虚拟机装黑群。PVE的母鸡相对来说已经久经考验了,可靠性和稳定性都是商用水准的,本身对ZFS的支持也非常好,官方的PBS备份方案用过的都说好,管理界面非常易用而且功能强大,支持块级去重和增量备份。PVE相比TrueNAS做宿主机来说,容器和虚拟机的支持成熟很多,如果希望另外装黑群,windows server还有软路由啥的话PVE明显是更好的选择,相比之下TrueNAS做AIO明显就差点意思了。

最后重要数据必须备份,任何RAID,包括RAID1不能替代备份。在有备份的情况下RAID5/6该用就用,很多反对RAID的人只不过是数据量不够大,盘多了RAID就是自然而然的选项,要不然就得去折腾unRAID/Snapraid+MergerFS那套方案,实际上管理起来比ZFS/RAID卡麻烦多了。ZFS对普通用户最大的好处是一站式解决了RAID(冗余)+加密+压缩+全盘增量备份(send/receive)+抗静默翻转之类的一系列问题。当然大部分用户就一两张盘的数据量,有冷备份的情况下爱怎么着怎么着呗。