关于硬盘 RAID 配置的科普与疑问

2021-08-07 09:33:04 +08:00
 LeeReamond

NAS 相关姊妹贴,前情提要

原贴回复过长,单独开一贴询问 RAID 问题。

首先科普部分,如果有老哥完全不清楚 raid 的话,简单描述常见 raid 是什么:

    假设有 n 块硬盘的话,在其中 n-1 块上写入实际数据,在剩下一块上写入对应的 xor 校验数据,
    因此任意一块硬盘的数据即使完全丢失,可通过 xor 结果反向计算出丢失的数据是什么,进行重建。
    技术细节上校验块并不集中于同一物理硬盘,而是平均分布于各盘。
    损失 1/n 的容量。假设有 10 块 10T 机械硬盘,最多可储存 90T 实际数据。
    因为 raid5 只能应对一处错误,如果两处错误同时发生,则会导致所有数据全部丢失的窘境。
    为了修正这个弱点,raid6 在 raid5 基础上将校验块又备份了一份,所以同时两处出错也能完全恢复数据。
    损失 2/n 的容量。另外缺陷是由于每次写入至少有三块硬盘在动,通常速度会比 raid5 更慢。

前贴中老哥回复的总结

有不止一位老哥提到 raid5 容易发生重建失败的问题。因为单个盘掉盘以后插入新盘的重建过程,由于硬盘容量通常很大,重建通常会持续若干天,在这期间发生再次掉盘则全部数据 GG 。

操作上的疑问

很多东西需要问一下,因为我只配过 raid 而确实没发生过数据损毁的情况,可能还是用得少。

个人感想

上文只是作为知识上的好奇,看了各位的回复以后,我觉得我应该会使用两张盘搞 raid1,剩下的都是裸数据的方案。因为即使是 nas 当中,大多数数据也是没有什么保护需求的,只有少部分个人文件、家庭照片、稀缺资源等等需要备份,搞一个专用保护分区应该足够,剩下的数据完全可以随便存放,丢了也就丢了,这应该是一套比较合适的方案。

另外问一下关于硬盘断电,win 有自带的判断硬盘一段时间无活动就会自动断电的功能,通常来说断电可以最大程度上保护硬盘使用寿命,同时还能省电,我想知道有无老哥遇到过频繁断电通电导致磁头损坏之类的问题。

4428 次点击
所在节点    问与答
50 条回复
ryd994
2021-08-07 21:23:59 +08:00
@singerll
1. 那你得找啊。软件随便你换什么设备什么系统,只要有对应的软件支持,都能读出来。如果系统挂了,数据盘换台机器就能导入。硬件 raid 能实现的功能,配置信息多写一份的事情,软件 raid 怎么可能实现不了?软件相对硬件的优势首先就是灵活性。

2. 软件 raid 的配置信息和硬件 raid 一样,是在数据盘上分布的。你有没有用过软件 raid ? mdadm 或者 zfs 。就算你只插一块盘,系统也能识别这是 raid 盘还能告诉你缺了什么。硬件 raid 碰上傻逼 raid 控制器的,要保证顺序一样否则直接重建。工业上当然不会用这么傻逼的控制器。但是家用你买低端卡的话还真能买到。

3. bbu 和超级电容还是要上 ups 啊。你最大的误区在于:writeback cache 到底有什么用?
如果你是顺序写入,writeback cache 是没有用的。这也是家用 nas 的使用场景。瓶颈就是磁盘速度。日志文件系统不会因为断电就损坏,只会损失最后写入的一点数据。反正你软件已经没了,只要文件系统不崩,差这点数据没区别。

writeback cache 的作用是提高随机写入。对于数据库来说,差最后这点数据,数据库结构就崩了。所以数据库必须在每个修改之后都 flush 。而是数据库操作大多数随机的。结果就是性能会非常差。有非易失写缓存的情况下,raid 控制器可以忽略 flush 请求,只要写到缓存就算 flush 完成。

就算没有写缓存,只要合理配置,而不是瞎关 flush,那么即使断电也不会损失数据。只是性能差。而这对于家用的文件储存 nas 来说就不是问题。

4. 你停电就开始关机的话 ups 会耗尽?家用 nas 又没有在线率要求,停电了反正你其他设备也停了,关机就行了。
你说冗余电源会坏还不如先问问 raid 卡和 hba 哪个更容易坏?
冗余 hba 很简单,sas 协议本来就支持,全插上去就行了。设置管理冗余 raid 控制器则复杂得多。

软件 raid 还有一大优势就是可以选择性地恢复和校验。这是 zfs 这些基于文件系统的阵列相对于基于块的磁盘 raid 的优势。

