大于 2T 的 raid 怎么处理?

2020-12-05 15:24:46 +08:00
 marktask

问题背景,公司一台新的服务器上线。配了整列卡,5 块 4T 盘。我用 4 块做了一个 RAID5,1 块热备。

使用 parted 将整个 RAID5 格式化,考虑到后面 RAID 的扩容需求,是不是应该再做个 LVM?没实际尝试过,如果后期 RAID 扩容了,parted 能否将硬盘直接扩容呢?还是说必需做个 LVM?有经验的大佬指教下,我这边虚拟机自己也做个测试

3595 次点击
所在节点    Linux
18 条回复
liukangxu
2020-12-05 16:28:58 +08:00
看成大于 2PB 了……大于 2T 的 RAID 有什么特殊的地方吗?
marktask
2020-12-05 16:35:16 +08:00
没有 就是不能用 fdisk,硬盘格式得改成 gpt,不然无法被系统识别。
摆渡搜了下可以直接对硬盘扩容,虚拟机不知道咋的,老是出问题。
@liukangxu #1
liukangxu
2020-12-05 16:38:28 +08:00
@marktask gpt 普及至少是 10 年前的问题了
Osk
2020-12-05 16:44:53 +08:00
@marktask fdisk 好像能创建 GPT 了吧,印象中。。。。

不是 gptfdisk, 就是 fdisk
Jirajine
2020-12-05 16:46:02 +08:00
首先,无论容量大小,只要需要分区表,那么就始终应该使用 gpt 。
然后,你是硬件 raid 卡还是软 raid ?
前者你应该将整个阵列视为一块硬盘,可以套 lvm 扩容。
后者则是多块硬盘通过 lvm/zfs/btrfs 等方式组 raid,扩容方式取决于对应的支持。
marktask
2020-12-05 17:01:07 +08:00
嗯嗯,没关注这个问题呢。谢谢老哥解答,已经解决了
@liukangxu #3
marktask
2020-12-05 17:03:00 +08:00
@Jirajine #5 硬件扩容。
在虚拟机中测试,RAID 扩容以后,可以使用 parted 对硬盘进行扩容,不影响数据,也不需要再做个 LVM,总体管理还是很方便的。
参见 https://www.taterli.com/5468/
laminux29
2020-12-05 21:12:21 +08:00
企业级存储,一般情况下,至少要做 3 类策略。

第一是防止硬盘单个损坏,一般是通过在物理阵列卡上,做 raid 1 、raid 5 这类。最常见的是你这种 raid 5 + 一块热备盘。做好后,底层的物理磁盘,通过阵列卡后,向 OS 输出的是虚拟磁盘。

第二是防止逻辑数据损坏,比如数据库。最常见的方案是准备一台备份一体机,然后通过在数据库服务器上做 proxy,来进行自动备份。

第三是你提到的扩容问题。
windows 操作非常简单,左手拿着星巴克咖啡,右手在硬盘管理界面,把整个硬盘,直接附加到已有跨区卷里就行了,点点鼠标就能完成。

linux 比 windows 更灵活,不仅支持 windows 这种整个硬盘式的扩容,还支持把硬盘中的一部分拿来扩容。但因为更灵活,也会稍微麻烦些,有 4 个步骤:pv -> vg -> lv -> fs
其中:
pv 是指一整块硬盘,或者某块硬盘上的分区。
vg 是指把很多 pv 整合为一个大的存储池。
lv 是指从 vg 这块大存储池上重新进行划分。
fs 是指把一块 lv 进行格式化,比如格式化为 ext4 或 ntfs,格式化完成后就可以直接用了。

