从最近发的一个工单来吐槽一下群晖的技术支持和 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 ,对于有服务器运维经验的用户来说,客服的回复多数时候有误导性。

4606 次点击
所在节点    程序员
69 条回复
gridsah
2023-10-28 20:22:52 +08:00
后面来的朋友们,这是个吐槽帖啊,不是个技术辩论帖啊,这帖的画风咋歪成这样了 /?
gridsah
2023-10-28 20:31:01 +08:00
@GooMS #34 这听起来像是权限问题

但最简单的方法是,让我学一下 @liuxu 老哥,开个 ssh 让我登上去看看。
zhughs
2023-10-28 21:07:03 +08:00
@gridsah
1.好像目前群晖还没有收费的技术支持,可能你买一台 DS3622xs 再提工单会好一些?(充值方式不同)
这边有用公司的 SA3200D 提交问题,回复速度和回复问题的精细程度完全碾压我自己 916 提的。
2.有关于 mdadm 自己也不知道自己的 raid5 中哪里的数据对,哪里的数据不对,mdadm 所做的只是让 mdadm 可以正常运行下去
btrfs 可以通过出错逻辑位置转换为物理位置然后让对应的 mdadm 重算,这个在技术层面可以实现。而且新版本也有提供 mdadm 的 fast repair 功能,这个需要文件系统的配合,说明是有魔改过的。

3.data checksum 是存储在 btrfs 的 checksum tree ,而 checksum tree 是在 metadata extent 里的,所以必定是两份。
gridsah
2023-10-28 21:37:05 +08:00
@zhughs #43 关于第二点 '提供 mdadm 的 fast repair 功能' 这个有链接或者出处吗,我想看看

第三点,我看 btrfs 文档说的是 The whole metadata block has a checksum stored inline in the b-tree node header, each data block has a detached checksum stored in the checksum tree.

按照你的理解方式: 文档逗号以前的意思是,metadata extent 有一个和 metadata 数据存储在一起的 checksum 。data block has a detached checksum stored in the checksum tree 的意思是所有的数据的 checksum ,不论是 metadata 还是 data ,都存储在一个共用的 checksum tree 里面,所以 metadata 的 checksum 有两份。

但是,文档里说,metadata 也有两份,如果按照你这个思路继续推,两份 metadata 有两份跟随 metadata extent 的 checksum ,然后 checksum tree 里还有一份 metadata 的 checksum ,那这不就有三份 metadata 的 checksum 了吗。

所以我认为,文档中逗号以前的意思是,metadata extent 有一个和 metadata 数据存储在一起的 checksum ,不变。但是 metadata 有两份,因此 metadata 的 checksum 有两份。data block has a detached checksum stored in the checksum tree 的意思是所有的 data extent (不包括 metadata extent) 的 checksum 存储在一个独立的 checksum tree 中。所以 data extent 有一份数据 (一个 data extent tree) 和一份 checksum (一个 checksum tree)。

emmmmm 我觉得我的理解比较合理。
gridsah
2023-10-28 22:07:48 +08:00
@zhughs #43 说白了,我就是想知道群晖如何处理 silent data corruption......

关于第二点,文件的逻辑位置转硬盘物理位置,组合数据之后重新计算 checksum 的这个功能,在 #23 我估了一下这个功能的工作量,很大,不论是对 madm, btrfs 还是对 DSM 底层的魔改,工作量都很大。我觉得群晖不大可能费力气做这个功能。

我在 存储池 -> 全局设置 里面找到了这个功能。关于这个功能,我只在 https://www.reddit.com/r/synology/comments/qy51ba/what_the_heck_is_fast_repair/?rdt=53246 看到了关于这个功能的猜测,还未被证实。如果帖子里的描述是真的的话,那说不准群晖还真的做了这个功能。

但从回帖的内容来看,我和这帮老外的想法一样,群晖不会花大功夫来研究和定制底层。

而且我认为我的看法是对的,因为,从我这个角度来看,至少他们在升级组件的时候不会有额外的,因兼容群晖自己的魔改而产生的额外的工作量;而且不魔改组件也意味着,不会受人事的限制,不用担心会魔改的员工走了以后没人接活儿的问题。
sorsens
2023-10-28 22:57:27 +08:00
找客服讨论技术支持?不应该找售后工程师吗?

还有最后强调这是吐槽贴。

怕是国内的托吧。

最后给小伙伴建议,重要数据安全还是要靠多备份,冷备份,异地备份。
gridsah
2023-10-28 23:03:02 +08:00
@sorsens #46 你连基本的判断能力都没有吗,上来就喷,已拉黑
Rorysky
2023-10-28 23:52:20 +08:00
你怎么理解,技术支持说的 [当文件系统在进行 FS scrubbing 的时候如果查到某个文档 data 真的坏了,那就会去做 RAID scrubbing 然后用 RAID parity 来修修看(不管有没有开 COW )]

这不明显意思,有额外的机制会由文件系统的校验值异常而去处罚软 raid 层的动作么?

感觉你问问题都是预设的立场。
Admstor
2023-10-29 00:24:00 +08:00
看了楼主,觉得群晖技术支持真好

