RAID

内容

·         一、简介

o    1.1 物理磁盘与逻辑磁盘的区别

o    1.2 读写数据

o    1.3 什么是RAID?

o    1.4 为什么使用RAID?

o    1.5 历史

·         2 RAID系统使用的基本概念

o    2.1 缓存

o    2.2 镜像。数据的一个以上的副本

o    2.3 剥离。部分数据在另一个磁盘上

o    2.4 纠错和故障

o    2.5 热备品:使用的磁盘数量超过需要的数量

o    2.6 磁条大小和块大小:将数据分散到几个磁盘上。

o    2.7 把磁盘放在一起。JBOD,连接或跨接

o    2.8 驱动器克隆

o    2.9 不同的设置

·         3 基础知识:简单的RAID级别

o    3.1 常用的RAID级别

§  3.1.1 RAID 0"条带化"

§  3.1.2 RAID 1"镜像"

§  3.1.3 RAID 5"分布式奇偶校验的条带化"

§  3.1.4 图片

o    3.2 RAID级别使用较少

§  3.2.1 RAID 2

§  3.2.2 RAID 3"带专用奇偶校验的条带化"

§  3.2.3 RAID 4"带专用奇偶校验的条带化"

§  3.2.4 RAID 6

§  3.2.5 图片

o    3.3 非标准RAID级别

§  3.3.1 双奇偶校验/对角线奇偶校验。

§  3.3.2 RAID-DP

§  3.3.3 RAID 1.5

§  3.3.4 RAID 5E、RAID 5EE和RAID 6E。

§  3.3.5 RAID 7

§  3.3.6 Intel Matrix RAID

§  3.3.7 Linux MD RAID驱动

§  3.3.8 RAID Z

§  3.3.9 图片

·         4 加入RAID级别

·         5 制作RAID

o    5.1 软件RAID

o    5.2 硬件RAID

o    5.3 硬件辅助RAID

·         6 与硬件故障有关的不同术语

o    6.1 不合格率

o    6.2 数据丢失的平均时间

o    6.3 平均恢复时间

o    6.4 不可恢复的位错率

·         7 RAID的问题

o    7.1 以后再添加磁盘。

o    7.2关联故障

o    7.3 原子性

o    7.4 无法恢复的数据

o    7.5 写入缓存的可靠性

o    7.6 设备兼容性

·         8 RAID能做什么,不能做什么

o    8.1 RAID可以做什么

o    8.2 RAID不能做什么

·         9

·         10个参考文献

·         11个其他网站

RAIDRedundant Array of Inexpensive DisksRedundant Array of Independent Disks缩写。RAID是计算机中使用的一个术语。通过RAID,几个硬盘被制作成一个逻辑磁盘。有不同的方法可以做到这一点。将硬盘放在一起的每一种方法都比将硬盘作为单个磁盘使用,相互独立的方法有一些好处和缺点。使用RAID的主要原因是。

  • 为了减少数据丢失的情况发生。这是由数据的几个副本来实现的。
  • 要通过拥有许多小磁盘来获得更多的存储空间。
  • 为了获得更多的灵活性(在系统运行时,可以更改或添加磁盘)
  • 为了更快地获取数据。

要同时实现所有这些目标是不可能的,所以需要做出选择。

也有一些不好的事情。

  • 某些选择可以防止数据因一个(或多个)磁盘故障而丢失,但它们不能防止数据被删除或覆盖。但它们不能防止数据被删除或覆盖。
  • 在某些配置中,RAID可以容忍一个或多个磁盘发生故障。在故障的磁盘被替换后,需要重建数据。根据配置和磁盘的大小,这种重建可能需要很长的时间。
  • 某些类型的错误将导致无法读取数据。

关于RAID的大部分工作都是基于1988年写的一篇论文。

自该技术诞生以来,企业就一直使用RAID系统来存储数据。RAID系统有不同的制作方式。自从它被发现以来,建立一个RAID系统的成本已经下降了很多。因此,即使是家里使用的一些电脑和电器,也有一些RAID功能。例如,这种系统可以用来存储音乐电影

介紹

物理磁盘与逻辑磁盘的区别

硬盘是计算机的一部分。普通的硬盘是利用磁力来存储信息的。当使用硬盘时,它们可以供操作系统使用。在微软的Windows中,每个硬盘都会得到一个驱动器字母(以C:开头,A:或B:是为软驱保留的)。Unix和类似Linux的操作系统有一个单根目录树。这意味着使用计算机的人有时不知道信息存储在哪里(公平地说,很多Windows用户也不知道他们的数据存储在哪里)。

