自建 NAS 遇到坑,我重新设计了方案,请教各位的使用经验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
gridsah
V2EX    程序员

自建 NAS 遇到坑,我重新设计了方案,请教各位的使用经验

  gridsah 2023-09-27 22:43:09 +08:00 2981 次点击
这是一个创建于 743 天前的主题,其中的信息可能已经有所发展或是发生改变。

目前方案

HPE Microserver Gen10 四核心版 (不是 plus, 不带 iLO),纯 NAS ,使用 pkg 装了 NUT v2.8.0 来和 APC bk650m2-ch 通信。这台 UPS 专门供这一台 NAS 用。不跑存储 (NFSv4 only) 和备份脚本之外的东西。需要折腾的服务都跑在另一台 DELL R220 上。

系统盘是光驱位的 intel s3710 200G ,裸装 FreeBSD 13.2 。

数据存储在 4x8T HC320 ZFS raidz2 上。两个 PCIe 接口插了 3 块 NVME ,一个用转接卡转出两块 16G 傲腾做 raid1 SLOG ,另一块装 256G NVME SSD 做 L2ARC 和 SWAP 。

有额外的 8T (HC320) + 2T (西数金盘) 做冷备。

遇到坑

目前表现是,我的白群晖用 NFSv4 从 raidz2 上读数据到群晖的存储池中可以跑满 FreeBSD 单口的 1G 带宽,持续一段时间之后整个系统就自动重启。PC 使用 NFSv4 从 raidz2 拷数据到本地硬盘也一样。

刚开机之后跑 6G 左右 NFSv4 流量就会重启,开机大约 4 小时之后跑 20G 以上的流量也没事。

刚开机之后用 iperf3 测试,用双端口链路聚合跑满 2G 带宽,打 40G 流量 (双向各测一次共 80G) 也不会自动重启。倒是我还观察到 bge 驱动在 iperf3 测试中的波动特别大 (700M+ ~ 900M+)。

我以为是我自己没事就 freebsd-update fetch install 引入了 bug ,但是由于每次更系统时候都有快照,所以我回滚到了最初版本的系统,问题依旧。所以应该不是系统更新导致了这个问题。

crash log 里面什么都没有,很干净。

还有一点我觉得很重要,应该提一下。我在 FreeBSD 的 bugzilla 找到,FreeBSD 使用的 bge 网卡驱动由于开发者手里没有设备,有些 bug 还无法解决,导致目前还不能用于生产环境。

这问题应该是系统装好就有了,但是由于开机后只需要多等几个小时这个问题就不容易被触发,而我又有 UPS 才导致这个问题就没表现出来。几个月以后,就是最近的一次停电,UPS 没撑到来电导致 NAS 关机,我刚开机没几分钟就开始干活时候,有了大的网络负载,这才发现。

目前无法判断是 bge 的驱动有 bug 还是 NFSv4 有 bug 。但现在问题无法解决,FreeBSD 这个方案肯定是用不成了。

新方案

有冷备,可以瞎折腾,不怕丢数据;利用现有硬件,不加新机器,柜子放不下了。

核心需求是 NFS ,后续可能会加 samba 。需要跑一些备份数据的 python & sh 脚本。

第一个方案:

Linux + ZFS on Linux 。PVE 好像就是这个思路。我只需要把旧存储池导入就行。

我用好多年 PVE ,两个礼拜前刚把 PVE 的存储换成本地的两个 ZFS pool + NFSv4 from HPE Gen10 就遇到了 Gen10 流量一大就自动重启的问题。

Debian 或者 RHEL (开发者授权) 这两个系统我比较熟,要装的话应该在这两个系统里选了。不晓得 ZoL 现在靠谱不靠谱。

我是比较偏向于这个方案,少折腾,也有成熟的应用案例。请教各位 ZoL 在 Linux 上表现怎么样?

第二个方案:

Linux + btrfs 。群晖是这个思路。

我用的话,mdadm (raid5 or raid6) 然后直接格式化成 btrfs 。我看 btrfs status 里的 raid 那几行还没有变成 OK 。

还有就是我在论坛里找到好些 btrfs 丢数据的帖子,ZFS 丢数据的帖子很少。

我感觉这个方案不是很靠谱。但有群晖大规模商用的案例在前,所以也可以考虑迁移到这个方案。各位推荐这个方案吗?

第三个方案:

Linux + mdadm (raid5 or raid6) + lvm (主要用快照) + ext4/xfs 。我第一版 NAS 的方案,也是最通用的方案。

但是我非常需要 COW 文件系统的快照以及 checksum 功能 (纠正 bit rotate)。

所以这个方案的优先级比较靠后。我还是偏向于使用 ZFS/btrfs 这种 '下一代' 文件系统。

第四个方案:

Microserver 也是 server ,所以.....HP 的兼容列表里有 Windows Server 。

但 Windows Server 的技术栈我实在是没精力了解......

所以这个方案的优先级......

另外,就我司 Windows Server DFS 的使用体验来看,Windows 存储方面的坑也少不了。

22 条回复    2023-10-05 16:09:06 +08:00
nuk
    1
nuk  
   2023-09-28 02:48:06 +08:00
没插个显示器看看是什么错误?个人感觉应该和 bge 关系不大,如果能找到 crash 的地方就好说了。
gridsah
    2
gridsah  
OP
   2023-09-28 08:06:59 +08:00
@nuk 今天晚上我接个显示器看看 console 有没有报错,估计是没有。

我个人觉得是 bge driver 的锅,因为我配 Wake on LAN 的时候,bge 的行为就很古怪,bugzilla 也找到了相关问题说它还没法正常支持 WoL 。最终方案是,我在 BIOS 里记下两个网口的 mac 地址,需要 WoL 的时候向这两个 mac 发 magic packet ,这才可以正常唤醒。

倒是 NFSv4 有问题的可能性不大。
herbertzz
    3
herbertzz  
   2023-09-28 09:14:34 +08:00
用现有的 NAS 系统不香吗,truenas 、unraid
gridsah
    4
gridsah  
OP
   2023-09-28 09:35:28 +08:00
@henyi2211 Unraid TrueNAS 现在都是 Linux+OpenZFS+WebUI 。我的需求里面没有 WebUI ,也不需要买它们的 support 服务。

bro 注意看主题,我是在问这几个组合的使用体验,不是求推荐。
guochao
    5
guochao  
   2023-09-28 10:49:38 +08:00
现在 zfs 主要是在 openzfs 上做开发了吧,bsd 那边可能也切过来了?我这两年没有特别多用其他 unix ,不大好横向比较

我的 pc 现在是 nixos root on openzfs ,compression=on ,开 dedup 以后资源消耗有点大,但是我感觉在公司用 xfs vdo 也是有点,后来关掉了,因为发现我的用例来说即使算上 rust / node_modules 实际上好像也没有那么多 duplication 。文件系统自带 samba/nfs 这种感觉有点……奇异。现在处于不停的啃 openzfs 、gentoo 、solaris 之类的文档的状态,打算先在日常使用、变更最多的机器上尝试各种新技术以后再上 nas 。

nas 之前是 btrfs ,但是我心里有点打鼓,尤其是我没有用专门的很好的设备,而是捡了个垃圾,供电什么的都没有那么好。所以也是先换 debian + mdadm + xfs 了,在公司用的多,我自己解决一部分问题,大佬解决一部分问题。btrfs 以后再尝试吧。

比较在意 lvm2 的 snapshot 在什么方面不能满足需求?我自己感觉 lvm2 的 snapshot 一般情况也够用了

truenas core 现在还是 freebsd 吧?我看 truenas scale 是 linux 的样子。以前尝试过 core ,后来没太多用这个。
zdy349
    6
zdy349  
   2023-09-28 11:10:29 +08:00
直接 LINUX
数据重要上个硬 raid+ext4/xfs 这种方案吧
数据不重要甚至可以直接 noraid+随便怎么折腾吧
gridsah
    7
gridsah  
OP
   2023-09-28 11:16:37 +08:00
@guochao 是的,FreeBSD 现在也切到了 OpenZFS 上。dedup 目前没有足够有说服力的应用案例,所以我不用这个功能。

