利用Windows小主机做“旁NAS”

利用Windows小主机做“旁NAS”
2024年02月29日 16:30 什么值得买

作者:山中池

前言:

家里有一台用了好多年的2盘位群晖218+,陆陆续续在里面装了一些常用的docker,还装了一个windows虚拟机。这导致了一个问题:群晖的CPU负载和内存占用率常年满载,硬盘“炒豆子”声音也基本停不下来。同时自己也一直关注群晖新品,但最近一波发布的新产品,硬件规格基本上是倒吸牙膏。所以我最近动了一个念头,看能不能把群晖里面安装的一些应用和服务迁移出来,安装在一个小主机上,达到降低群晖负载,延长硬盘使用寿命,提升应用执行效率之目的。在此过程中,我参考了很多张大妈的文章,有很大帮助,所以把自己的经验也分享出来,希望对感兴趣的值友有一些参考。

一,主机配置的选择

CPU我选择了Intel的N100,主要考虑12代CPU所宣传的相较前代产品更好的能耗比。同时在选购过程中,我也重点关注过N305,从性能上看这个CPU比N100性能基本上翻倍,但是看很多测评反馈,这个CPU的功耗和发热也几乎是翻倍,感觉不太适合长期开机运行。所以最后坚定了购买N100的决心。主机的品牌我最后选择了七喜的s10,但感觉目前市面上主流的N100小主机,几乎是一个模子刻出来的,选择其他品牌也应该差不多,例如中柏,零刻,倍控,畅网微控等。我主要是考虑七喜的这个主机是DDR4非板载内存,有wifi6和蓝牙5.2。其他品牌有的是板载内存,有的是wifi5,还有的是蓝牙4.0,大家可以根据需要选择合适的品牌和规格。因为我不做专门的软路由或者旁路由,所以机器上的2个2.5G网口已经超出我的需求了,完全够用。

N100根据intel官网介绍最大支持内存16G内存,所以我直接配了一个16G,不过看值友文章反馈32G的内存也是支持的。硬盘我配了一个1T的M.2固态,其实作为一个小主机不需要这么大,大家手头有闲置的256G或者512G固态就足够了。

二,操作系统的选择

我非常同意某位值友的观点:如果windows系统是一个绕不开的需求,那么搭建这个系统的底层就直接用windows。确实自己有一个特殊的软件需求:利用Foxmail的邮件过滤器对工作邮箱进行分类归档(实在找不到其他邮件服务或者app可以实现相同的过滤方案)。我有看过esxi,PVE,UNRAID等底层系统的介绍和使用经验分享,例如在这类系统上面装windows虚拟机,然后把docker服务单拎出来。最后综合考虑,可能还是直接安装一个windows系统简单直接一些。安装windows的版本,我选择的是windows11专业版官方镜像。我曾经尝试过windows10企业版LTSC,但可能是下载的镜像不对,这个LTSC的子版本是21h2,而windows最新的子版本已经到23h2了,可能有些系统功能的使用会有问题(实测在wsl2的使用中bug很多)。

不过这个方案的缺点也是很明显的:windows的系统开销确实比较高,部署到目前为止,16G内存的情况下,内存占用率大概是30-40%。windows系统确实得配至少16G的内存,8G内存肯定会再次激起我的高占用率强迫症。不过CPU占用率一直比较低,日常大概百维持在百分之几的水平。

三,安装的应用和服务

目前在这个主机上安装的应用,也都是NAS服务中大家经常提及的:Plex,Calibre-web,navidrome,Gitea,Freshrss,以及Heimdall。因为有些应用需要对群晖网盘的内容进行读写,所以我在群晖上开启了SMB协议,将相关文件挂载到了这个系统中。接下来简单介绍下这几个应用的搭建经验:

1,Plex

这个应用的搭建是最简单的,Plex直接提供了windows下的plex server安装包:

https://www.plex.tv/media-server-downloads

安装好以后应用就会一直在后台运行,可随系统开机启动。添加媒体资料库时,只需要找到通过SMB挂载的群晖文件夹即可。

设置好以后,Plex可以正常读取,刮削,和播放文件。这里多提一下关于Plex硬件转码,我实测了一下Plex的硬转码也是没有问题的,在此情况下,cpu的占用率可以保持在10%以下,风扇也很安静。但是有一个特殊情况,如果你的视频是HDR视频,在转码过程中CPU占用率仍然会飙到90%左右,风扇也会狂转。我查了一下这是因为windows下的Plex server对HDR视频转码的硬件支持不太好,在linux下就不会有这个问题。有个折中方案是:在web管理界面中找到“设置”-“转码器”-“启用高动态范围色调映射”这一项取消选中:

这样一来在转码过程中CPU占用率就会回到正常水平。

不过我一般是用infuse来观看Plex视频,极少遇到需要服务器端转码的情况。

2,Calibre-web,navidrome,Gitea

这三个软件的开发者同样提供了windows下的安装包,或exe可执行文件,但是在部署过程中有一些需要注意的点:

