其实4月底就配得差不多了,只是一直咕咕咕到现在才开始整理一下

起因:设备的交替

我一直看我的QNAP TC-464C不惯。

当时近三千的配置,买来一台不可升级内存,webui的XML解析吓人,跑很多软件只能上docker的硬件。(而且性价比其实也不怎么好,多少还是为系统付费了),虽然在简陋的UI里面配好了Qsirch,配好了远程挂载和自动备份,也算是有一个储存的样子了。

但是我仍然有折腾的渴望,每天晚上呜呜呜的风扇让我意识到了这台设备即将不堪重负

而且还碰到过,不是你的问题,也不是我的问题,是官方的问题

提了工单,如issue般,隔了一天多才给我回复。后来把网路openwrt分离出来,上了PVE后。这台设备的负担有所减轻,但设备性能和系统封闭性仍然告诉我这不是一台我能完全掌握的机器。随着折腾以及大一上开始装archlinux,我对Linux的运维有了更深刻的认知,随时都想着逃避这台设备。

于是物色了一堆准系统后,不由得感慨现在的nas越来越流行,终于可以买到带多盘位的高性能准系统了。

于是更加嫌弃了,虽然它的确以最快的速度让我把云上的数据拉下来并开始学习homelab。

但是人不能总活在过去。

pre-nixos

跟着dragonos看到了nix,哇,这不就是我想要的系统吗?当时看趣学haskell时怎么没看到呢?想到我修改archlinux仍然战战兢兢,要写好文档和尽可能小的修改不敢hack ,还时不时上游给我break一个包(虽然关注forum和news也很容易解决啦)

在给老家的那台电脑装完archlinux后,我又给它装了nixos,可惜还没有装上远程唤醒和nebula overlay网络,不能当云桌面惹。但总的来说,给我装nixos奠定了知识基础。

刚好看到有台准系统,性能强悍,接口丰富(虽然有二盘位CRC问题,但好像别的就没啥了?我运行好十几天都十分良好,加上ups的。),用了百分百的钱在硬件上。

选择与看法

虽然三年多时间困在QNAP生态里,但我还是对大部分开源的闭源的国产的国际的nas系统有“云”了解。有的装过虚拟机看过界面

  • 威联通/群晖:老牌大厂,稳定全面,缺点是买软件送硬件,硬件扣扣搜搜的同价位下几乎就是垃圾(威联通性价比会好点,我也只买过威联通,界面简陋点但是也是贵),有一些问题你只能等技术支持解决,买完后不能退烧你肯定会再买新的。

  • iStoreOS:如果想自己刷台路由器,就挂挂smb,transmission,跑跑home assistant,挺不错的,适合轻松入门解决基本需求,但是注意这不是专业nas系统,小心硬件兼容和数据安全,后面你可能还是会想组一台真正的nas。

  • fnOS/绿联/铁威马:国产,有团队支持,性价比高(爆杀威联通和群晖),但代价是生态不全面,app臃肿,可能有不稳定问题,同样的,你不好自己折腾。(我直接skip了,没用过,但有社区评价和玩过demo)

  • truenas:企业级稳定,功能丰富,但是你可能得解决一点自己装的问题,以及听说跨版本更新一堆breaking change你得自己去解决,另外面板装上去后官方是不推荐你ssh自己搞的,有些时候不得不违背最佳实践会有点烦。

  • OMV:轻松,方便,插件丰富,但是企业级功能可能不足,对于大多数家庭媒体需求可能刚刚好,当时看到php我就直接run了。感觉像强化Debian

  • unraid:虚拟化,基于文件的raid,全都要,稳定安心,但是要花点小钱。很社区的评价

  • 通用发行版Debian/Ubuntu/archlinux/nixos: 前两个稳定文档丰富,archlinux功能新且完善,但是前三个的通病都是抽象层级不足你得一个个改etc改systemctl unit搞ansible搞。但是这部分最自由,几乎什么都能做,不怕一些更新冲突和限制。我自己之前台式机也是在用archlinux,但服务器用Ubuntu,archlinux要经常滚动维护下,但东西最全最多

其实应该再来个PVE,Exsi之类的,虚拟化平台All in one谁不爱呢?

但最终还是选择了nixos, 因为我发现那些做得好的nas系统,一个大配置面板,然后用python或bash把系统搞到声明的状态,既然这样为什么不一步到位朝圣nixos呢?

思路

到手后其实是远程指导安装的,不得不说livecd默认开启sshd真有好处,QNAP可能给我KY用也可能卖掉吧

大体配置思路是这样,我QNAP有两块1T SSD,两块4T 机械,一块8T机械,然后从PVE上拆了32G DDR4内存条(PVE根本跑不满,变软路由设备惹)。于是两块1T SSD先各分512G做btrfs raid1防止服务中断我连不回去(虽然感觉开少了,nix占空间挺大)(当初忘记独立nix子卷了,哎,nixos的规则还是和archlinux有点不太一样啊),然后剩下1T空间全部变成LVM自己学习LVM管理,划出一部分搞swap,格式化个btrfs存点container或者应用数据,xfs raid0搞个亡命之徒型的下载缓存。然后好像raid只选模式,stripe还得自己指定才有效,不知道是不是自己的问题。btrfs肯定要双份元数据