万亿市值的 BAT 都没活人客服,我要问阿里你们淘宝技术细节估计我号立刻就炸了
gridsah
2023-10-29 00:24:16 +08:00
@Rorysky 我对那句话的认识是,群晖的这个人不理解 mdadm scrub 的行为,导致他认为 mdadm scrub 可以修复 btrfs 中的 data corruption 。

因为,我对所有组件的预期行为是它们在未被群晖定制的情况下的行为,对于未定制过的 mdadm 来说,mdadm scrub 修复的是 mdadm 自身的问题,无法修复 mdadm 之上的 btrfs 中的问题。而我问他 mdadm scrub 凭什么可以修复 btrfs 中的问题,群晖的人又不告诉我原因。所以我有理由怀疑群晖的这个人并不理解这些组件的协同工作方式;或者从恶意的角度出发,他理解,但是他以为我是竞争对手的人而不想告诉我。

另外,你想要讨论,我欢迎,请发表你的观点与逻辑链,不要针对我如何来输出。你可以说我的观点是错的、浅显、片面,然后开始反驳,而不能说感觉我如何如何,你要再这么说的话我就要开喷了。
gridsah
2023-10-29 00:29:30 +08:00
@Admstor 淦,群晖的看到了请联系我付宣传费。

群晖和 bat 不一样的吧,bat 是使用开源工具来自己写服务,然后用自己写的服务挣钱;群晖是把开源服务组合起来卖钱。我问 bat 他们的服务咋写的他们肯定不会告诉我,但是如果我问他们的东西怎么用的话,就很合理;迁移到群晖这边就是,我问群晖的客服你们这个保证客户数据完整性的功能是用什么组合出来的,我觉得没啥不合理的。hhhhhh

倒是,群晖的客服和 bat 的客服一比,确实算很不错了。
leang521
2023-10-29 07:52:11 +08:00
都是消费级的东西,别要求那么高。以前我也最求 ZFS 的数据安全,后来发现,在易用性面前,安全靠后站。以前还搞个 ZFS 做冷备,但是数据量越来越大,一次冷备就要好几天。现在也都放弃了。
liprais
2023-10-29 12:24:20 +08:00
这种 consulting 一般是按小时计费的,楼主给群晖多少钱啊?
WuSiYu
2023-10-29 17:56:56 +08:00
群晖要是说普通的 mdadm + btrfs 下能用 btrfs 对 data 的 self-healing 感觉是瞎扯,如果发生了数据静默错误,btrfs 根本不知道 mdadm 下的冗余,mdadm 也无法在不一致时被 btrfs 指导去选择正确的那份数据,除非他们改了 btrfs 和 mdadm

另外 QNAP 的企业级产品才有 zfs ,家用级是更普通的 lvm + ext4
gridsah
2023-10-29 18:08:44 +08:00
@leang521 核心数据需要冷备+定期检查 checksum ,反正我的核心数据也就不到 2T ,其中 1T 还是视频文件。

@liprais 我没给钱,因为个人用户没有那样的 support

我待的公司也不用群晖,否则我说不定能蹭一下公司的 business support

@WuSiYu 看来咱们两个的理解相同
dd102
2023-10-29 20:38:24 +08:00
我觉得作为企业来讲,想了解一下关键数据安全技术怎么实现是很正常的吧?我买储存的时候也会让厂家提供技术说明,作为采购评估的依据
WuSiYu
2023-10-29 21:04:02 +08:00
@gridsah 是这样,我又看了下群晖官网的宣传说法:“一旦发现不匹配(静默数据损坏),Btrfs 文件系统就能通过镜像元数据自动检测到损毁的文件(静默数据损坏),并使用支持的 RAID 存储卷来还原受损的数据,包括 RAID 1 、RAID 5 、RAID 6 、RAID 10 、F1 和 SHR 。”,很好奇它是如何实现的,如果确实是不能,那有虚假宣传的嫌疑。感觉可以用黑群晖虚拟机做个实验
rio
2023-11-04 21:02:16 +08:00
胡乱瞎猜,不如动手实验。别人早就试过了 https://daltondur.st/syno_btrfs_1/
gridsah
2023-11-04 22:09:50 +08:00
@rio 对对对,我想找的就是这样的实测文章。我刚在我的 HPE Gen10 上用公版的 mdadm+lvm+btrfs 测完,结论是不魔改组件的话 fs scrub+md scrub 不能修复静默错误。

等我参考这篇文章测一下群晖的行为。非常感谢,帮大忙了!!
gridsah
2023-11-05 22:58:47 +08:00
@geniussoft @Ericality @sentinelK @chronos @xianghou @GooMS @lifanxi @Damenly1 @Rorysky @zhughs @WuSiYu @dd102 @rio

我用黑群晖虚拟机模拟了一下的静默错误,发现我之前的观点和结论是错的,群晖真的实现了让 btrfs 利用 mdadm 中的热冗余数据来修复自己的数据的功能。

我新开了个帖子 https://www.v2ex.com/t/988874

模拟的过程在这里:

https://note.lishouzhong.com/article/wiki/%E7%BE%A4%E6%99%96%E7%9B%B8%E5%85%B3.html

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

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

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

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

© 2021 V2EX