OpenZFS 不支持 samba ,但支持 NFS ,原理是 OpenZFS 直接和内核里的 NFS 子系统通信,但是据说还有点小问题。所以 FreeBSD 上的 OpenZFS 在这里有一些 hack ,就是让 OpenZFS 把发往内核的信息解析成 /etc/exports 文件的配置项,放在 /etc/zfs/exports 再用常规的方法加载进 NFS 子系统。

由于我是 NFS 的重度用户,所以 FreeBSD 上 NFS 服务的几个核心文档的中文版是我翻译的 https://note.lishouzhong.com/article/translation/sitemap-index.html 另外,说起来我还是 Gentoo wiki 简中区的翻译 hhhhhhh

btrfs 我只在群晖 718p 上用过半年多,但是它的性能实在太差,而我的群晖又没法在 WebUI 上配缓存,所以我就切到 ext4 下面了。另外我看到有帖子说群晖上的 btrfs 离开群晖之后只能在特定几个版本的 Linux 内核下读数据。所以,我对这个文件系统的稳定性还是持怀疑态度。

lvm 快照占用的硬盘空间是预先分配的,如果给快照用的空间被写满,那快照对于后续的数据就失效了。这时候回滚可能会让 APP 认为数据不一致。但是 ZFS/btrfs 就没有给快照预分配空间这种操作,快照默认可以利用剩余的最大空间。

我还挺喜欢 FreeBSD 的,但是这个硬件兼容性实在是让人头大.....我在公司 ESXi7 上的 FreeBSD VM 倒是跑得一点问题都没有。

我不选成品 NAS 系统是因为,我的核心需求很简单,NFS/samba+python/sh ,并不需要 WebUI 也不买 support 服务。
gridsah
    8
gridsah  
OP
   2023-09-28 11:20:29 +08:00
@zdy349 我需要快照、文件系统级别的 checksum (修复 bit rotate)。
另外,核心数据我有冷备,不怕丢数据,但是我怕 bit rotate 。

我现在偏向于 Linux + ZFS 所以来论坛请教一下使用经验。注意看主题。
guochao
    9
guochao  
   2023-09-28 11:41:14 +08:00
@gridsah 赞!

> 原理是 OpenZFS 直接和内核里的 NFS 子系统通信
哈,我暂时还没有研究这些。如果是这样的话,其实我就比较倾向直接用 exports ,因为最近非常喜欢 nixos 那种 declarative 的理念,而且这种方法管理的系统很容易统一各种 id ,不过不开心的就是还有很多工具不大好声明式管理,需要写很多足够健壮的脚本

> btrfs 离开群晖之后只能在特定几个版本的 Linux 内核下读数据
群晖用了一些私有的 flag ,是有问题。对于我来说,我更多的是被 arch wiki 里面的警告吓到了:The RAID 5 and RAID 6 modes of Btrfs are fatally flawed 。所以之前尝试 btrfs 的时候,叠了一层 mdadm ,btrfs 跑在单个 md 设备上。

> 快照用的空间被写满
对照了一下使用场景,我的 use case 里面数据大部分时候是增加的,不会有很多改变,所以对于我来说分配好 volume 留出冗余就还好。对于经常有变更的场景感觉是个问题
gridsah
    10
gridsah  
OP
   2023-09-28 14:11:01 +08:00
@guochao

> The RAID 5 and RAID 6 modes of Btrfs are fatally flawed

Arch 的 wiki 说的是真的,btrfs 自己的文档也说 raid56 unstable
https://btrfs.readthedocs.io/en/latest/Status.html

我需要足够灵活的快照,所以 LVM 用起来很吃力,特别是在空间规划方面需要更多精力。
gridsah
    11
gridsah  
OP
   2023-09-28 21:35:20 +08:00
@nuk Gen10 插显示器重新复现了一下 bug ,机器的表现是突然暴毙,啥输出都没看到。

我从感觉上来说是 bge 有 bug 。因为我第二次重新配好链路聚合才复现出 bug 来。

第一次操作:

Gen10 双端口链路聚合 loadbalance l3 l4 算法,只插一个口到傻交上,另一个口没插。单网口跑了 40G 流量还没触发 bug 。