在计算机中,硬盘(是硬件,可以触摸)有时被称为物理驱动器物理磁盘。操作系统向用户展示的有时称为逻辑磁盘。一个物理驱动器可以被分割成不同的部分,称为磁盘分区。通常,每个磁盘分区包含一个文件系统。操作系统会像逻辑磁盘一样显示每个分区。

因此,对于用户来说,有许多物理磁盘的设置和有许多逻辑磁盘的设置看起来都是一样的。用户无法决定"逻辑磁盘"是否与物理磁盘相同,或者它只是磁盘的一部分。存储区域网络(SAN)完全改变了这种观点。一个SAN所能看到的只是一些逻辑磁盘。

读写数据

在计算机中,数据是以位和字节的形式组织的。在大多数系统中,8位组成一个字节。计算机内存使用电来存储数据,硬盘使用磁力。因此,当数据写入磁盘时,电信号会转化为磁信号。当从磁盘上读取数据时,转换的方向是相反的。电信号是由磁场的极性产生的。

什么是RAID?

RAID 阵列将两块或多块硬盘连接起来,使其成为一个逻辑磁盘。这样做有不同的原因。最常见的原因是:

  • 当一个或多个磁盘故障时,停止数据丢失。
  • 获得更快的数据传输。
  • 获得在系统持续运行时更换磁盘的功能。
  • 将几个磁盘连接起来,以获得更多的存储容量;有时会使用很多便宜的磁盘,而不是一个更昂贵的磁盘。

RAID是通过在计算机上使用特殊的硬件或软件来实现的。加入的硬盘在用户看来就像一块硬盘。大多数RAID级别都会增加冗余度。这意味着它们会更频繁地存储数据,或者存储如何重建数据的信息。这使得一些磁盘发生故障时,数据不会丢失。当故障磁盘被替换时,它应该包含的数据将从系统的其他磁盘中复制或重建。这可能需要很长的时间。所需的时间取决于不同的因素,比如阵列的大小。

为什么要使用RAID?

许多公司使用RAID的原因之一是可以简单地使用阵列中的数据。使用数据的人根本不需要知道他们正在使用RAID。当发生故障,阵列正在恢复的时候,访问数据的速度会比较慢。在这段时间内访问数据也会减慢恢复过程,但这仍然比完全不能使用数据快得多。然而,根据RAID级别的不同,在准备使用新磁盘时,磁盘可能不会出现故障。届时磁盘出现故障将导致阵列中的所有数据丢失。

连接磁盘的不同方式称为RAID级别。级别的数字越大不一定越好。不同的RAID级别有不同的用途。有些RAID级别需要特殊的磁盘和特殊的控制器。

历程

1978年,一个叫Norman Ken Ouchi的人在IBM工作,他提出了一个建议,描述了后来成为RAID 5的计划。该计划还描述了类似于RAID 1的东西,以及对RAID 4的一部分保护。

1987年,伯克利大学的工人帮助规划了研究。他们试图让RAID技术能够识别两个硬盘而不是一个硬盘。他们发现,当RAID技术拥有两个硬盘时,它的存储效果比只有一个硬盘好得多。然而,它的崩溃频率更高。

1988年,David Patterson、Garth Gibson和Randy Katz在他们名为"A Case for Redundant Arrays of Inexpensive Disks (RAID)"的文章中写到了不同类型的RAID(1到5)。这篇文章是第一篇将新技术称为RAID的文章,这个名字也就成了正式的名称。

4块硬盘组成的RAID阵列特写,内置于桌面系统中。蓝色的锁扣可以在系统持续运行时交换磁盘。Zoom
4块硬盘组成的RAID阵列特写,内置于桌面系统中。蓝色的锁扣可以在系统持续运行时交换磁盘。

一个硬盘已经从阵列中被移除。Zoom
一个硬盘已经从阵列中被移除。

RAID系统使用的基本概念

RAID使用了几个基本思想,在1994年出版的Peter Chen等人的《RAID:高性能、可靠的二次存储》一文中,对这些思想进行了介绍。

缓存

缓存是一种技术,在RAID系统中也有其用途。在RAID系统中使用的缓存有不同的种类。

在现代系统中,当数据被写入缓存时,写请求被显示为完成。这并不意味着数据已经被写入磁盘。从缓存中发出的请求不一定按照写入缓存的顺序来处理。这就有可能在系统发生故障时,有时一些数据还没有写入相关磁盘。出于这个原因,许多系统都有一个由电池支持的高速缓存

镜像。一个以上的数据副本

说到镜像,这是一个很简单的概念。数据不是只在一个地方,而是有几个数据的副本。这些副本通常在不同的硬盘(或磁盘分区)上。如果有两个副本,其中一个副本可能会失败,而数据不会受到影响(因为它仍然在另一个副本上)。在读取数据时,镜像也可以给人一种提升。它总是会从响应最快的磁盘上取。不过写数据的速度比较慢,因为所有的磁盘都需要更新。

