😎自组Nas搭建日志

category
date
tags
slug
password
icon
type
summary
status

前言

高存储容量设备一方面在单位存储空间价格上没什么优势,另一方面易导致资料分散不便统一访问,于是云空间进而推出供用户使用(如 iCloud,Google Drive),相对私密,速度能接受,但缺点也很明显:用户设备生态绑架,专用 APP 垄断,无法自由调用存储读写API。
另一种是网盘,日常生活使用最为普遍的服务之一,其弊端显而易见:速率限制、扩展名受限、文件自我不可控丢失、广告弹窗等等。
于是 NAS(网络附属存储)变成了破局的钥匙。我们可能了解到过群晖、威联通的个人存储解决方案,但只停留于目见耳闻,折腾成本、硬件投入和维护成本使人望而却步。但 NAS 的高度定制性和灵活性难以忽略,现如今 NAS 早已不满足单纯的文件存储,基于社区的项目可以让你随意部署自己需要的服务供自己或他人一同使用。
当然,选择怎么样的存储使用始终基于自己的使用方式,找到自己习惯的模式就好。
这篇 Blog 我会从硬件到软件顺一遍自己搭建 NAS 的过程,算是提前踩坑

硬件选择

Nas 硬件

category
model
count
CPU
E3-1265L v3
x1
GPU
Tesla P4
x1
HBA
SAS2308(IT)
x1
内存
M391B1G73BH0-CK0
x4
网卡
82599ES
x1
阵列盘
HUS728T8TAL5204
x2
缓存盘
FP325T + S3610
x1 + x1
主板
X10SLL-F
x1
电源
SF-450P14HE
x1
机箱
见方
x1
Note
  • 4代 Intel CPU 架构不支持核显
  • 主板自带 SATA 口只有两个是 SATA3,直通卡不能省
  • 内存必须纯 ECC
  • 自带两个千兆电口和一个百兆 IPMI,高速内网速度需购置网卡

外围硬件

category
model
count
交换机
HI-K0402WS
x1
光纤
FCBG110SD1C07
x1
UPS
BK650M2-CH
x1

硬件测试

阵列盘

两块服务器拆机 sas 口 HC320 硬盘(确认无清零),通电时间分别为 4k 和15k(h),车况意外良好,sas 二手盘性价比更高一些,刷好 IT 的阵列卡加 minisas 转 sas 转接线相对二手 sata 与 sas 硬盘的差价根本不值一提
测了一下盘的健康和体制,排开娱乐性质,还是有一定参考性。
  1. Unraid 自检报告和 DG 全盘柱面慢扫
notion image
  1. 硬盘哨兵 S.M.A.R.T.
notion image
  1. HDtune 曲线测试和延迟测试
notion image
notion image
notion image
Caution
不论是什么机械硬盘,无障碍工作都建立在良好的工况(湿度,温度,供电等)下,就算是崭新企业盘,恶劣的环境也可能使其随时暴毙。

缓存盘

杂牌固态确实不行,虽然4个月不间断通电,但在大部分时间没有负载的情况下依然 05 飙升,于是入手大船 S3610 组 raid1 保数据安全。
只要拿到的不是清零货,那么这种大船货一定是过保修淘汰下来的,锻炼时间肯定 5w 起步,但也只是过保,实际工作寿命应该是可以再保证几年的。
到手简单看了看参数,发现所有读取 S.M.A.R.T. 参数的软件都只能扫描出厂商自定的数据,后在硬盘哨兵的额外信息中找到细节参数,主要的读写数据换算下来分别是 387TB,62TB,简单测试后直接上机。
notion image
notion image
notion image

GPU

型号刚好一样,折腾 vGPU 可以引用如下文章,没有这样的需求可以直接安装 nv 驱动。
Note
如果要分配虚拟机的同时还想要宿主机硬件解码的话就不能在启动脚本里填写 nvdia-66 模式了,这种分配模式会给一台虚拟机分配全部的 8G 显存导致物理显存直接占满,此时宿主机硬解调用 ffmpeg 会爆内存导致视频无法播放,如果需要双开的话只能选择 4+4 的分配模式(炼丹苦手),所以最好的方式一定是买 unraid 支持核显的 cpu 型号来解码流媒体,再直通或者虚拟 gpu 给虚拟机用,这样就不会造成使用场景的冲突。
notion image

主系统

Unraid 6.12.2 开心版,虚拟机和容器功能原生支持,自带存储方案“校验+JBOD+缓存”兼顾速度和容量,社区应用自带模板,web 图形化设置。

插件推荐

  1. Unraid.Modify:解决社区连接和docker拉取失败,直接在安装插件页面贴入链接即可安装。
  1. Community Applications
  1. Dynamix File Manager
  1. Dynamix Cache Directories
  1. Fix Common Problems
  1. IPMI Support
  1. Proxy Editor
  1. NUT
