大于 2T 的 raid 怎么处理? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
marktask
V2EX    Linux

大于 2T 的 raid 怎么处理?

  •  
  •   marktask 2020-12-05 15:24:46 +08:00 4027 次点击
    这是一个创建于 1771 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言    2020-12-05 17:03:24 +08:00
    可以通过 parted 对硬盘扩容,参见 https://www.taterli.com/5468/
    18 条回复    2020-12-07 16:42:42 +08:00
    liukangxu
        1
    liukangxu  
       2020-12-05 16:28:58 +08:00
    看成大于 2PB 了……大于 2T 的 RAID 有什么特殊的地方吗?
    marktask
        2
    marktask  
    OP
       2020-12-05 16:35:16 +08:00
    没有 就是不能用 fdisk,硬盘格式得改成 gpt,不然无法被系统识别。
    摆渡搜了下可以直接对硬盘扩容,虚拟机不知道咋的,老是出问题。
    @liukangxu #1
    liukangxu
        3
    liukangxu  
       2020-12-05 16:38:28 +08:00
    @marktask gpt 普及至少是 10 年前的问题了
    Osk
        4
    Osk  
       2020-12-05 16:44:53 +08:00 via Android
    @marktask fdisk 好像能创建 GPT 了吧,印象中。。。。

    不是 gptfdisk, 就是 fdisk
    Jirajine
        5
    Jirajine  
       2020-12-05 16:46:02 +08:00 via Android
    首先,无论容量大小,只要需要分区表,那么就始终应该使用 gpt 。
    然后,你是硬件 raid 卡还是软 raid ?
    前者你应该将整个阵列视为一块硬盘,可以套 lvm 扩容。
    后者则是多块硬盘通过 lvm/zfs/btrfs 等方式组 raid,扩容方式取决于对应的支持。
    marktask
        6
    marktask  
    OP
       2020-12-05 17:01:07 +08:00
    嗯嗯,没关注这个问题呢。谢谢老哥解答,已经解决了
    @liukangxu #3
    marktask
        7
    marktask  
    OP
       2020-12-05 17:03:00 +08:00
    @Jirajine #5 硬件扩容。
    在虚拟机中测试,RAID 扩容以后,可以使用 parted 对硬盘进行扩容,不影响数据,也不需要再做个 LVM,总体管理还是很方便的。
    参见 https://www.taterli.com/5468/
    laminux29
        8
    laminux29  
       2020-12-05 21:12:21 +08:00   2
    企业级存储,一般情况下,至少要做 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
        9
    autogen  
       2020-12-05 21:57:56 +08:00
    大于 300G 不要做 RAID5 了,容易重建失败,应该直接 RAID10
    msg7086
        10
    msg7086  
       2020-12-06 07:21:57 +08:00
    @autogen 你说 300T 也就算了,300G ?
    容易重建失败的建议不要买三手盘呢, 全新盘没有那么高的失败率。
    msg7086
        11
    msg7086  
       2020-12-06 07:24:37 +08:00
    有一说一,既然有 5 块盘,为什么把 1 块盘拿来做热备而不是直接做成 5 盘 RAID 6 ?白白浪费一块盘,而且还有潜在的 write hole 问题,RAID 6 多香啊?
    autogen
        12
    autogen  
       2020-12-06 19:13:18 +08:00
    @msg7086 我淘宝浦东服务器家买的二手硬盘。。。
    mingl0280
        13
    mingl0280  
       2020-12-07 05:19:14 +08:00
    4 块 HDD RAID5,你公司 5 年内丢数据的概率接近 100%...
    我都只敢用 4 块 ssd 组 R5,再高必然上 R6.记得配置好高强度备份策略吧!
    marktask
        14
    marktask  
    OP
       2020-12-07 08:47:09 +08:00
    @laminux29 #8 老哥,我是 parted 将硬盘格式化以后直接拿来用了,没再做卷组,应该不用再做卷组了吧?做卷组是为了将新硬盘合并到已有的卷组当中,但是有整列卡情况下,当新的硬盘加入 RAID 中,直接用 parted 将虚拟的硬盘扩容就可以了,应该不需要再做一个卷组了吧?除非新加入的硬盘容量不一致。
    marktask
        15
    marktask  
    OP
       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
        16
    marktask  
    OP
       2020-12-07 09:02:42 +08:00
    @mingl0280 #13 嗯嗯,谢谢提醒,按照我目前的想法,3 年后得更换新的服务器了,所以没打算用 5 年的。
    msg7086
        17
    msg7086  
       2020-12-07 11:37:04 +08:00   1
    @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
        18
    marktask  
    OP
       2020-12-07 16:42:42 +08:00
    @msg7086 #17 非常感谢老哥百忙之中指点,认真学习了。先前就听说过 R6 性能低下令人发指,人云亦云,缺乏数据支撑。幸好现在在业务初期,已经调整了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5587 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 07:50 PVG 15:50 LAX 00:50 JFK 03:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86