大于 2T 的 raid 怎么处理?
问题背景,公司一台新的服务器上线。配了整列卡,5 块 4T 盘。我用 4 块做了一个 RAID5,1 块热备。
使用 parted 将整个 RAID5 格式化,考虑到后面 RAID 的扩容需求,是不是应该再做个 LVM?没实际尝试过,如果后期 RAID 扩容了,parted 能否将硬盘直接扩容呢?还是说必需做个 LVM?有经验的大佬指教下,我这边虚拟机自己也做个测试
问题背景,公司一台新的服务器上线。配了整列卡,5 块 4T 盘。我用 4 块做了一个 RAID5,1 块热备。
使用 parted 将整个 RAID5 格式化,考虑到后面 RAID 的扩容需求,是不是应该再做个 LVM?没实际尝试过,如果后期 RAID 扩容了,parted 能否将硬盘直接扩容呢?还是说必需做个 LVM?有经验的大佬指教下,我这边虚拟机自己也做个测试
不是 gptfdisk, 就是 fdisk
第一是防止硬盘单个损坏,一般是通过在物理阵列卡上,做 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.整个扩容过程,是非常危险的。建议先备份,而且不建议在线扩容。
@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 倒也是可以的。
但是热备是没有什么必要的,与其热备,不如直接成为战斗力。
注:冷备是可以的。冷备是说平时不通电不工作,只在出问题以后才上电。
但是这个话题就更复杂了,而且背后也有很多坑,这里就不多细说了。