首先,强烈推荐大家使用nssm这个小工具:https://nssm.cc/。它的作用是把exe等可执行文件包装成一个windows服务,这样我们的应用就可以随系统启动在后台运行,而且也不会在应用运行过程中始终有一个命令行对话框。

nssm的使用非常简单,就是把这个nssm.exe 文件放在系统任意一个文件夹(例如c盘根目录的一个文件夹),然后打开cmd命令,输入:

nssm install 你想命名的服务名称(例如navidrome)

然后就会弹出一个对话框:

在path中选择想要执行的exe文件路径,然后点击install service即可。

其次,在安装好服务以后。如果服务需要挂载的文件,例如navidrome的音乐库,Calibre-web的书库,是在SMB挂载的网络驱动器上面,就会有一个问题,你会发现这些应用无法识别或挂载这些网络挂载的文件夹。这里的解决方法是:将这些应用的系统服务,修改为当前window管理员账户登录,而不是系统账户登录。这个其实可以在利用nssm安装系统服务时进行修改,但我比较习惯在windows自带的服务管理器中进行修改。具体方法是:在windows搜索栏搜索“服务”,就可以找到windows的服务管理器,在这个对话框中找到安装好的服务,例如navidrome,右键点击,选择“属性”,在登录标签页选择“此账户”,然后填写当前登录的管理员账户信息即可。

经过修改以后,这些服务就可以正常对网络驱动器进行读写了。实测navidrome和calibre-web都可以正常挂载群晖的对应文件夹进行播放或浏览。

3,Docker中安装Freshrss和Heimdall

docker为windows系统提供了docker desktop for windows,我们在docker官网下载安装好以后,会发现它有两种运行方式,一种是基于Hyper-V,另一种是基于wsl2。我简单试用比较了一下两种docker的运行方式,有以下经验供大家参考:

1)如果你需要把windows下的文件映射到docker里面,还是比较推荐Hyper-V的模式。wsl2虽然能把windows的文件映射到wsl2里面(在“/mnt/c/”目录下),官方资料显示这种情况因为两种系统的文件系统差别很大,读写性能会很差,我实测确实读写性能非常差(不确定是不是我设置不对)。而Hyper-v模式下映射windows系统目录非常方便(甚至直接可以按照“c:XXXX”这样的格式映射),读写性能也能接受。

2)根据docker的官方文档说明,windows的docker desktop不支持host模式,只能端口映射。docker会建立一个子网络,默认网关是“192.168.65.1”(这个可以在设置里面修改),你会看到docker的网络通信都是经过这个网关收发的。因此如果需要搭建软路由,或者DNS服务,可能windows的docker desktop会有一些限制。

3)截止目前我还没有找到docker deskop for windows挂载网络驱动器,然后映射到docker的方法。虽然我们可以通过SMB,或者webdav在windows下映射本地盘符,但是实际上在docker中并不能够映射成功。我曾经尝试过在wsl2模式下用linux直接挂载,但首先遇到的问题就是中文识别乱码,这又要花时间经历去设置,还不一定能映射成功,遂放弃。值友们如果有成功经验可以分享讨论。

4) 有时候docker的环境参数中需要提供UID和GID,这是linux下账户的相关信息。在wsl2中,官方文档提到linux内核给默认用户的UID和GID都是1000。实测这样设置的话,运行这类docker是没有问题的,在Hyper-V模式下我还没查到UID和GID的信息,不过沿用这套信息来设置,目前也没有问题。

docker的一大优势就是部署和维护简单,尤其是利用docker compose命令可以一个命令行把docker部署好。这里我贴一个Freshrss的compose.yaml的例子供大家参考:

services:

freshrss:

image: lscr.io/linuxserver/freshrss:latest

container_name: freshrss

environment:

- PUID=1000

- PGID=1000

- TZ=Asia/Shanghai

volumes:

- c:dockerfreshrssconfig:/config

ports:

- 8090:80

restart: unless-stopped

其中文件映射和端口映射大家可以根据实际修改,然后把这个文件保存为一个compose.yaml文件,在命令行中导航到这个文件所在的文件夹,接着输入 docker compose up -d,docker就会自动拉取镜像并启动。

三,结语

目前来看,这个windows主机方案运行情况基本达到目的。群晖回归了其作为一个NAS的本质工作:提供稳定的网络存储和备份服务。在此基础上的应用都通过这个小主机来运行,所有的应用都实现了开机自动启动运行,相关应用的网页加载和响应确实更好一些,总体确实得到了更好的使用体验。不过在群晖上我仍然保留的一个功能,是利用群晖自带的反向代理服务器,把这几个搬到windows的应用,通过反向代理实现外网的https访问。这样的好处是群晖自带的反向代理https证书安装和更新也不用自己花精力去弄了,包括DDNS服务,全部由群晖帮忙搞定,这样对于外网访问也比较安全。总计这篇文章没有涉及到系统安装或者每个应用安装的具体步骤,其实值得买上已经有很多大神分享的经验文章可以参考,但这里我着重分享了过程中自己遇到的一些问题和经验,如果有值友也计划搭建一个windows系统主机配合NAS使用,希望有一些参考的作用。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部