生产上用硬件 raid 主要还是因为性能问题。高速读写时软 raid,特别是 raid5/6 这些 hash,对 CPU 还有 pcie 带宽的占有都很厉害。
singerll
2021-08-07 22:00:50 +08:00
@ryd994
1 、我的原话是“硬件 raid 是有缓存的,有的还有电容保护,在你掉电时能保证数据写入。”我并没有提 writeback cache

2 、再说一遍,我想说的是硬件 raid 和软件 raid 的区别,而不是个人 nas 中硬件 raid 和软件 raid 的区别。

RAID 卡能不能买到,UPS 会不会崩掉,这个跟 RAID 本事没关系,我想说的硬件 RAID 能够帮助你缓解这些情况。你光说我说的是特殊情况,而你一直用特殊情况在回应我。那我还说软件 raid 万一有 bug 呢,软硬 raid 再好也抵不上我直接建一套分布式存储,要抬杠谁不会。
singerll
2021-08-07 22:04:19 +08:00
@ryd994 而且我觉得我一直说的是,硬件 RAID 能够解决什么问题,而你一直跟我说的是,这个问题存不存在,即便存在,是不是特殊情况。
billlee
2021-08-07 22:39:44 +08:00
关于硬盘失效,我在办公室里维护着十多台服务器,两年多来已经报废了 2 块硬盘了。

硬盘失效的表现,在有阵列卡的情况下,就是掉盘,指示灯直接灭了,具体出了什么问题,因为被阵列卡隔着,就不太清楚了。

没有阵列卡的情况下,表现就是某个地址报 unrecoverable read error, 并且覆写后仍然读不出来。

家用情况,还是推荐软 RAID 1 或者软 RAID6.
billlee
2021-08-07 22:42:00 +08:00
@msg7086 不懂就不要瞎说了。硬盘的数据是每个扇区有 CRC 的,出错的情况下只会报 unrecoverable read error, 不可能给你返回错的数据。阵列卡或 RAID 软件收到错误码就知道是哪块硬盘上的数据出错了,RAID 就是用来恢复错误的,不是用来检查错误的。
ryd994
2021-08-07 22:43:02 +08:00
@singerll 你对硬件 raid 特别是写入缓存的认识有根本性问题。
1. 硬件 raid 的 bbu 不能保证数据写入,而是保护缓存数据,如果你不及时重启还是会完蛋,你这是根本性错误。
你就没有想过 raid 卡那点小电池 /电容怎么可能驱动几十块硬盘?
企业级 ssd 内置的电容也是提高随机写性能用的。没有电容的 ssd 就不能用了吗?就会丢数据吗?固件写得差的时候才会。

2. 硬件 raid 并不会提高数据一致性。文件系统本身就可以保证断电不崩。缓存的作用而是提高性能,让你可以忽略 flush 指令。如果没有缓存,数据正确性和安全性不会有问题,只有随机写入性能问题。不管实际情况瞎配置才会丢失数据。

没有缓存不会导致数据丢失,只会导致性能问题。只有你自己软件写的垃圾才会丢数据。
billlee
2021-08-07 22:45:10 +08:00
更正,扇区的 ECC 不是 CRC. 是可以纠错的
ryd994
2021-08-07 22:52:58 +08:00
@singerll 你对硬件 raid 能解决的问题有根本性误解。硬件 raid 是能提供一个非易失的写入缓存。软件 raid 是靠 ssd 来提供。这两者的数据一致性是一样的。区别在于性能。
机械硬盘,你发出 flush 指令,硬盘告诉你 flush 完成了就是完成了,断电也不会没有。
所有软件在编写的时候就必须考虑数据的写入缓存和同步的时机。就算基于硬件的 raid,操作系统也在多个级别上有各种各样的缓存,包括 libc,vfs,page cache,io queue 。不 flush 到 raid 卡的缓存区你的 bbu 有个毛用。数据一致性是靠正确的缓存管理,问题在缓存管理,你往 raid 技术上用力有个毛用?

我不是在说数据一致性问题不存在而是在说硬件 raid 无法解决你说的问题。而当你正确地解决了数据一致性问题时,软件 raid 也一样没有问题。
singerll
2021-08-07 22:54:55 +08:00
@ryd994 这个问题我从来都没表达过我的看法,请问你是怎么得出我有误解的结论的?
ryd994
2021-08-07 22:59:30 +08:00
@singerll bbu 就是用来开 writeback cache 的。你不用 writeback cache 的话 bbu 对数据一致性没有任何作用,无论是否有 bbu,用的是软件 raid 还是硬件 raid 。
singerll
2021-08-07 23:04:14 +08:00
@ryd994 别杠了大兄弟。我都快笑死了,我说东你就说西。我说的是硬件 raid 比软件 raid 多个缓存的问题,你一直跟我扯哪种情况没有用,说白了不还是有的情况是有用的?
ryd994
2021-08-07 23:07:01 +08:00
@singerll “硬件 raid 是有缓存的,有的还有电容保护,在你掉电时能保证数据写入。”
这是你原话。那我问你,如果不是开了 writeback cache,你为什么需要保证数据写入?软件从来就不应该认为写了文件就是保证落盘。
何况你还说错了。即使有电容保护也不能保证数据写入。