剥离。部分数据在另一个磁盘上

通过条带化,数据被分割成不同的部分。然后,这些部分最终会被放在不同的磁盘(或磁盘分区)上。这意味着写入数据的速度更快,因为它可以并行完成。这并不意味着不会出现故障,因为每个数据块只在一个磁盘上找到。

纠错和故障

可以计算不同种类的校验和。一些计算校验和的方法可以发现错误。大多数使用冗余的RAID级别都可以做到这一点。有些方法比较难做,但它们不仅可以发现错误,而且可以修复错误。

热备品:使用超过所需的磁盘。

很多方式有RAID支持的东西叫做热备盘。热备盘是指在正常工作中不使用的空盘。当一块磁盘出现故障时,可以直接将数据复制到热备盘上。这样一来,故障的磁盘就需要更换一个新的空盘来成为热备盘。

条纹大小和块大小:将数据分散到多个磁盘上。

RAID的工作原理是将数据分散在多个磁盘上。在这种情况下,经常使用的两个术语是条带大小块大小

分块大小是写入磁盘阵列的最小数据块。条带大小是指数据块的大小,它将被分布在所有的磁盘上。这样一来,如果有四个磁盘,并且磁条大小为64千字节(kB),那么每个磁盘将被写入16千字节。因此,这个例子中的块大小是16 kB。将磁条大小变大意味着更快的数据传输速率,但也意味着更大的最大延迟。在本例中,这是获取数据块所需的时间。

把磁盘放在一起。JBOD,连接或跨接。

许多控制器(还有软件)可以用以下方式把磁盘放在一起。拿走第一块磁盘,直到它结束 然后再拿第二块,以此类推。这样一来,几个较小的磁盘看起来就像一个较大的磁盘。这不是真正的RAID,因为没有冗余。另外,spanning可以把RAID 0做不到的磁盘组合起来。一般来说,这叫做只是一堆磁盘(JBOD)。

这就像是RAID的远亲,因为逻辑驱动器是由不同的物理驱动器组成的。并列有时用于将几个小驱动器变成一个较大的有用驱动器。这在RAID 0中是做不到的。例如,JBOD可以将3GB、15GB、5.5GB和12GB的硬盘合并成一个35.5GB的逻辑硬盘,这通常比单独的硬盘更有用。

在右图中,数据从0号磁盘的末端(块A63)到1号磁盘的开始(块A64);1号磁盘的末端(块A91)到2号磁盘的开始(块A92)。如果使用RAID 0,那么磁盘0和磁盘2将被截断为28个块,即阵列中最小的磁盘(磁盘1)的大小,总大小为84个块。

一些RAID控制器使用JBOD来谈论在没有RAID功能的硬盘上工作。每个驱动器在操作系统中单独显示。这个JBOD和连通不一样。

许多Linux系统使用"线性模式"或"追加模式"。Mac OS X 10.4的实现--被称为"Concatenated Disk Set"--如果一个驱动器在Concatenated Disk Set中出现故障,用户不会在剩余的驱动器上留下任何可用的数据,尽管这些磁盘在其他方面的操作如上所述。

并列是Linux中逻辑卷管理器的用途之一。它可以用来创建虚拟驱动器。

驱动器克隆

大多数现代硬盘都有一个标准,叫做自我监控、分析和报告技术(S.M.A.R.T)。S.M.A.R.T允许监控硬盘驱动器上的某些东西。某些控制器允许在单个硬盘出现故障之前就进行更换,例如,因为S.M.A.R.T或其他磁盘测试报告了太多可纠正的错误。要做到这一点,控制器会将所有数据复制到热备用驱动器上。在这之后,可以用另一个硬盘替换(它将成为新的热备用硬盘)。

不同的设置

磁盘的设置以及如何使用上述技术会影响系统的性能和可靠性。当使用较多的磁盘时,其中一个磁盘发生故障的可能性较大。正因为如此,必须建立能够发现和修复错误的机制。这使得整个系统更加可靠,因为它能够生存并修复故障。

 

3块不同大小的JBODZoom
3块不同大小的JBOD

基础知识:简单的RAID级别

常用的RAID级别

RAID 0"条带化"

RAID 0不是真正的RAID,因为它没有冗余。在RAID 0中,磁盘被简单地放在一起,形成一个大磁盘。这就是所谓的"条带化"。当一个磁盘发生故障时,整个阵列就会发生故障。因此,RAID 0很少用于重要的数据,但使用条带化从磁盘上读写数据可以更快,因为每个磁盘同时读取部分文件。