原本在ZFS,bcache这边犹豫很久,似乎ZFS能最统一而且能利用起大内存,但是听说增减设备很烦人,以及考虑到out of tree(虽然nixos几乎一等公民支持)

另外两块4T,同样的,格式化btrfs,仓储,raid1,存照片之类的。

8T储存依旧是电影盘,专门给PT下载,XFS,快过QNAP。

另外这台机子还有一个SD接口,被我用来装/boot分区了,稳定性尚可。

来张全景图,我快把/srv/当/opt用了

然后就是学nixpkgs,services.xxx.enable,看各种配置,学会把源码拉给LLM让他们告诉我哪一段干了什么,如何相互作用,以及也帮我写一点抽象代码(没有for而且不清楚一些libs,这样是最快的),然后到flake,flake就顺带用sops终结了.env,.key四处发散的时代。

/etc/nixos
├── aria2
│   ├── default.nix
│   └── rpc.secret
├── btrfsopt
│   ├── default.nix
│   ├── scrub.nix
│   └── snapper.nix
├── caddy
│   ├── default.nix
│   └── freshrss.nix
├── certificates
│   ├── acme
│   │   ├── certs
│   │   │   ├── aliyun
│   │   │   │   ├── aliyun.env
│   │   │   │   ├── default.nix
│   │   │   │   └── happyluck.top.nix
│   │   │   └── default.nix
│   │   └── default.nix
│   └── default.nix
├── cockpit.nix
├── configuration.nix
├── configuration.nix.save
├── duplicati
│   └── default.nix
├── EDIT_AFTER_GENERATE_CONFIG
│   ├── btrfscompression.nix
│   └── default.nix
├── flake.lock
├── flake.nix
├── fonts.nix
├── freshrss
│   ├── default.nix
│   └── passwd.secret
├── GIT_INCLUDE_SECRET_WARNING
├── glances.nix
├── hardware-configuration.nix
├── homemanager
│   ├── default.nix.bak
│   └── hkl
│       └── default.nix
├── immich.nix
├── jellyfin
│   ├── caddy.nix
│   └── default.nix
├── kavita
│   └── default.nix
├── KDE.nix
├── netdata.nix
├── network.nix
├── nixopt
│   └── default.nix
├── notifications
│   ├── default.nix
│   ├── msmtp.nix
│   └── qqsmtp.secret
├── paperless
│   └── default.nix
├── podman
│   ├── default.nix
│   ├── mirrors.nix
│   ├── openlist.nix
│   ├── podman.nix
│   └── vaultwarden.nix
├── prometheus
│   ├── default.nix
│   └── node_exporters.nix
├── rclone
│   ├── akid.env
│   ├── default.nix
│   └── sk.env
├── samba.nix
├── secrets
│   ├── secrets.yaml
│   └── secrets.yaml.copy
├── smartd.nix
├── sops.nix
├── transmission
│   ├── config.part.json
│   ├── default.nix
│   └── NOTICE
├── ups
│   ├── default.nix
│   ├── ups.nix
│   └── ups-passwd.env
├── users
│   ├── admin.nix
│   ├── default.nix
│   └── sharedata.nix
└── vscodefix
    └── default.nix.bak

虽然还很dirty,新老混杂,暂时不上github,咕咕咕

给一张全景

然后配置duplicati时发现远程挂载很多问题,不知道是不是要添加rclone支持当时还没掌握debug技巧,找时间再试试。

但最终,我还是完成了大部分迁移,获得了储存,并且收获很多

好处

这个东西我觉得是我nas系统的终点了,他跨硬件(换个硬件备份nix文件马上重建,数据一拷就完事),抽象层级合适(你敢想象开一个服务只要service.xxx.enable=true?几乎只是把nas面板的按钮换成文本编辑就是了,而且还能保证配置文件和实际状态一致),安全稳定(flake锁定hash解决所有供应链安全问题,用LTS内核稳如老狗除了安全更新没重启过没碰到致命的服务错误,而且你可以用更激进的文件系统策略,lvm,zfs,btrfs之类的混合用),完全自由(选择通用发行版本来就自由了),模块化一键启动(我可以分享我的配置给你,你也可以抄别人的配置),把那些品牌nas的系统开发费用省下来搞硬件上吧,我拿1800买的准系统很美妙

热情蔓延

archlinux:我也要变吗?

@home隔离真是世界上最伟大的发明,迁移一个早上就基本可用了,后面主要是碰上edge case去debug

已经只能活在nspawn里了,我五一小长假趁机跳船,当然,中途遇到很多问题(比如那次rclone的),后日再谈

欢迎使用nixos!