从最近发的一个工单来吐槽一下群晖的技术支持和 DSM Raid

2023-10-28 10:12:56 +08:00
 gridsah

以下内容纯主观吐槽,各位看个乐即可,也给双 11 准备买群晖的朋友提供一点 FS 方面的参考。

事情起因是,我把自用的存储从 zfs/ext4 迁移到了 btrfs: Gen10 从 zfs 迁到了 btrfs raid10 ,白群晖从 ext4 切到了 btrfs 。

然后我就开始读 btrfs 的文档。(btrfs 和 zfs 的区别还挺大,这点等我下次摸鱼的时候再开帖子唠

我要吐槽的是:

a. 群晖在销售页面关于 btrfs 如何保护用户数据吹得有点过。zfs/btrfs 实现 self-healing 功能的前提是,数据有热冗余,单凭 checksum 只能检测出 data corruption 但无法修复。而群晖的销售给用户的印象是,他们有黑科技能恢复损坏的数据,但实际上他们只是尽量让 mdadm 和 btrfs 不出问题,至于用户的数据,坏了就坏了,修不了

b. 群晖的技术支持的客服,不知道是水平不行,还是警惕心太强,回复不但笼统,而且敷衍,甚至有时是错的。这个工单中,可能认为我是他们竞争对手的人,来套他们的方案...... 但我只是想知道他们如何保护我的数据。以上情况也不是第一次出现在我提的工单里了

下面贴一下工单对话,主题是 "关于存储池'数据清理'功能可以修复 checksum 异常的数据的疑惑":

看了一下我的设备所使用的存储空间的结构,先用 mdadm 创建 raid1 ,再将映射为 md2 的设备作为 pv 交由 lvm 管理,lvm 在 pv 上创建 vg ,进而创建 lv ,最后把 btrfs 放在 lv 上。

据我所知,btrfs 会记录每个 extent 的 checksum 值用于验证这个 extent 中的数据是否完整。而修复 checksum 有异常的数据需要额外的,具有正常的 checksum 的另一份数据。

比如在 Linux 上 btrfs 默认存储两份 metadata 用于在 metadata 损坏时修复这些损坏的 metadata ,而 data 则只存了一份,所以在这种情况下,如果 data 的 checksum 出现异常则无法修复。

而群晖 btrfs 文件系统中也使用了一样的配置,即,2 份 metadata 和 1 份 data 。所以我的理解是数据清理这个功能只能修复 btrfs 中的 metadata ,而不能修复 data 。是这样的吗?

如果不是的话,数据清理的行为和结果是什么样的?
您对于数据清理中 FS scrubbing 这个部分理解没有问题,但是执行数据清理这个操作会包含两个操作,FS scrubbing 和 RAID scrubbing 。

理论上如果 Btrfs 不开 COW 的话其实并不会知道某个 data 有损坏,只有读到这个文件才会知道文件损坏了。

而当文件系统在进行 FS scrubbing 的时候如果查到某个文档 data 真的坏了,那就会去做 RAID scrubbing 然后用 RAID parity 来修修看(不管有没有开 COW )。
数据清理如果包含 btrfs scrub & mdadm scrub 两个操作的话,它们的执行逻辑是怎样的?
先 btrfs scrub ,再 mdadm scrub ,这两个步骤一定会按这样的顺序发生?
或者像你说的那样,btrfs scrub 遇到 data checksum 不一致时才发生 mdadm scrub ?

我注意到,对于 mdadm scrub 来说:
1. mdadm raid5/6 在遇到数据不一致时会假定 checksum 错误,然后根据(尽管可能已经损坏的)已有数据重新计算 checksum
2. mdadm raid1 遇到数据不一致时会假定第一个硬盘的数据是正确的,然后覆写到其他的硬盘中
如果发生 data checksum 不一致的情况,那么 mdadm scrub 为什么可以修复 btrfs 中的数据?

按照我的理解来看,mdadm scrub 所更新的数据只是用于构成 mdadm 的数据。mdadm 暴露给 btrfs 的,btrfs 可以看到的数据并没有变化,所以我认为 mdadm scrub 无法修复 btrfs 中 data checksum 不一致的问题。这个推断的过程哪里有问题?
抱歉让您久等了,目前这边有与相关工程师讨论,回复如下:

目前 DSM 在执行数据清理的时候是会先执行 FS scrubbing 再执行 RAID scrubbing ,但由于您当前的许多问题涉及到 Btrfs 的底层原理及行为,由于 Btrfs 是 Oracle 所研发,因此对于此文件系统的具体原理与技术规范的准确解释,我们建议您可以直接查阅或咨询 oracle 官方。

参考: https://docs.oracle.com/en/operating-systems/oracle-linux/8/fsadmin/fsadmin-ManagingtheBtrfsFileSystem.html#btrfs-setup
我不关心 btrfs 的技术细节,我想问的是 DSM 如何保证数据被修复,或者向用户报告数据无法被修复。

btrfs 存储 2 份 metadata 和 1 份 data ,那么 data 损坏时,DSM 所用的 raid(mdadm)又不能保证 data 可以被修复。那么,在这种情况下,一旦数据无法被修复,DSM 会向用户报告拥有这部分 data 的文件损坏,需要用户手动介入?
首先,DSM 本身、Btrfs 文件系统又或是带有冗余功能的 RAID ,都不能完全保证在原始数据错误的情况下数据的完整性。

一般情况下如果数据在文件系统中出现错误,则大概率就已经发生文件系统错误,而文件系统检查都是以修好文件系统本身的结构为主,损坏的文件本身很有可能还是坏的。

因此若您的数据十分重要,Synology 始终建议您备份多个数据副本到不同的地方,以保证数据安全。

参考:如何备份 Synology NAS

关于这句 "首先,DSM 本身、Btrfs 文件系统又或是带有冗余功能的 RAID ,都不能完全保证在原始数据错误的情况下数据的完整性。" 本身就不对。

对于 Btrfs raid1/10 以及不稳定的 btrfs raid5/6 ,又或者是 zfs mirror/raidz 这种有 self-healing 的 fs 来说,在一份 data 损坏的情况下都可以根据 fs 内部的热冗余或 raid 中的奇偶校验码来修复损坏的那份数据。只有当 data 损坏且没有热冗余的情况下 fs 才会报告 data corruption 需要用户介入。

(注意,目前只有 btrfs/zfs 有 self-healing 。mdadm 没有,硬件 raid 也没有。

威联通用的是纯 zfs ,使用 mirror/raidz 的情况下可以触发 self-healing 修复 corrupted data ;或者像我一样自建存储,使用 btrfs raid10 也能让 self-healing 生效。

总之,准备购买群晖的朋友要注意,就我目前阅读的结论来看,群晖,不论采用什么方案都无法保证数据完整性,他们只能尽量保证 DSM 的运行不出问题;就我发了六七个工单的体验来看,对于知识不够丰富的个人用户来说,群晖的技术支持约等于 0 ,对于有服务器运维经验的用户来说,客服的回复多数时候有误导性。

4336 次点击
所在节点    程序员
69 条回复
PrinceofInj
2023-10-28 10:22:49 +08:00
看你这些问题,基本上不应该问客服,客服大概率是不知道的。不知道他们有没有高级问题专家,就是所谓的升级处理,可能得由那些人来恢复。
gridsah
2023-10-28 10:32:33 +08:00
@PrinceofInj #1 个人客户应该没有这样的工单升级机制,如果有的话,客服看到问题无法回答之后就直接升级到他们的研发那边了,而不是找他们的工程师要一个结论然后发给我。

倒是企业客户的话,应该可以有这样的技术支持,毕竟,大客户充够钱了。
geniussoft
2023-10-28 10:38:41 +08:00
不知道你哪里不满意?

数据要恢复,必须要有冗余,这是客观规律。

DSM 可以实现,如果开启了数据检验功能,如果 data 有错误,那么在读取文件时,或者 data scrub 时,会利用 RAID 5/6 的冗余来恢复。

如果是你设计,你能设计出更好的方案么?
GooMS
2023-10-28 10:42:36 +08:00
数据还是得靠冷备,群辉我只做集合
gridsah
2023-10-28 10:47:25 +08:00
@geniussoft #3 群晖无法保证数据可以被修复。群晖的 btrfs 跑在 mdadm+lvm 上,fs 内只有 metadata 带热冗余,data 不带。

你所谓的利用 raid 5/6 来恢复用的是 mdadm 的软 raid ,mdadm raid5/6 在发生数据不一致时它不管到底是数据有问题还是 checksum 有问题,统一认为 checksum 有问题,这就有可能利用错误的数据计算出错误的 checksum 。即,mdadm 只会改 btrfs 看不见的 checksum ,btrfs 原来看见的是啥,现在看见的还是啥,数据该坏还是坏的。

这套逻辑的核心不是数据完整性,而是保证 mdadm+lvm+btrfs 这个组合正常运行。

建议仔细阅读工单内容。
Ericality
2023-10-28 10:48:47 +08:00
聊的过于高深了 有些看不懂了
但是省流就是用 btrfs 的话存在数据自己损毁(非硬件故障)的可能 且这种损毁不会自动修复 只能依靠备份/raid 数据来修复对吧?
gridsah
2023-10-28 10:50:59 +08:00
@GooMS #4 是的,我原先准备今年双十一买个新群晖来替换我 2 盘位的群晖。现在没这个欲望了。

现在我保留群晖的原因只有方便的外网访问,以及 DSM Photos 了。
sentinelK
2023-10-28 10:55:12 +08:00
在我理解看来,技术支持是帮助用户实现功能的,不是探讨方案先进性的。
所以其实群晖技术支持能阐述其技术的基本流程与关键词,并给与第三方的技术参考页面,在我看来已经算是合格了。

然后奇怪的是,楼主讨论到一半,说:“我不关心 btrfs 的技术细节……”从而转进到了群晖的业务方案,在我看来技术支持没有权限来回答这个问题。

这就像是你去饭馆,问老板,你这个面条用的什么面啊?老板说,我们用的中筋面粉,这样软硬适中。
然后你又说,我不关心面粉细节,我关心的是你家面条是怎么做的?都添加了什么?顺序怎样的? 25 个香料分别是什么?配比如何?怎么保证我的口感和味道的同时还能保证我的食品安全?

这老板不给你打出去算是脾气好的。
dengtongcai
2023-10-28 10:57:15 +08:00
NAS 真的用的我心累, 太难折腾了, 我搞个 jellyfin 也一堆问题, 心累
gridsah
2023-10-28 10:57:48 +08:00
@Ericality #6 省流版

群晖的 btrfs 在无硬件故障的情况下,可能出现数据损坏,并且在群晖发现数据损坏之前,不会向用户报告。而且一旦碰到无法修复的情况,要恢复数据就只能靠用户自己的冷备。群晖自带的 mdadm raid 也救不回来。

( 软件和硬件 raid 的核心是高可用,只有 btrfs/zfs 才在 raid 的基础上加了 self-healing 的功能
sentinelK
2023-10-28 10:58:00 +08:00
至于说“...都不能完全保证在原始数据错误的情况下数据的完整性。”

这是完全正确的,他的用词是“完全保证”。即任何的文件系统方案都是保证高可用,并不保证数据 100%安全。
在这个语境下,其实就是在给楼主下逐客令,不想跟你聊了。
geniussoft
2023-10-28 11:03:33 +08:00
@gridsah
看来是你没有认真理解。

首先发生的是 FS 检查,所以不会落入你说的问题中。
(实际上你说的问题,是常见的误区,即 RAID1/5 的问题,当冗余不一致时,根本无从判断哪个正确。)

但是当 DSM 开启数据检验时,它可以根据 CRC 确定哪个副本是正确的。

CRC32-C Checksums - Checksums will be generated for user data and metadata to avoid silent corruption. If a checksum mismatch is detected during a reading process, it will first try to recover automatically, by obtaining a good copy of this block for metadata. If no good copy is available, an error will be reported to the user.
• Silent data corruption detection and recovery (file self-healing) - In DSM 6.1 and above, Btrfs file system has the ability to not only detect the silent corruption on the user data but also to recover it. If checksum mismatch is detected, the file system layer instructs MD layer to read redundant copy (parity or mirror) of the damaged block. It will then automatically recover the damaged block with the good redundant copy. This file self-healing feature requires the RAID volumes to run RAID 1, 5, 6, 10, F1, or SHR.
gridsah
2023-10-28 11:04:49 +08:00
@sentinelK #8 emmmmm 你说的好像也没啥毛病,这个角度是回应 toC 业务的情况。我印象里群晖有好多 toB 的业务,所以我试图以一个 toB 业务客户的身份和客户聊,从 toB 的角度看,我问实现细节其实是没啥问题的。

额,应该是我把工作习惯带到这里了吧,我接触的比较多的都是 toB 业务。

至于你提到我说 "我不关心 btrfs 的技术细节" 是因为,我看出客服好像不想回答实现细节,所以我试图变成一个小白用户,让客服直接给我一个结论,能或者不能。

最后客服给了我一个误导性很强的不能.......
devopsdogdog
2023-10-28 11:06:47 +08:00
那你为啥不觉得 zfs 会有问题。 数据在内存中处理都可能有错,有相应的规则 算法去处理的,别老想的这么极端,真想研究 读读底层实现,去问一个客服是徒劳
gridsah
2023-10-28 11:11:02 +08:00
@geniussoft #12 我根据你这段找到了一个 Synology_Data_Protection_White_Paper.pdf 让我先读一读。
gridsah
2023-10-28 11:12:34 +08:00
@devopsdogdog #14 因为群晖的 btrfs 是跑在一层层 device mapper 映射出的设备上的。而 zfs 我见到的,多是直接用硬盘,或者硬盘分区。所以我才去研究群晖对于 btrfs 的用法以及他们的 hack 。
gridsah
2023-10-28 11:29:59 +08:00
@geniussoft #12 过了一下 Synology_Data_Protection_White_Paper.pdf

我的理解是,群晖对于 btrfs 做了一些 hack ,让 btrfs 在发现 data extent 的 checksum 不一致时,就从 mdadm 读这个数据的 redundant copy ,然后据此恢复这个 data extent 的数据?

我查了好久群晖如何处理 bit rot 的文档,没想到从这找见了 hhhhh
chronos
2023-10-28 11:46:38 +08:00
群晖的这个 mdadm+lvm+btrfs 的方案确实不如 zfs 的实现优雅。我猜群晖应该也没有加 dm-integrity ,https://unixsheikh.com/articles/battle-testing-zfs-btrfs-and-mdadm-dm.html 从这篇文章的测试结果看,加了 dm-intergrity 后非常慢。
72MpQOSsJhyLs88N
2023-10-28 11:59:43 +08:00
@gridsah 我觉得普通客服是肯定不懂这些的。而且家用级的 Plus 这种都是走代理商走量的,你的工单肯定到不了研发,因为所有成本肯定最后都要算到产品里的。如果是 RS3622xs 这类的你应该能通过销售去找到研发的。
akira
2023-10-28 12:22:07 +08:00
现在对客服的要求都这么高了么。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/986195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX