V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  gridsah  ›  全部回复第 2 页 / 共 8 页
回复总数  143
1  2  3  4  5  6  7  8  
读到这的朋友请宽容一下我上面的那些错别字,我自己定制了 rime 的输入方案,还没磨合好.... thanks
@geniussoft #28 bro 你如果想要提出你的不同意见的话,最好完整地加上前音后果,准确地使用术语,这可以提升我们的沟通效率。

or, bro, we can use English to talk about that, if you do not know how to say those concepts in Mandarin clearly.

That's OK for me.
@geniussoft #28 我的假设是 btrfs 已经检测到了 data extent (不是 metadata) 的 checksum 异常,这才表示 data corruption 。

在 raid1 中,这表示 (a) mdadm raid1 主盘 (第一块盘) 中的数据有了问题,但由于 btrfs 只存了一份 data extent 所以 btrfs 修不了。mdadm 再做 scrub 的话,会把主盘上的有了问题的数据覆写到从盘上。此时数据就彻底坏了。

(b) mdadm raid1 的从盘 (第二块硬盘) 中的数据有了问题,但主盘上的数据可能是好的,mdadm 再做 scrub ,会把主盘上的可能 OK 的数据覆写到从盘上。此时数据可能就正常了。

你说的 'raid5/6 默认是不读校验条带的' 是指什么时候不读,不读条带数据,还是不读校验数据?
@geniussoft #26 我没太看懂你这段再说啥,能不能说具体一点?
@gridsah #23

这还是建立在存储池空间连续的情况下。群晖给存储池提供了足够的的灵活性,如果用户先建立数个小存储池 (对应数个 lv),然后给存储池扩容,这就导致属于每个存储池 (lv) 的空间并不连续,会增加计算难度。

这段的 '存储池' 改成 '存储空间'。
@GooMS #22 我没太看懂你在说啥,给一个具体的案例?
@geniussoft #12 补 #15 的内容

#12 只是我阅读群晖这篇文档后的推测。目前我依旧坚持我写在 #10 的判断。

即,群晖先做 fs scrub 再做 raid (mdadm) scrub 的成果是,修复影响 btrfs over lvm over mdadm 这套组合正常运行的问题,而由于 mdadm 暴露给 btrfs 的,btrfs 能看到的数据没有变化,所以 btrfs 不能修复已损坏的数据,最终,用户已损坏的数据保持在已损坏状态。

原因如下。

我试图从 raid.wiki.kernel.org 中验证 mdadm 是否有直接的可供 DSM 使用的,用以获取数据 redundant copy 的方法,以佐证我 #12 的猜测,但是没找到。我只找到了:

https://raid.wiki.kernel.org/index.php/Detecting,_querying_and_testing#Simulating_data_corruption mdadm 并不保证数据完整性
https://raid.wiki.kernel.org/index.php/Scrubbing_the_drives mdadm 检测到 block error 时,对于 raid1 就从第一个盘取数据然后搬到其他盘,对于 raid5/6 就根据现有数据重新计算校验和

-----

如果让我来实现这个获取数据的 redundant copy 的功能的话,我先给一个 raid1 的思路,先从 btrfs 中拿到到已损坏的数据所处的,相对于文件系统起始的位置偏移;再计算 btrfs 所在的 lv 的对于硬盘的物理位置,结合二者可以计算出硬盘什么位置有 block error ,然后去 mdadm raid1 的从盘上对应的位置找到对应位置,利用从盘上的数据计算 checksum 并和 btrfs 中的 checksum 比对,以确定到底是主盘上的数据有问题,还是从盘上的数据有问题,然后修复。

这还是建立在存储池空间连续的情况下。群晖给存储池提供了足够的的灵活性,如果用户先建立数个小存储池 (对应数个 lv),然后给存储池扩容,这就导致属于每个存储池 (lv) 的空间并不连续,会增加计算难度。

这还没算 SHR+raid1 等其他组合的计算难度和工作量。除了 raid1 还有 raid5/6......

总之,实际操作复杂得多。计算这些数据需要群晖的开发人员对于 mdadm, lvm, btrfs 中数据在硬盘上的的物理分布有深入的理解。而兼容群晖所提供的灵活性也需要大量的开发和测试工作。

**而就我对群晖的主观认知,他们不会投入精力在定制这些基础组件上,所以我判断他们用的是原版的 mdadm 。**

而原版 mdadm 的行为,如文档所说,并不保证数据完整性。

-----

所以 bro 你还有其他可以佐证的文档没有。

( 我最近在读关于群晖如何保证数据完整性的文档,目前我的主观判断是,群晖无法真正保证用户数据的完整性,所以我原定的双十一购买新的群晖的计划也就无了
@xianghou #19
@akira #20

我原本的打算就是,客服肯定回答不了,直接转研发,我和他们聊。

@sentinelK #11

我知道,所以,工单到那也就停了。
@geniussoft #12 过了一下 Synology_Data_Protection_White_Paper.pdf

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

我查了好久群晖如何处理 bit rot 的文档,没想到从这找见了 hhhhh
@devopsdogdog #14 因为群晖的 btrfs 是跑在一层层 device mapper 映射出的设备上的。而 zfs 我见到的,多是直接用硬盘,或者硬盘分区。所以我才去研究群晖对于 btrfs 的用法以及他们的 hack 。
@geniussoft #12 我根据你这段找到了一个 Synology_Data_Protection_White_Paper.pdf 让我先读一读。
@sentinelK #8 emmmmm 你说的好像也没啥毛病,这个角度是回应 toC 业务的情况。我印象里群晖有好多 toB 的业务,所以我试图以一个 toB 业务客户的身份和客户聊,从 toB 的角度看,我问实现细节其实是没啥问题的。

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

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

最后客服给了我一个误导性很强的不能.......
@Ericality #6 省流版

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

( 软件和硬件 raid 的核心是高可用,只有 btrfs/zfs 才在 raid 的基础上加了 self-healing 的功能
@GooMS #4 是的,我原先准备今年双十一买个新群晖来替换我 2 盘位的群晖。现在没这个欲望了。

现在我保留群晖的原因只有方便的外网访问,以及 DSM Photos 了。
@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 这个组合正常运行。

建议仔细阅读工单内容。
@PrinceofInj #1 个人客户应该没有这样的工单升级机制,如果有的话,客服看到问题无法回答之后就直接升级到他们的研发那边了,而不是找他们的工程师要一个结论然后发给我。

倒是企业客户的话,应该可以有这样的技术支持,毕竟,大客户充够钱了。
@dangyuluo #35
我才意识到 .ssh/config 有模糊匹配 hhhh
关于日志,bro ,你说得对。但是这个日志主要是给我自己看的,所以,我信就行 :p
@LindsayZhou #33
@dangyuluo #31

我刚转了 10 条连接的信息到 ssh_config 里面,确实发现有个针对 Host 字段的模糊匹配。100-200 这个量级的连接重新针对 Host 字段的模糊匹配设计命名规则的话,被模糊匹配过滤以后大概有 20 个左右的结果。

似乎,我不需要脚本了。连接信息的检索和修改 grep 和 sed 就够用。下面要解决的就是日志的问题了。
@dangyuluo #31 bro 注意看,100-200 个 ssh 连接的配置信息,这意味着 .ssh/config 里有 100-200 个 Hostname 配置,我可记不住每个连接都有啥样的 Hostname 。这个量级 vim/emacs 浏览一遍都得几分钟。
@4kingRAS #28 公司里也有 jumpserver 。

但这 100-200 ssh 连接是我自己的机器,只有我自己用,所以我不想耗自己的资源再起跳板机 :p
自己的嘛,能省就省
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5725 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 06:26 · PVG 14:26 · LAX 23:26 · JFK 02:26
Developed with CodeLauncher
♥ Do have faith in what you're doing.