在RAID 0中,接踵而来的磁盘块通常被放置在不同的磁盘上。因此,RAID 0使用的所有磁盘都应该是相同大小的。

Linux或类似Unix的操作系统上,RAID 0通常用于Swap空间

RAID 1"镜像"

在RAID 1中,两块磁盘被放在一起。两块硬盘都持有相同的数据,一块是"镜像"另一块。不管是用硬件控制器还是用软件来实现,这都是简单、快速的配置。

RAID 5"分布式奇偶校验的条带化"

RAID 5级可能是最常用的。建立一个RAID 5存储阵列至少需要三块硬盘。每个数据块将被存储在三个不同的地方。其中两个地方将按原样存储数据块,第三个地方将存储一个校验和。这个校验和是Reed-Solomon代码的一种特殊情况,它只使用位加法。通常,它是用XOR方法计算的。由于这种方法是对称的,一个丢失的数据块可以从另一个数据块和校验和重建。对于每个数据块,不同的磁盘将持有持有校验和的奇偶块。这样做是为了增加冗余度。任何一个磁盘都可能出现故障。总的来说,将有一个磁盘持有校验和,所以总的可用容量将是除了一个磁盘之外的所有磁盘的容量。由此产生的逻辑磁盘的大小将是所有磁盘加在一起的大小,除了一个存放奇偶校验信息的磁盘。

当然这比RAID 1级要慢,因为在每次写入时,都需要读取所有的磁盘来计算和更新奇偶校验信息。在相同数量的磁盘上,RAID 5的读取性能几乎和RAID 0一样好。除了奇偶校验块之外,数据在驱动器上的分布遵循与RAID 0相同的模式。RAID 5稍慢的原因是磁盘必须跳过奇偶校验块。

有故障磁盘的RAID 5将继续工作。它处于降级模式。降级的RAID 5可能会非常慢。因此,通常会添加一个额外的磁盘。这就是所谓的热备用盘。如果一个磁盘发生故障,数据可以直接重建到额外的磁盘上。RAID 5也可以很容易地在软件中完成。

主要是因为RAID 5阵列失败的性能问题,一些数据库专家组成了一个名为BAARF的团体--反对任何Raid Five的战争

如果系统在有活动写入时发生故障,条带的奇偶性可能会与数据不一致。如果在磁盘或块发生故障之前没有修复,可能会发生数据丢失。不正确的奇偶校验将被用于重建该条带中丢失的块。这个问题有时被称为"写孔"。通常使用电池支持的缓存和类似的技术来减少发生这种情况的机会。

画面

·        

RAID 0只是将不同的块放在不同的磁盘上。没有冗余。

·        

在Raid 1中,每个块都在两个磁盘上。

·        

RAID 5为数据计算特殊的校验和。带有校验和的块和带有数据的块都分布在所有的磁盘上。

RAID级别使用较少

RAID 2

这是用在非常大的计算机上。使用RAID Level 2需要特殊昂贵的磁盘和特殊的控制器。数据是在位级分布的(其他级别都使用字节级动作)。要进行特殊的计算。数据被分割成静态的比特序列。8个数据位和2个奇偶校验位被放在一起。然后计算出一个汉明码。然后将汉明码的碎片分布在不同的磁盘上。

RAID 2是唯一能修复错误的RAID级别,其他RAID级别只能检测错误。当他们发现所需的信息没有意义时,他们会简单地重建它。这是通过计算,利用其他磁盘上的信息来完成的。如果这些信息缺失或错误,他们就不能做什么。因为它使用的是汉明码,RAID 2可以发现哪一块信息是错误的,并且只纠正那一块。

RAID 2至少需要10块磁盘才能工作。由于其复杂性和需要非常昂贵和特殊的硬件,RAID 2已经不怎么使用了。

RAID 3"带专用奇偶校验的条带"。

Raid Level 3与RAID Level 0非常相似。增加一个额外的磁盘来存储奇偶校验信息。这是通过对其他磁盘上的块的值进行位加法来实现的,奇偶校验信息存储在单独的(专用)磁盘上。奇偶校验信息存储在一个单独的(专用)磁盘上。这并不好,因为如果奇偶校验盘崩溃,奇偶信息就会丢失。

RAID Level 3通常是用至少3块磁盘来完成。两块硬盘的设置与RAID 0级相同。

RAID 4"带专用奇偶校验的条带"。

这与RAID 3非常相似,只是奇偶校验信息是在较大的块上计算的,而不是单个字节。这就像RAID 5一样。一个RAID 4阵列至少需要三块磁盘。

RAID 6