然后你又说“软件 raid 的问题是,万一 win 系统挂了怎么办?”
这也是错的。Windows 挂了对数据没有任何影响。系统盘挂了的效果就和 raid 卡挂了效果一样:换一个继续用。
ryd994
2021-08-07 23:10:47 +08:00
@singerll 硬件 raid 比软件 raid 多个缓存?
就 tm 是因为多了个缓存才需要多考虑一个一致性问题好吧。
没这缓存就没这破事了。没缓存还要个毛的 bbu 。直接写硬盘啊,写一字节 flush 一次,连硬盘本身的缓存也 bypass 掉。和 raid 卡有个毛关系。性能是一沓糊涂但是错是绝对没错的。我就问你,硬件 raid 为什么需要加缓存?
你不会以为缓存就是好吧?不会吧不会吧?
singerll
2021-08-07 23:14:21 +08:00
@ryd994 b 了再见。
ryd994
2021-08-07 23:14:43 +08:00
@singerll 我再说一遍,硬件缓存对数据一致性没有任何正面作用。
你连缓存是做什么用的都没整明白就在和我吵硬件 raid 能不能保证数据写入?
硬件 raid 对数据一致性有用?那你软件没 bug 哪来的一致性问题?正常的数据库没 cache 就该掉数据?

到底是谁在用 corner case 说事?
ryd994
2021-08-07 23:18:56 +08:00
@singerll 小学生呗。发现自己错了就开始死犟,吵不过就 b 。然后继续在自己的 echo chamber 里以为自己就是对的。

硬件 raid 能保证写入?笑了。写软件不考虑缓存问题就在这指望硬件救你呢?
msg7086
2021-08-08 04:42:55 +08:00
@billlee #23 不懂就不要瞎说了。
这帖子管 ECC 啥事,从头到尾我就没提这个东西,你扯什么呢。
谁告诉你硬盘返回错误数据是因为 ure ?
真以为硬盘上的主控和电路板和缓存都能百分百保证数据传输不出错吗?
bit flip 又不是只会发生在磁片上的。
msg7086
2021-08-08 05:04:37 +08:00
@singerll 仔细读了一遍你们的对话, @ryd994 说得没错啊。
硬件 Raid 的缓存本来就是开了 writeback 才能用,如果没有 bbu 的话就不能开写入缓存,开了就会在掉电时丢数据,这和软 raid 不是一样么。zfs 也能用 SSD 写入记录啊,这不就和硬件 raid 一样了么。这不是不冲突的问题,而是他们本来就是解决同样问题的(写入屏障)。只要把数据写入这个区域(阵列卡缓存或者 slog )数据就不会掉电丢,和软硬没关系。企业级的方案,必然是可以拿出类似的技术的,不存在说硬的能做软的做不了这么一说。

至于 @ryd994 提到的 raid 信息问题,别的卡我不清楚,但是 lsi 都是写在盘尾的,而且这个信息 Linux 是认的。你把 raid 卡上的硬盘都拔下来,随便找个电脑直接插上,Linux MD 是可以读到阵列信息然后拼起 MD 设备的。所以就算卡坏了或者一块盘坏了也是不影响的。

还是那句话,企业级的方案,不管软硬一般都能实现类似的功能。就算现在没有实现的,将来也会逐渐实现出来。毕竟企业里总有一半的人要用硬的,一半要用软的,不管是硬件提供商还是软件开发者都会去吸收对方的重要功能满足企业要求。
msg7086
2021-08-08 05:10:05 +08:00
@Osk uefi 和 BIOS 这个我吃不准,但是现在都是 uefi 的,只要不买特别古老的卡都是没问题的。我买的 lsi 阵列卡和 solarflare 网卡,都可以进它们的控制界面的。
有些卡是认机器的,Dell 或者 hp only,不过记得可以金手指贴胶带搞定。不过我买来的 Dell 阵列卡插上就能用,应该问题不大。
回想起来,我给 Dell 阵列卡刷机就是因为 uefi 刷不上所以临时翻了一台 BIOS 的机器来刷的,这么一想这块卡应该是两边都能用才对。
singerll
2021-08-08 05:40:03 +08:00
@msg7086 我说的是硬 raid 比软 raid 多这个功能,你也在跟我说如果什么情况下软硬 raid 一样。

就好像我说汽车比自行车跑得快,你非给我科普没油推着走时,还是自行车快。不在一个频道好吧。

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

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

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

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

© 2021 V2EX