第二次操作:

把管理交换机拆出来,重新把 Gen10 的两个口都插到交换机配好链路聚合的两个口上,重新测。6G 流量之后暴毙,显示器没有任何 echo 。

就是,突然,就没了。暴毙。
nuk
    12
nuk  
   2023-09-28 23:08:00 +08:00
@gridsah 6G 就是 30 秒左右?是不是触发了 watchdog ,但是网卡应该不至于造成整个系统 reset 吧,看看能不能升级 bios 啥的
gridsah
    13
gridsah  
OP
   2023-09-28 23:28:14 +08:00
@nuk 6G 60s 左右,因为 NFSv4 读文件时候是单线程,所以无法触发链路聚合,只能跑 1G 带宽。

是不是触发 watchdog 我就不了解了。触发 bug 的一瞬间机器就重启了,重启完日志也很干净,我的水平也不足以给内核 debug 。

包括 BIOS 在内的所有固件已经更到最新版了。现在的只能把数据备份一下转 Linux 了。
nuk
    14
nuk  
   2023-09-28 23:41:49 +08:00
@gridsah 那没办法了,直接 reset 大概率是硬件触发的,不知道 bge 里提到的两个参数有没有用
hw.bge.allow_asf
Allow the ASF feature for cooperating with IPMI. Can cause
system lockup problems on a small number of systems. Enabled
by default.

dev.bge.%d.msi
Non-zero value enables MSI support on the Ethernet hardware.
The default value is 1.
gridsah
    15
gridsah  
OP
   2023-09-29 09:10:01 +08:00
@nuk Microserver Gen10 没有 IPMI 。而且我推测也不是中断机制的问题,因为这个 bug 在开机几个小时后就很难触发。

我刚刚让 11 楼提到的的 '第一次操作' 也触发了 bug ,就是双口链路聚合但只插一个口到傻交,然后开机后马上用 NFSv4 的负载占满 Gen10 的 1G 上行,4.7G 满载的上行流量就能触发 bug 。两个网口都试过了,都可以以这种方式触发 bug 。

我现在接上冷备盘,备份数据之后开始转 Linux 。

另外,修正 13 楼,是,我让 NFSv4 以单线程读文件,所以无法触发链路聚合。NFSv4 本身是多线程结构。
gridsah
    16
gridsah  
OP
   2023-09-29 17:31:19 +08:00
单网口,配静态地址,不带链路聚合也能触发 bug ....
gridsah
    17
gridsah  
OP
   2023-10-01 20:38:45 +08:00
@nuk #12 看起来这个 hard reset 是由 watchdog 出发的,因为我在 Debian12 的日志里找到了

kernel: sp5100-tco sp5100-tco: Watchdog hardware is disabled

但是要修这玩意得改 BIOS.....
nuk
    18
nuk  
   2023-10-02 00:02:17 +08:00
@gridsah 不知道是不是 amdsbwd 这个模块,可以禁止加载看看
gridsah
    19
gridsah  
OP
   2023-10-03 09:08:17 +08:00
@nuk #18 不搞了,硬盘上的 FreeBSD 已经没了,被我换成了 Debian12 。这几天正在看看 journalctl -b 里面报的错有什么是我能修的。
gridsah
    20
gridsah  
OP
   2023-10-03 10:18:04 +08:00
这里发一下选系统的流程给后来人做个参考。

从惠普那找到 Gen10 的 QuickSpecs 文档,发现官方确定兼容的系统是 REHL 7.4 ,去红帽那里下载好对应版本。装上去,导出启动日志。

我想用 Debian12 ,装上去,导出启动日志。

最后两个日志汇总 warning 和 error ,以 RHEL 7.4 日志为基准,按照出错的功能/硬件,有:

FADT field Pm2ControlBlock has valid Length but zero Address......
Ignoring BGRT: failed to map image memory

-pmd_set_huge: Cannot satisfy [mem 0xf8000000-0xf8200000] with a huge-page mapping due to MTRR override.

[Firmware Bug]: HEST: Table contents overflow for hardware error source: 2.