RAID 6级不是最初的RAID级别。它在RAID 5阵列上增加了一个额外的奇偶块。它至少需要四块磁盘(两块磁盘用于容量,两块磁盘用于冗余)。RAID 5可以看作是Reed-Solomon代码的一个特例。不过RAID 5是个特例,它只需要在伽罗瓦场GF(2)中进行加法。这很容易用XORs来实现。RAID 6扩展了这些计算。它不再是一个特殊情况,所有的计算都需要完成。在RAID 6中,使用一个额外的校验和(称为多项式),通常是GF(28)。用这种方法可以防止任何数量的故障磁盘。RAID 6是针对使用两个校验和来防止两个磁盘丢失的情况。

和RAID 5一样,每个块的奇偶校验和数据都在不同的磁盘上。两个奇偶校验块也位于不同的磁盘上。

有不同的方法来进行RAID 6。它们的写入性能和所需的计算量是不同的。能够进行更快的写入通常意味着需要更多的计算。

RAID 6的速度比RAID 5慢,但它允许RAID在任何两块磁盘出现故障时继续运行。RAID 6正变得越来越流行,因为它允许在单盘故障后重建阵列,即使剩余的一个磁盘有一个或多个坏扇区。

画面

·        

RAID 3与RAID 0级非常相似。增加了一个额外的磁盘,它将为每个数据块保存一个校验和。

·        

RAID 4类似于RAID 3级,但在较大的数据块上计算奇偶校验。

·        

RAID 6与RAID 5类似,但它计算两种不同的校验和。这允许两块磁盘发生故障,而不会造成数据丢失。

非标准RAID级别

双奇偶性/对角线奇偶性

RAID 6使用两个奇偶校验块。这些块是以一种特殊的方式在多项式上计算的。双奇偶校验RAID(也称为对角奇偶校验RAID)对每个奇偶块使用不同的多项式。最近,定义RAID的行业协会表示,双奇偶校验RAID是RAID 6的不同形式。

RAID-DP

RAID-DP是另一种拥有双奇偶性的方式。

RAID 1.5

RAID 1.5(不要与RAID 15混淆,后者不同)是一种专有的RAID实现。和RAID 1一样,它只使用两块磁盘,但它同时进行条带化和镜像(类似于RAID 10)。大多数事情都是在硬件中完成的。

RAID 5E、RAID 5EE和RAID 6E。

RAID 5E、RAID 5EE 和 RAID 6E(添加 E 代表增强型)通常指的是带有热备用驱动器的不同类型的 RAID 5 或 RAID 6。在这些实现中,热备用驱动器不是物理驱动器。相反,它是以磁盘上空闲空间的形式存在。这提高了性能,但这意味着不同阵列之间不能共享热备用驱动器。这个方案是由IBM ServeRAID在2001年左右推出的。

RAID 7

这是一个专有的实现。它为RAID 3或RAID 4阵列增加了缓存。

英特尔矩阵RAID

一些英特尔主板的RAID芯片就有这个功能。它使用两块或三块磁盘,然后平均分区,形成RAID 0、RAID 1、RAID 5或RAID 1+0级别的组合。

Linux MD RAID驱动

这是允许在Linux下进行软件RAID的驱动程序的名称。除了普通的RAID 0-6级之外,它还有一个RAID 10的实现。从Kernel 2.6.9开始,RAID 10是一个单一级别。这个实现有一些非标准的功能。

RAID Z

Sun公司已经实现了一个名为ZFS的文件系统。这个文件系统是为处理大量数据而优化的。它包括一个逻辑卷管理器。它还包括一个叫做RAID-Z的功能。它避免了被称为RAID 5写孔的问题,因为它有一个复制-写策略。它不会直接覆盖数据,而是在磁盘上的新位置写入新数据。当写入成功后,旧数据被删除。它避免了小写时需要进行读-修改-写操作,因为它只写全条。小块是镜像的,而不是奇偶保护的,这是因为文件系统知道存储的组织方式。因此,它可以在必要时分配额外的空间。还有RAID-Z2,它使用两种形式的奇偶校验来实现与RAID 6类似的结果:能够在最多两个驱动器故障时存活而不丢失数据。

画面

·        

RAID DP(双奇偶校验)设置示意图。

·        

矩阵式RAID设置。

加入RAID级别

