raid怎么做gpt_RAID, RAID, RAID

本文详细介绍了RAID(冗余磁盘阵列)的基本概念、不同级别的RAID(如RAID 0、1、4、5、6、10、50、60等),以及非标准RAID级别。RAID的核心在于通过多个硬盘提升性能和数据完整性,使用校验和来提供冗余。RAID 5和6的区别在于校验和的分布,RAID 6增加了第二个校验和以应对两块硬盘故障的情况。文章还讨论了数据完整性、硬盘故障模式、写洞问题、重建过程以及现代RAID技术在SSD上的应用和挑战。
摘要由CSDN通过智能技术生成

什么是 RAID

RAID (Redundant Array of Inexpensive Disks)由加州伯克利大学的几位教授在上世纪八十年代提出, 刚开始的设想是使用廉价的硬盘, 但是随着越来越多硬盘产商进入这个领域, 它们希望赚取更多的利润, 恰好需要使用 RAID 技术的都是一些有钱的主, 企业级硬盘 (Enterprise Drive) 在数据中心大行其道, Inexpensive 变得没有那么重要, 慢慢地 RAID 就变成了 Redundant Array of Independent Disks). 虽然换成了 Independent, 但是后面我们会知道想要做到也并不容易. 其实RAID的核心在于前两个字, 使用多个硬盘 (Array) 来提升容量 (Capacity)和性能 (Performance), 使用额外的 (Redundant) 的硬盘来保证完整性 (Integrity).

RAID 的基本概念

RAID 以 Stripe 为单位对数据提供保护, Stripe 又划分成 Stripe Unit 分布到所有的成员硬盘中, 往往一个 Stripe 会包含多份数据以及校验和. 在基本的 RAID 实现里, 通过一个简单的映射把 RAID 虚拟出来的逻辑磁盘地址对应到相应的物理硬盘和 LBA 上, 以下图为例, D1, D2 到 Dn 形成一个连续的地址空间. 在复杂的 RAID 实现里, 特别是一些实现压缩, 去重的商用系统, RAID 内部会维护一个虚拟磁盘地址到物理磁盘的映射, 这种简单的映射关系不复存在.

最根本地, Stripe 是 RAID 的基本组成部分, Stripe 之间并不强制也不排斥有额外的关系.

c1a7be21977ae07a4d7ac2c434b9222f.png

RAID Levels

不同的使用者往往会有不同的需求, 有的看重性能, 有的更看重数据保护能力, 所以就出现了不同的 RAID 级别. SNIA (Storage Networking Industry Association) 对 RAID 进行了标准化工作, 当然有的厂商会有一些自己的实现.

Standard Levels

SNIA 标准化了 0-6 共 7 个级别的 RAID

  • RAID 0: 没有冗余,从某种意义上说根本就不是 RAID, 一般和其他 RAID 级别一起使用在Nested RAID上.
  • RAID 1: 数据镜像, 也就是说每块盘上的数据一模一样.
  • RAID 2: bit-level striping. 如果真是用在硬盘上, 可想而知性能会有多差, 基本没人使用.
  • RAID 3: byte-level striping. 同样极差的性能, 因为每次读写都需要所有盘的参与, 即使是非常小块的数据.
  • RAID 4: block-level striping with dedicated parity. 除了 NetApp 很少有其他的公司使用.
  • RAID 5: block-level striping with distributed parity. 只能处理一块坏盘, 逐渐被 RAID 6 取代.
  • RAID 6: block-level striping with double distributed parity. 目前使用最广泛的 RAID.

RAID 4 vs. RAID 5

RAID 4 和 RAID 5 的唯一差别就是校验和 (Parity) 的放置位置. RAID 4 使用一块单独的盘来放校验和, 而 RAID 5 却把校验和分散到不同的盘上.

7314786770c321cb22e620684ff7517f.png
  • RAID 4 专门的校验盘往往会成为瓶颈,因为对于每次写操作都需要更新校验盘. 这种优势只有在小写(Partial stripe write, small write)的情况才能体现出来, 如果都是大写 (Full stripe write)的话, 所有的盘都需要更新, 所以并没有区别. 这也是 NetApp 使用 RAID 4 的原因, WAFL (Write Anywhere File Layout)文件系统能够保证写操作都是大写.
  • RAID 4 的校验盘因为只有 Parity 而没有 Data, 在读的时候始终不能得到利用, 所以相对 RAID 5 的性能会稍微有些下降.
  • 但是 RAID 4 也有它的优势. RAID 4 可以在创建完以后再增加盘, 只要保证新盘上的数据被清零, 因为 0 并不影响校验和. 当然了虽然不影响正确性, 但是想高效地使用增加的容量, 还是 需要做 reallocate (NetApp)的工作. RAID 5 却做不到这一点.

c1a7be21977ae07a4d7ac2c434b9222f.png
  • 还有就是, 如果所有的盘并不是同构的话, 比方说数据盘都是 HDD, 而校验盘是 SSD, 情况会发生什么改变, RAID 4 会是好选择吗?

Parity

除了镜像, 其他的冗余都是通过校验和来实现的, 当然镜像也可以看作是一种校验和. 校验和的算法各种各样, 先来看一种比较基本的, 假设我们有 4 份数据 D1, D2, D3, D4, 需要定义一种校验和 P, 在任意的数据 Di 不能读取的情况下, 使用 P 去恢复 Di. P 可以这样定义:

P = D1 + D2 + D3 + D4

正确性很容易证明, 因为 D1, D2, D3, D4, P 值都可以通过其他的 4 个数据计算而得. 如果需要像 RAID 6 那样使用 2 种校验和, 那么另一个校验和 Q 可以怎么定义呢:

Q = D1 + 2 ∗ D2 + 3 ∗ D3 + 4 ∗ D4

同样地, D1, D2, D3, D4, P, Q 都可以通过任意 4 个数据计算而得, 所以能够容忍任意 2 块坏盘的情况. 那么 Q 定义成这样行不行:

Q = D1 + 1 ∗ D2 + 3 ∗ D3 + 4 ∗ D4

在 P, Q 的定义中都使用了(D1 + D2), 如果 D1, D2 都丢失的话, 就不能够重新计算出来了. 所以简单地说, 一个正确的 Q 需要保证 g1, g2, ..., gn 各不相等:

P = D1 + D2 + ⋯ + Dn
Q = g1 ∗ D1 + g2 ∗ D2 + ⋯ + gn ∗ Dn

Partial Stripe Write

在 Full Stripe Write 的情况下, 所有的数据都已存在, 可以用来直接计算 P, Q. 如果是 Partial Stripe Write 的情况下应该怎么办呢? 一种可行的办法是把 Stripe 的其它数据先读出来, 比如说在只有 D1 改变的情况下怎么更新 P:

P′ = D1′ + D2 + D3 + D4

这样需要额外地访问 3 次磁盘操作分别读出 D2, D3, D4. 这种方式叫做 Additive, 还有一种 Subtractive 的方式同样能计算新的 P 值:

P′ = D1′ + D2 + D3 + D4
P = D1 +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值