-[Firmware Bug]: ACPI: No _BQC method, cannot determine initial brightness
-pci 0000:05:03.0: ASPM: Could not configure common clock

pnp 00:04: disabling [mem 0xfeb00000-0xfeb00fff] because it overlaps
usb: port power management may be unreliable

+device-mapper: core: CONFIG_IMA_DISABLE_HTABLE is disabled. Duplicate IMA measurements will not be record
+pstore: ignoring unexpected backend 'efi'

sp5100-tco sp5100-tco: Watchdog hardware is disabled

-random: systemd: uninitialized urandom read (16 bytes read)
-usb 2-4.1: device descriptor read/64, error -32

kfd kfd: error getting iommu info. is the iommu enabled?
kfd kfd: Error initializing iommuv2 for device (1002:9874)
kfd kfd: device (1002:9874) NOT added due to errors

以短横线 - 开头的是 RHEL 7.4 独有的报错,以加号 + 开头的是 Debian12 独有的报错。其他是两个系统共有的报错。

一通 google 之后,发现以 + 开头的 2 条信息都是些不影响它作为 NAS 使用的小问题,RHEL 上独有的报错不确定会影响啥。

我需要用 USB 外接 SATA3 硬盘来做冷备,两个系统都有的 USB 电源管理的报错倒不重要,毕竟传完数据就把 USB 线拔走了,耗电不耗电不重要,反正不会烧设备。但是 RHEL 独有的那个 usb 报错就让我心里没底。

至于其他共有的报错,惠普说 RHEL 7.4 没问题,那就姑且认为这些报错不影响使用吧。

决定使用 Debian12 。

启动日志读下来,感觉 HPE Microserver Gen10 这个设备就像是一个半成品,Gen10 plus 才是成品。

官方宣称兼容的 RHE 7.4 都有这么多报错,而且有些出错的 ACPI 功能实际上是 iLO 要用的功能,而 Gen10 没有 iLO 。

此外,如果在 BIOS 里面开了 iommu ,那么板载的 raid 卡就出问题,需要在内核参数中加入 iommu=pt 或者 iommu=soft 才能让系统正常认到板载 raid 卡里的四块硬盘。但我又不开虚拟机,所以在 BIOS 里面把 iommu 关了,不会触发板载 raid 卡的 bug 。

感觉上来说,Gen10 的 BIOS 固件压根没用心做。



最终,目前 Gen10 作为 NAS 的方案是,200G intel S3710 (uefi+lvm+ext4) + 4*8T HC320 (raidz2) + 2*16G 傲腾 (SLOG) + 256G NVMe SSD (200G as cache)。

这次迁移发现,我有可靠的冷备方案,可以接受 raid5 连炸两块盘,决定抽点时间把 raidz2 重建成 raidz 。

在查资料的过程中,我还是认为支持 COW 文件系统才是未来趋势。ZFS 现在在 Oracle 手里,就我对 Oracle 的了解,它绝对不会把 ZFS 的 CDDL 改成 GPL ,进入 Linux 内核的只有 btrfs 一枝独苗。RH 的 stratis 只是把现有的方案整合了一下假装是个 '下一代文件系统',并不是一个新的 fs 。所以我再给了 btrfs 一次机会,把群晖上的文件系统从 ext4 切成了 btrfs ,性能差是差,倒也基本够用。目前一切正常。
gridsah
    21
gridsah  
OP
   2023-10-05 15:40:22 +08:00
更新:

系统选好,zpool 配好,导数据速度正常,但是发现了在 zpool iostat 显示没有负载的情况下,sysstat 中的 iostat 显示有负载的问题。
t/978894
查很久文档没有结论。

最后决定,去 TMD OpenZFS ,上灵车!
btrfs 文档阅读中......
gridsah
    22
gridsah  
OP
   2023-10-05 16:09:06 +08:00
更新:

#21 的问题解决了,问题出在我不会用 iostat 上

目前决定,PVE 保留 ZFS ,NAS 用 btrfs
( 有冷备说话就是硬气
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5077 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 51ms UTC 03:52 PVG 11:52 LAX 20:52 JFK 23:52
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86