通过RAID可以把不同的磁盘放在一起,得到一个逻辑磁盘.用户只会看到逻辑磁盘。上面提到的每一个RAID级别都有好坏之分。但是RAID也可以和逻辑磁盘一起工作。这样上面的一个RAID级别就可以和一组逻辑盘一起使用。很多人注意到这一点的时候,都会把数字写在一起。有时,他们会在中间写一个"+"或"&"。常见的组合(使用两个级别)有以下几种。

  • RAID 0+1:将两个或多个RAID 0阵列组合成一个RAID 1阵列;这称为条带镜像。
  • RAID 1+0:与RAID 0+1相同,但RAID级别颠倒了;镜像条纹。这使得磁盘故障比上述RAID 0+1更罕见。
  • RAID 5+0:将多个RAID 5与一个RAID 0进行剥离。每个RAID 5中的一个磁盘可以发生故障,但使该RAID 5成为单一故障点;如果该阵列的另一个磁盘发生故障,该阵列的所有数据将丢失。
  • RAID 5+1。镜像一组RAID 5:在RAID由六块磁盘组成的情况下,任何三块磁盘都可以失效(而不会丢失数据)。
  • RAID 6+0:在一个RAID 0上剥离多个RAID 6阵列;每个RAID 6的两个磁盘可以在不丢失数据的情况下失效。

六块硬盘,每块300GB,总容量为1.8TB,可以组成一个RAID 5,可用空间为1.5TB。在该阵列中,一个磁盘可以发生故障而不会丢失数据。使用RAID 50,空间减少到1.2TB,但每个RAID 5的一个磁盘可以失效,另外性能也有明显的提升。RAID 51将可用大小减少到900GB,但允许任何三块硬盘发生故障。

·        

RAID 0+1:多个RAID 0阵列与一个RAID 1组合。

·        

RAID 1+0:比RAID 0+1更稳健;支持多块硬盘故障,只要没有两块硬盘做镜像失败即可。

·        

RAID 5+1。任何三块硬盘都可以失效,而不会丢失数据

制作RAID

有不同的方法来制作RAID。可以用软件,也可以用硬件。

软件RAID

用软件做RAID有两种不同的方式。在软件RAID的情况下,磁盘的连接就像普通的硬盘一样。使RAID工作的是计算机。这意味着每一次访问,CPU也需要进行RAID的计算。RAID 0或RAID 1的计算很简单。然而,RAID 5、RAID 6或其中一个组合RAID级别的计算可能会很麻烦。在软件RAID中,从失败的阵列中自动启动可能是一件困难的事情。最后,在软件中进行RAID的方式取决于所使用的操作系统;一般情况下,不可能用不同的操作系统重新构建软件RAID阵列。操作系统通常使用硬盘分区而不是整个硬盘来制作RAID阵列。

硬件RAID

也可以用硬件来做RAID。在这种情况下,使用一个特殊的磁盘控制器;这个控制器卡向操作系统和用户隐藏了它正在做RAID的事实。校验信息的计算,以及其他与RAID相关的计算都是在该控制器中的特殊微芯片上完成的。这使得RAID独立于操作系统。操作系统不会看到RAID,它看到的是单个磁盘。不同的厂商用不同的方式来做RAID。这意味着用一个硬件RAID控制器建立的RAID不能用另一个不同厂家的RAID控制器重建。硬件RAID控制器的购买成本往往很高。

硬件辅助RAID

这是硬件RAID和软件RAID的混合体。硬件辅助RAID使用一个特殊的控制器芯片(就像硬件RAID一样),但这个芯片不能进行很多操作。只有在系统启动时,它才会被激活;只要操作系统完全加载,这种配置就像软件RAID一样。有些主板对所连接的磁盘具有RAID功能;大多数情况下,这些RAID功能是以硬件辅助RAID的方式完成的。这意味着需要特殊的软件才能使用这些RAID功能,并且能够从故障磁盘中恢复。

与硬件故障有关的不同术语

在谈论硬件故障时,有不同的术语。

不合格率

故障率是指一个系统发生故障的频率。RAID系统的平均故障时间(MTTF)或平均故障间隔时间(MTBF)与其组件的平均故障时间相同。毕竟,一个RAID系统无法防止其单个硬盘的故障。不过,更复杂的 RAID 类型("条带化"或"连接"以外的任何类型)可以帮助保持数据的完整性,即使单个硬盘驱动器发生故障。

数据丢失的平均时间

平均数据丢失时间(MTTDL)给出了在给定阵列中发生数据丢失之前的平均时间。一个给定RAID的平均数据丢失时间可能高于或低于其硬盘的平均数据丢失时间。这取决于所使用的RAID类型。

平均恢复时间

有冗余的阵列可以从一些故障中恢复。平均恢复时间显示了故障阵列恢复到正常状态所需的时间。这既增加了更换故障磁盘机制的时间,也增加了重新构建阵列的时间(即为冗余复制数据)。

不可恢复的误码率

不可恢复位错误率(UBE)告诉了磁盘驱动器在使用周期性冗余检查(CRC)代码和多次重试后无法恢复数据的时间。

RAID的问题

RAID的理念或技术也存在一定的问题。

以后再添加磁盘