创建步骤如下:
->用 parted + /dev/sdX 选择物理阵列卡提供的虚拟硬盘。
->在 parted 工具里,用 mklabel 命令做成 gpt 格式。
->在 parted 工具里,用 mkpart 命令进行分区。有些人不分区,直接把整块虚拟硬盘当做一个分区,优点是省事,但是在灾难情况下要进行数据恢复时,会成为大问题,原因是很多数据恢复工具不支持这种方式。
->在 parted 工具里,用 set 把分区设置为 lvm 分区,并退出 parted 。
->pvcreate /dev/sdXY 创建 LVM-pv,pvs 校验创建结果。
->vgcreate vg 名称 /dev/sdXY 来把 LVM-pv 整合为 LVM-vg,vgs 校验整合结果。
->如果以后硬盘不够用了,加入新的虚拟硬盘,在这个阶段,可以通过 vgextend 已有 vg 名称 /dev/sd 新虚拟硬盘 XY 来把新虚拟硬盘做成的 pv 对已有 vg 进行扩容,vgs 校验整合结果。
->lvcreate -n lvmName -L 8G vgName,用于从 vgName 存储池中,划分出 8G 空间,来创建一个名叫 lvmName 的 lvm 分区。如果要把全部 vgName 空间都用于 lvmName:lvcreate -n lvmName -l 100%FREE vgName 。然后用 lvs 校验创建结果。
->lvm 创建好后,就可以对新建的 lvm 进行分区了。比如:mkfs -V -t ext4 -c lvmName
->扩容:vg 扩容后,把 vg 扩容后的所有容量,送给一块 lvm:lvextend -l +100%FREE vgName/lvmName
ps:由于 linux 的 lvm 非常灵活,甚至可以不需要 vg,直接在新硬盘上创建 lvm,或者直接把新硬盘直接划给 lvm 都行。
->扩容后,resize2fs /dev/VG 名字 /LV 名字。如果是在线操作,此操作需要很长时间,建议在 Rescue 模式下进行。
->ps.整个扩容过程,是非常危险的。建议先备份,而且不建议在线扩容。
autogen
2020-12-05 21:57:56 +08:00
大于 300G 不要做 RAID5 了,容易重建失败,应该直接 RAID10
msg7086
2020-12-06 07:21:57 +08:00
@autogen 你说 300T 也就算了,300G ?
容易重建失败的建议不要买三手盘呢, 全新盘没有那么高的失败率。
msg7086
2020-12-06 07:24:37 +08:00
有一说一,既然有 5 块盘,为什么把 1 块盘拿来做热备而不是直接做成 5 盘 RAID 6 ?白白浪费一块盘,而且还有潜在的 write hole 问题,RAID 6 多香啊?
autogen
2020-12-06 19:13:18 +08:00
@msg7086 我淘宝浦东服务器家买的二手硬盘。。。
mingl0280
2020-12-07 05:19:14 +08:00
4 块 HDD RAID5,你公司 5 年内丢数据的概率接近 100%...
我都只敢用 4 块 ssd 组 R5,再高必然上 R6.记得配置好高强度备份策略吧!
marktask
2020-12-07 08:47:09 +08:00
@laminux29 #8 老哥,我是 parted 将硬盘格式化以后直接拿来用了,没再做卷组,应该不用再做卷组了吧?做卷组是为了将新硬盘合并到已有的卷组当中,但是有整列卡情况下,当新的硬盘加入 RAID 中,直接用 parted 将虚拟的硬盘扩容就可以了,应该不需要再做一个卷组了吧?除非新加入的硬盘容量不一致。
marktask
2020-12-07 09:00:52 +08:00
@msg7086 #11 write hole 问题我看了下,如果整列卡带缓存功能的话,可以避免 write hole 的产生。另外 RAID6 多了一块校验盘,理论上,会比 RAID 多一步计算步骤,导致性能可能比 RAID5 更低。虽然说 6 可以同时坏 2 块盘,但是在 RAID 出现故障时候,如果说 RAID5 重建需要 24 小时,RAID6 就可能需要 36 小时,重建期间,因为硬盘全盘同步读写,损坏概率相对平常高,所以尽可能减少重建时间。这也是虽然 6 比 5 安全,但是 6 应用得少的原因。主流是 5/10 。
marktask
2020-12-07 09:02:42 +08:00
@mingl0280 #13 嗯嗯,谢谢提醒,按照我目前的想法,3 年后得更换新的服务器了,所以没打算用 5 年的。
msg7086
2020-12-07 11:37:04 +08:00
@mingl0280 我司以前有很多客户的机子就是 1U4 盘做 RAID 5,5 年下来丢数据只有一家,而且是放任坏盘在阵列里没管,一直用到第二盘挂了才丢的。