附最终成品界面:
notion image

网络设置

如果是双网口,默认状态下 eth0 启用,eth1 处于 主动备份(bond1)模式,对于个人使用场景过于冗余,可以参照 eth0 的设定更改 eth1 口的设置。

建议修改策略:

  • 绑定模式:主动备份 → 平衡 - alb (bond6)(如果交换机支持可以选择0,2,3,4模式)
  • 启用绑定:是
  • Bond0:eth0,eth1
  • VLAN:否
绑定模式参照如下:

管理权限

该版本使用 nginx proxy manager 反代始终无法成功,有 HTTPS 使用需求大概只能在管理权限里添加了,配置如下
  • 使用 SSL/TLS 选项设置为 ”是”。
  • 本地顶级域名填入你注册过并要使用的顶级域名,比如 example.com
  • 拉到底点击 “预配”,这时候就会有一个系统帮你生成的自签证书了,名字是 “你自己取的 unraid 名字_unraid_bundle.pem ”
  • 将你安装 unraid 的 U盘 进行 smb 共享,使用客户端挂载,进入路径 \flash\config\ssl\certs
  • 使用相应服务商的 ssl 证书申请,下载适用于 apache 的证书(包含两个 srt 文件和一个 key 文件),这里以阿里云官方教程为例:
  • 打开记事本,将 chain、public、key 三个文件的内容依次粘贴到一个文件中,保存为 certificate_bundle.pem。将该文件复制到第四步所在的目录中,然后删除 。unraid_bundle.pem 文件。在 Unraid 界面再次应用设置后,使用 http 方式进入网址(不是 https),会出现如下提示:选择“高级-接受风险并访问”。
notion image
  • 重新进入管理权限后,证书已被识别。
notion image
  • 将端口映射到外部,然后使用证书URL加端口号的方式即可访问(选择易于记忆的端口号)。

其余设置

这篇博客可作参照模板使用。

虚拟机

Openwrt

notion image

首次启动设置

首次开机进入 VNC 输入以下命令:
network 修改 ipaddr 如下:
重启一下输入IP就能进后台了

Docker

Adguard Home

Docker容器配置

Adguard Home 会占用大量常用端口,因此要使用 custom br0 模式新开辟一个IP
我的设置如下(192.168.1.2)
notion image

DNS服务器设置