某些RAID级别允许在以后简单地添加硬盘来扩展阵列。像奇偶校验块这样的信息通常会分散在几块硬盘上。增加一个硬盘到磁盘阵列意味着需要重新组织。这样的重组就像重新构建阵列一样,可能需要很长时间。当这个工作完成后,额外的空间可能还没有被使用,因为阵列上的文件系统和操作系统都需要被告知。有些文件系统不支持在它们被创建后被增长。在这种情况下,所有的数据需要备份,阵列需要用新的布局重新创建,数据需要恢复到阵列上。

另一个增加存储的选择是创建一个新的阵列,并让逻辑卷管理器来处理这种情况。这几乎可以发展任何RAID系统,甚至是RAID1(它本身就限制在两个磁盘上)。

关联故障

RAID中的纠错机制假设驱动器的故障是独立的。可以计算出一个设备的故障频率,并安排阵列使数据丢失的可能性非常小。

但实际上,这些驱动器往往是一起买的。它们的年龄大致相同,使用情况也差不多(称为磨损)。许多驱动器的故障都是因为机械问题。一个驱动器的年龄越大,其机械部件的磨损就越大。旧的机械部件比年轻的机械部件更容易发生故障。这意味着驱动器的故障不再是统计学上独立的。在实践中,在第一块磁盘被恢复之前,第二块磁盘也有可能出现故障。这意味着,在实际操作中,数据丢失的比率会很大。

原子性

另一个同样发生在RAID系统上的问题是,应用程序期望的是所谓的原子性。要么所有的数据都被写入,要么没有。写入数据被称为事务

在RAID阵列中,新数据通常被写入旧数据的位置。这被称为原地更新。数据库研究者Jim Gray在1981年写了一篇论文,他描述了这个问题。

很少有存储系统允许原子写语义。当一个对象被写入磁盘时,RAID存储设备通常会并行写入该对象的所有副本。很多时候,只有一个处理器负责写入数据。在这种情况下,向不同驱动器写入数据的工作将重叠。这就是所谓的重叠写交错写。因此,在写入过程中发生的错误可能会使冗余副本处于不同状态。更糟糕的是,它可能会使副本既不处于旧状态也不处于新状态。不过,日志记录依赖于原始数据处于旧状态或新状态。这允许备份逻辑变化,但很少有存储系统在RAID磁盘上提供原子写语义。

使用电池支持的写入缓存可以解决这个问题,但只是在断电的情况下。

并非所有的硬件RAID控制器都提供事务性支持。因此,许多操作系统都包含了它,以防止在中断的写入期间发生数据丢失。Novell Netware,从3.x版本开始,就包含了事务跟踪系统。微软通过NTFS中的日记功能引入了事务跟踪。NetApp WAFL文件系统和ZFS一样,通过永不更新到位的数据来解决。

无法恢复的数据

硬盘上的一些扇区可能因为错误而变得不可读。一些RAID实现可以通过将数据移动到其他地方并将磁盘上的扇区标记为坏扇区来处理这种情况。在企业级磁盘驱动器中,这种情况大约发生在1015分之1位,在普通磁盘驱动器中,这种情况发生在1014分之1位。磁盘容量在稳步增加。这可能意味着有时,RAID无法重建,因为在磁盘故障后重建阵列时,会发现这样的错误。某些技术,如RAID 6试图解决这个问题,但它们的写惩罚非常高,换句话说,写数据会变得非常慢。

写入缓存可靠性

只要数据在缓存中,磁盘系统就可以确认写入操作。它不需要等到数据被实际写入。然而,任何断电都可能意味着在这种缓存中排队的任何数据的重大数据损失。

对于硬件RAID,可以使用电池来保护这个缓存。这样往往可以解决这个问题。当电源故障时,控制器可以在电源恢复时完成缓存的写入。但这种解决方案仍然可能失败:电池可能已经耗尽,电源可能已经关闭太久,磁盘可能被移动到另一个控制器上,控制器本身也可能失败。某些系统可以进行定期的电池检查,但这些检查会使用电池本身,并使其处于未充满电的状态。

设备兼容性

不同RAID控制器上的磁盘格式不一定兼容。因此,可能无法在不同硬件上读取RAID阵列。因此,非磁盘硬件故障可能需要使用相同的硬件或备份来恢复数据。

RAID能做什么,不能做什么

本指南摘自RAID相关论坛的一个帖子。这样做是为了帮助指出选择RAID的优势和劣势。它是针对那些想选择RAID来提高性能或冗余的人。它包含了论坛中其他帖子的链接,其中包含了用户产生的关于他们的RAID经验的轶事评论。

