千兆网,启动!

11月的时候一拍脑袋:“既然学校网络大概率是根据校园网登录账号给每一个账号限速 100Mbps 的,并且识别不同网卡用的是 MAC 区分的,那我用 MacVLan 虚拟网卡登录很多账号并且多拨负载均衡,是不是就可以理论上跑满网卡带宽呢?”,说干就干用 VMWare + iKuaiOS 尝试在我老骥伏枥的台式机搓一个多拨的软路由。但是由于 VMWare 虚拟网卡拉胯的 io 和爱快更拉胯的负载均衡性能根本跑不起来,甚至不如一条网线快,后面也就慢慢放弃了。不过12月 hurrison 尝试了 iStoreOS (openwrt) 的方案并且成功了,我又来劲了。一开始还没意识到 VMWare 的虚拟网卡性能不行,我还是在 VMWare 上尝试的,算是半个成功吧,死活卡死在 300-500Mbps 左右了。开始怀疑是 VMWare 虚拟网卡的问题,开始往 Windows 适配更好的 hyper-V 迁移,结果真的成功跑上 800-900Mbps 了,大胜利。

赢!

(碎碎念) 这么一写才意识到那台老骥伏枥的台式机已经服役整整四年了,重装无数次系统,windows10/11、linux、黑苹果、wsl、wsa、iKuai、Openwrt全在这台机子上跑过。命途多舛说的就是这台机子,刚搭起来给CPU内存显卡全部超频探索极限性能,分体水漏过一次水到显卡上结果擦干了接着用,用了两年的raid0光荣爆炸一块5T数据直接消失,系统盘被我"年限洁癖"可能已经刷了五六次全新系统了,而且从上大学之后就是7*24开机了。陪我打了死亡搁浅底特律变人幽灵行者天际线这是我的战争等等等等我还没电子养胃的时候喜欢玩的游戏,陪我打了凝聚招新,被我搭成媒体库存了几百部影视剧。向我坚强的老战友敬礼!

不过还是有一些问题的,虽然我这台式机已经32G内存了,但是由于 Windows 长期开机特有的勾实一般的内存回收以及跑了各种 7*24 服务,一个 hyper-V 就让本不富裕的家庭雪上加霜了。正好遇上我 raid0 爆炸,家庭存储结构遇上大改的机会,就有了搭 NAS+软路由+服务器 All in Bomb One的想法。期末考试完直接猛猛开干。

不要温和地走近那个选硬件的良夜

选硬件花的脑筋是仅次于后面配置各种服务的,很久没有在淘宝通宵了。我的需求其实挺多的:

  • 需要有硬件解码能力(我有公网串流看电影的需求),这就排除一众arm和亮机级x86设备了。
  • 不能太大,工作室寸土寸金,再组台ATX当NAS就没地方放了。一般的MATX和ITX又不一定有那么多盘位。
  • 数据安全寿命长,那次 raid0 爆炸是我梦见还会惊醒的灾难。属于为我年少轻狂买单了。
  • 双千兆网口或者有pcie可以扩展千兆网口。因为又兼职千兆软路由,单臂高峰的时候跑不满,最好是有Wan有Lan。
  • 预算 3000 以下。

其实我一开始的选型是 Intel N100 小主机 + 纯固态的小型静音便携化方案的,掌心级别大小。不过我现有数据就已经有 3T 了,固态虽说已经白菜了但是 4T 的还是价格不菲的,一条 4T 固态 1k5 能买 4 块还不错的 4T 机械盘了。再加上对固态寿命的考虑最终还是否掉了这个方案。

那么又回到传统架构的x86装机,先物色了机箱: 乔思伯N2——5x3.5寸盘位 + 1x2.5寸盘位,稳稳够用,就是价格夸张,500+,不过除了 3D 打印这个价位以内也没有比这更划算的NAS专用机箱了,普通 itx 机箱充其量两三个盘位实在是不够用。机箱选定了就轮到主板了,架构就 B250 了,兼容 6-9 代,性能不愁。找了一圈普通板子都是4个sata口,那岂不是自废武功,那当然就得上点妖板了——雲星ITX-CS2,NAS专供6xSATA 2xNVME 2x千兆网口 1xPCIE,简直是我的梦中情板。CPU就挑了个便宜的 i3-9100T 低压U了,四核CPU大多数情况下都够用了,而且还有个 uhd630 核显正好符合硬解需求。内存配个金士顿2666 8G,硬盘没咋挑直接信任盲选希捷酷狼NAS 4T两块,电源酷冷至尊sfx 350W 稳稳够用了。