@marktask 6……应用得少?
你这段话里有几个问题。
第一,RAID 6 多一块校验盘,的确多一个计算步骤,但是这个步骤是阵列卡做的,高性能的阵列卡就可以解决这个问题。在一篇 2006 年的 RAID 跑分评测中,LSI 9265-8i 在数据库读写测试中,RAID 5 跑出了 1273 iops,而 RAID 6 跑出了 1051 iops 。可以看到,就算拿 15 年前的阵列卡来跑,也就只有 20%的差距。这 20%的差距最后就弥补在了阵列的高可用性上。
第二,RAID 5 重建需要 24 小时,为什么 RAID 6 需要 36 小时呢。我们知道硬盘的读取速度是固定的,那么不论是 RAID 5 还是 RAID 6,最后读取完整个阵列的时长应该是一样的。那么唯一的区别就是阵列卡的计算速度。如果我们按照上面说的数据,拿一块 15 年前的阵列卡来跑,那么会多用 20%的时间,撑死也就是 29 小时。
第三,重建损坏概率的前提是你还有机会去重建。同样是坏 2 块盘,RAID 6 你还有闲心去算重建要多久,如果是 RAID 5 你可能已经把硬盘放进纸箱里,握着银行卡出去找数据恢复公司了。

第四,也是最重要的一点,RAID 不仅仅保护硬盘损坏,也保护数据错误。RAID 5 是奇偶校验(也就是你说的速度比较快的计算),是无法确定损坏的数据来自哪里的。如果你有 5 块盘,上面有 4 份数据,A B C D,还有 1 份校验 P 。如果 ABCDP 异或校验正确,那就认为数据是正确的。如果校验失败,就说明数据出错了。

那么我们来仔细看看。
如果 A 和 B 的某个字节数据同时翻转了,那么 RAID 5 校验结果是什么呢?没错,RAID 5 会认为数据完全正确。
如果这 5 块盘里只有一块盘数据翻转了,导致校验出错,那么 RAID 5 会怎么办呢?没错,会假定数据翻转的盘一定是 P 而不是 ABCD,并且用新的校验值覆盖 P 里的数据。如果你坏的数据恰好不是 P,那你正确的数据就会被错误的数据永久覆盖了。

而 RAID 6 呢,额外用了里德所罗门校验码,所以不管哪块硬盘数据损坏,都可以正确定位到是谁坏了,然后用剩下的好数据来修复。这里又要说到上面第三点的问题,因为 RAID 6 知道哪块硬盘是好的,所以就算阵列出现更多损坏数据,只要有足够的冗余就可以恢复,而 RAID 5 则是百分百炸数据的,因为 RAID 5 没有足够的冗余了。

所以,如果你有足够的资源去选择做 RAID 5+热备或者 RAID 6,那么 RAID 6 几乎总是更优秀的。
如果你只有 4 盘位,只能塞 4 块盘,那迫不得已做 RAID 5 倒也是可以的。
但是热备是没有什么必要的,与其热备,不如直接成为战斗力。

注:冷备是可以的。冷备是说平时不通电不工作,只在出问题以后才上电。
但是这个话题就更复杂了,而且背后也有很多坑,这里就不多细说了。
marktask
2020-12-07 16:42:42 +08:00
@msg7086 #17 非常感谢老哥百忙之中指点,认真学习了。先前就听说过 R6 性能低下令人发指,人云亦云,缺乏数据支撑。幸好现在在业务初期,已经调整了

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

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

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

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

© 2021 V2EX