RAID可以做什么

  • RAID可以保护正常运行时间。RAID级别1、0+1/10、5和6(以及它们的变种如50和51)可以弥补机械硬盘故障。即使磁盘故障后,阵列上的数据仍然可以使用。与其从磁带DVD或其他慢速备份介质进行耗时的还原,RAID允许从阵列的其他成员将数据还原到替换磁盘上。在这个恢复过程中,用户可以在降级状态下使用。这对企业来说是非常重要的,因为停机时间很快就会导致赚取能力的损失。对于家庭用户来说,它可以保护大型媒体存储阵列的正常运行时间,因为在没有冗余保护的磁盘发生故障时,需要从几十张DVD或不少磁带中进行耗时的恢复。
  • RAID可以提高某些应用的性能。RAID 级别 0、5 和 6 都使用条带化。这允许多个主轴来提高线性传输的传输速率。工作站类型的应用程序经常处理大型文件。它们从磁盘条带化中获益匪浅。这类应用的例子是那些使用视频或音频文件的应用。这种吞吐量在磁盘到磁盘的备份中也很有用。RAID 1以及其他基于条带化的RAID级别可以提高具有许多同步随机访问的访问模式的性能,例如多用户数据库使用的访问模式。

RAID无法做到的事情

  • RAID不能保护阵列上的数据。一个RAID阵列只有一个文件系统。这就形成了一个单点故障。除了物理磁盘故障之外,还有很多事情可以发生在这个文件系统上。RAID无法抵御这些数据丢失的来源。RAID无法阻止病毒破坏数据。RAID无法防止数据损坏。当用户修改数据或意外删除数据时,RAID无法保存数据。RAID不能保护数据免受物理磁盘以外的任何组件的硬件故障。RAID不能保护数据免受自然或人为的灾难,如火灾和洪水。要保护数据,必须将数据备份到可移动媒体上,如 DVD、磁带或外部硬盘。备份必须保存在不同的地方。当灾难发生时(而不是当灾难发生时),仅靠RAID无法防止灾难变成数据丢失。灾难是无法避免的,但备份可以防止数据丢失。
  • RAID不能简化灾难恢复。当运行单个磁盘时,磁盘可以被大多数操作系统使用,因为它们带有一个通用的设备驱动程序。然而,大多数RAID控制器需要特殊的驱动程序。在通用控制器上使用单盘的恢复工具将需要特殊的驱动程序来访问RAID阵列上的数据。如果这些恢复工具的编码很差,不允许提供额外的驱动程序,那么RAID阵列很可能无法被该恢复工具访问。
  • RAID无法在所有应用中提供性能提升。对于典型的桌面应用用户和游戏玩家来说,这种说法尤其正确。对于大多数桌面应用和游戏来说,磁盘的缓冲策略和寻求性能比原始吞吐量更重要。增加原始持续传输率对这些用户来说没有什么好处,因为他们访问的大多数文件通常都很小。使用RAID 0的磁盘条带化增加的是线性传输性能,而不是缓冲区和寻道性能。因此,使用RAID 0的磁盘条带化在大多数桌面应用程序和游戏中几乎没有性能提升,尽管也有例外。对于以高性能为目标的台式机用户和游戏玩家来说,购买一个更快、更大、更贵的单盘比在RAID 0中运行两个更慢/更小的硬盘更好。即使在RAID-0中运行最新、最好、最大的硬盘,也不可能将性能提升超过10%,而且在某些访问模式下,性能可能会下降,尤其是游戏。
  • 将RAID移动到新系统中是很困难的。对于单块磁盘来说,将磁盘移动到新系统是相对容易的。如果新系统有相同的接口,可以简单地将其连接到新系统。但是,对于RAID阵列来说,这就不那么容易了。有某种Metadata说明了RAID是如何设置的。RAID BIOS必须能够读取这些元数据,这样它才能成功地构建阵列,并使操作系统能够访问它。由于RAID控制器制造商对他们的元数据使用不同的格式(甚至同一制造商的不同系列的控制器可能使用不兼容的元数据格式),几乎不可能将一个RAID阵列移动到不同的控制器上。当把一个RAID阵列移动到一个新的系统中时,也应该计划移动控制器。随着主板集成RAID控制器的普及,这一点是非常困难的。一般来说,可以将RAID阵列成员和控制器一起移动。Linux和Windows服务器产品中的软件RAID也可以绕过这个限制,但软件RAID还有其他限制(主要是与性能有关)。

例子

最常用的RAID级别是RAID 0、RAID 1和RAID 5。假设有一个3块磁盘的设置,有3块相同的磁盘,每块1TB,在给定的时间段内,硬盘出现故障的概率为1%。

RAID级别

可用容量

失败概率

单位:%

失败概率

1/.案件不合格

0

3TB

2,9701%

34

1

1TB

0,0001%

100万

5

2 TB

0,0298%

3356


AlegsaOnline.com - 2020 / 2023 - License CC3