于是配置单就呼之欲出了:

配件 价格
乔思伯 N2 559
雲星 B250 469
i3 9100T 270
TT SFX 350W 169
希捷酷狼 4T*2 731
西数 256G nvme 200
金士顿 8G 2660 149
下压散热器 78
总计 2625

这当然不是最便宜的方案,想省钱的话可以再砍一刀cpu(6/7代i3)和nvme系统盘(甚至iStoreOS直接跑u盘上都可以),主板选一般的还能便宜一两百,机箱看个人吧,感觉砍了也没有更好的替代了。这套方案不算硬盘的成本大概在1300-1800吧,算是兼顾性能的梯队里比较灵活便宜且有扩展性的方案了。

然后定下配置已经是第二天早上了,激情下单等发货。

装机佬上线

机箱发了德邦,到片区站点的第三天才给我配送,成了最晚到的硬件。其他的都在同一天到了,先裸机攒起来点亮。

图 2

这裸机真帅吧

然后就是装系统,不想折腾PVE了,大概率也没有用其他系统的需求,直接上了iStoreOS。U盘启动,quickstart,安装到硬盘一气呵成。把 hyper-V 上老多拨的配置备份下来再还原到新机上,改改接口名称啥的软路由功能基本就没问题了。

图 3

后面折腾半天的是选机械盘的阵列,我一开始是想组 ext4 raid10 的,但是貌似 ext4 的 raid10 以后没办法保数据动态加新盘,后面就转 btrfs raid1 了。然后就是折腾这个及其先进我玩一晚上没玩明白的 btrfs。

btrfs 的 raid1 按照官方描述来说,会把每一份数据在阵列中的两块盘上分别存一份,也就是说可用容量是 N/2 (需当阵列中其他盘容量加起来比阵列中最大盘大时) 而不是传统 raid1 只有最小那块盘的容量,而且可以动态加盘后执行 btrfs balance 来保资料扩容。

最让我头疼的是挂载,因为btrfs的子卷机制,我的结构是:

btrfs // 真正的根目录
├── snapshot // 存放快照
└── subvol // 子卷文件夹
    └── @ // 根子卷,里面存放文件

于是我实际挂载的是/subvol/@这个子卷,不过我在系统内是可以挂载上的,但是同样的参数写进 fstab 还是无法开机自动挂载。折磨我几个小时最后发现可能是 btrfs 开机不会自动扫描阵列。于是在开机脚本里添加两行

btrfs device scan
mount -a

/etc/fstab:

UUID=d67ff88d-84d9-4593-bdbf-556a7dc3bd26 /btrfs/.datafs_root btrfs compress=zstd:8,noatime,subvolid=5 0 0
UUID=d67ff88d-84d9-4593-bdbf-556a7dc3bd26 /btrfs/data btrfs compress=zstd:8,noatime,space_cache=v2,subvol=/subvol/@ 0 0

compress=zstd:8 开了个8级的zstd压缩,榨干btrfs性能。

这个时候阵列里还是只有我新买的两块盘,老数据还在windows下那块4T盘里,之后就是开smb到windows下挂载上把我之前那块4T盘里的内容拷贝进去,2.5G网线直连能跑满机械盘速度吧,120+MB/s的样子,3T几个小时也就拷完了。

然后把老盘也插上,格式化成btrfs,用 btrfs device add /dev/sdc /btrfs/.datafs_root -f 将老盘加入阵列,然后 btrfs balance start -dconvert=raid1 -mconvert=raid1 --bg /btrfs/.datafs_root 在后台重建平衡存储,12T总容量跑了一晚上差不多吧。中途用 watch -n1 btrfs balance status /btrfs/.datafs_root 实时监控进度。

然后机箱到了就可以愉快装机了,好久没装过台式了,还是一气呵成一次点亮。

图 4

图 6

图 5

这机箱真帅吧