首先进入路由器后台,DHCP服务器 设置里将 Adguard Home 服务器IP地址设置为第一位,第二位填写任意服务商的DNS作为后备(防止挂了不能解析DNS)
notion image
可选:进入旁路由Openwrt的后台,将DNS服务器设置成这样
notion image
搭建 Adguard Home 负责处理DNS解析,直接将DNS服务器指向 Adguard Home 可减少一次请求转发,而备选服务器填写主路由 IP,则可以在 Adguard Home 无法工作时完成解析,示意如图(这里忽略了交换机,LAN1(br1是LAN1下的桥接口),仅保留 Adguard Home 完整路径。
notion image
notion image

Alist

iOS端的ES文件管理器近期更新支持了Alist挂载,多平台生态得到了进一步提升
常规配置还是得参照官方文档

Unraid SMB挂载

这里记录一下 Unraid 下 SMB共享 的配置方法(官方文档相关页面也只留下了一个 Github Issue 链接)
Mount Path
e.g. /Nas
我建议挂载根目录,除非你的文件管理十分复杂
Root folder path
.
Linux的smb挂载是默认根目录下的,只能填这个
Address
你本地的IP:445
即使从外面访问Alist也是直通本地分享,当然如果真的有远程的存储添加一个Webdav即可

AutoBangumi

如果fetch不到订阅的 rss 可能是因为仅选择简中没有匹配到资源,可以换成 “全部” 或 “繁中” 再次尝试
转载引用初之音的文章

CloudFlare Workers配置

官方文档在关于 mikanani.me 无法解析rss时提供的cf workers解决方案中给出的代码里定位到这一行:
这里的domain填写的是workers创建时给你分配的域名
部署完以后复制workers域名,去头去尾(https://和/)后粘贴到 Custom Url ,保存就可以看到正确解析的日志了

CloudFlaredTunnel

不需要公网IP的免费内网穿透方案,自带Proxy安全性就很好,Application服务锁上加锁(你甚至都可以不设密码放心挂着),即使有公网IP也建议将重要服务部署(如果有在外访问需求),避免DDNS服务挂了就 “ALL IN 404” 的情况。转载引用什么值得买和少数派的文章,两个结合看

Jellyfin

硬件解码部分引用这篇文章
资源搜刮和影视资源,字幕重命名部分可以参考初之音的这篇文章:

Komf

Komf (Komga and Kavita Metadata Fetcher) 是漫画管理服务 Komga 的第三方服务,能够自动从各大漫画平台爬取漫画信息,目前处于积极更新中,对于漫画管理着实是一大福音。
项目地址:
komf
Snd-RUpdated Apr 17, 2024

配置容器

在社区商店输入 ”komf“ 即可搜到(不得不说维护的容器是真的多),进行下列配置(有提示)
notion image
拉取完你会发现这个容器居然启动失败了,这时候查看容器日志会发现 /user/appdata/Komf 目录下缺少了 application.yml 文件,这是需要自己编写上传的

写配置文件

当然不是自己从头写,Github项目地址下就提供了完整的配置模板
必要的修改选项(仅包括Komga列表下的内容)
可选的修改选项(影响使用体验)
写完config后上传到对应位置,启动容器就能正常工作了(启动不了请检查账户密码,真的很容易输错的)

配置文件进阶选项

完整浏览一遍脚本,还有诸如以下选项
以Mal(即My Anime List)为例,它没有提供免费的API接口。但是,如果恰好需要这项服务,可以访问官网并创建自己的API实例来使用。
  • 创建一个mal账户,点击右上角 头像-profile-api
notion image
  • 点击底下 ”create id“ 按钮
  • 进入界面进行简单配置,保存提交,你会获得一个 Client ID 和 Client Secret
notion image
  • 配置文件仅需要 Client ID,那么复制到相应位置即可启用该服务
 
还有 Discord Webhook,是用来发送匹配通知的(有且仅有这种通知方式)。我不常看 Discord 的通知,所以没有部署。不过还是在这里贴上两张图片。
  • 点击 channel-edit channel-integrations-create webhook
notion image
  • 修改名称和位置后copy webhook url
notion image
  • 找到配置文件这一栏,填在 webhooks 后面即可

最终演示

8/27添加:日文和繁中标题也是可以被匹配到的,但无一例外的是,匹配完以后所有的元数据都被改成英文了,但是标题可以通过修改下面这行配置保留成简中(太好了),但是很有可能出现机翻出来的奇妙语言,见下图
“爱好·扎·摇滚!“
notion image
另,你可能会发现有这一行配置并手动改成了这个样子:
但很悲伤的是这么设置目前并没有用,但是我估计未来更新会解决这个问题吧
最终演示图
notion image
这是正确匹配后的漫画系列简介
notion image
这是匹配完后的系列封面
komf log获取内容部分显示如下
然而,漫画的信息都是英文的,目前似乎无法解决(我尝试将bangumi放在第一个匹配),另外一个问题是,中文名称的漫画很可能无法爬取元数据。
  • 匹配不了的解决办法:手动将系列文件夹名称改成英文/日文/繁中后再进行匹配。
  • 强迫症解决办法:自己动手将元数据翻译成中文。
对于实在搜不到的漫画,你需要好好想想这是不是一个推特合集(大妈家上常有的),或者资源过于冷门或者太新,这种情况只能自己手动添加元数据了。
这里附一张进行漫画匹配的文件夹名字规范:
notion image

Komga

转载引用初之音的文章

Nginx Proxy Manager

转载引用 CDSN 的教程
因为 ISP 是默认禁止 80 和 443 端口被使用的,Nginx Proxy Manager 的好处就是输网址只需要记住一个端口号即可。

个人搭建流程

反代搭配 DDNS-GO,使用 CloudFlare 申请一个 edit:zone 权限的 token,自定义对应 IP 域名作为 cname 域名,之后在 NPM 中添加子域名并对应本地服务的监听地址(eg: exapmle.tairitsucat.cf → 127.0.0.1:11451),最后在 CloudFlare 新建一个子域名指向 cname(eg: example → ddns.tairitsucat.cf),就可以通过 https://example.tairitsucat.cf:端口号 来访问自己搭建的服务了(这个端口号是使用路由器端口转发的 NPM 服务端口。)
图示如下:
notion image
notion image

小结

我不能说自己很会玩 “形似服务器的Nas”,很多知识都是通过查阅资料和摸索来配置的(一方面找不到准确契合自身的内容,自己摸索出的折腾方法也不一定正确),目前虽然已经能使用,但离真正好用还有很长的路要走(比如减少维护)。未来我会继续更新这篇文章,记录下自己摸索到的新东西。
实际动手操作后,我发现,只看教程是远远不够的,深入研究配置参数背后的原理,自己还必须了解命令行、docker、网络连接等大框架知识。这方面的学习意义远超折腾 Nas 本身。
 
上一篇
玩梗逐渐成为一种潮流的利弊之辩
下一篇
从 Telegra.ph 上爬取并打包漫画导入 Komga
Loading...