RAID(Redundant Array of Independent Disk),独立冗余磁盘阵列(通常简称磁盘阵列)。磁盘阵列的实质是将多个磁盘通过RAID控制器组合在一起,形成一个新的磁盘。这个新的磁盘具有更大的容量(将多个磁盘合并使用)、更好的容错性(一份数据多个拷贝),以及更快的读写速度(多磁盘同时读写)等优势。

对与计算机而言,磁盘阵列就是一个磁盘。


  1. 一、磁盘阵列的种类

磁盘阵列按实现方式可分为硬件RAID和软件RAID,其区别如下:

硬件RAID:常见的硬件RAID以阵列卡等形式存在。对于主机而言,一个硬件RAID系统就是一个磁盘。

软件RAID:软件RAID是通过底层代码实现,通常是有操作系统提供的相关功能。

硬件RAID与软件RAID对比

磁盘类型    安装驱动    系统资源    支持种类    花费资金
软件RAID 无需 需要 更多 无需额外购买
硬件RAID 需要 无需 有限 需要额外购买

硬件RAID虽然按照麻烦,但可以不必占用系统资源,从而提高了系统资源利用率,因此硬件RAID一般用在专用存储或磁盘读写压力较大的服务器上。软件RAID部署比较方便,且能够支持更多的存储设备,因此软件RAID一般用在小型服务器、个人和家庭存储领域。

  1. 二、磁盘阵列级别

磁盘阵列按存储数据的方式不同,可以使用RAID0-RAID7来表示,通常将其称为阵列级别。除了0-7这8个级别外,一些厂商还在原有的8个级别的基础上,扩展出其他的级别,例如RADI50、RAID10等。

阵列级别不同,其存储数据的方式、附带的功能、特性也有所差异。常见的几个阵列级别:

(1)RAID 0

RAID 0必须由两块以上的磁盘组成,存储数据时RAID 0会先分割要存入的数据,然后再交错地存储在组成阵列的所有磁盘上。RAID 0交错地存储数据带来的特性如下:

  • 大大提高了读写数据的速度(由于系统总线等多方面的限制,其读写速度往往低于所有磁盘读写速度的总和)。
  • RAID 0阵列的可用空间是所有磁盘空间的总和。
  • 由于数据都没有备份,因此RAID 0不提供数据冗余功能。

由于阵列中的数据分布在所有磁盘上,因此有时人们也将RAID 0称为带区卷

注意:无论阵列的级别是多少,组成阵列的磁盘大小都应该大致相等。

(2)RAID 1

RAID 1必须由两块以上的磁盘组成,存储数据时,RAID 1将要存储的数据完整地存放在组成阵列的所有磁盘上,即每个磁盘都拥有一个拷贝。RAID 1的特性如下:

  • 由于每个磁盘都保存着一份相同的数据,因此RAID 1能够提供数据冗余功能。
  • RAID 1的可用空间与组成阵列的磁盘中容量最小的磁盘空间相等。
  • RAID 1不能加快数据的读写速度。

由于每块磁盘内的数据一致,因此通常将RAID称为镜像卷。

(3)RAID 5

组成RAID 5必须使用3块以上的磁盘,以使用3块磁盘组成的RAID 5为例:存数数据时,先将数据分为两部分,然后对这两部分数据执行奇偶校验运算(即异或运算),最后将这两部分数据与奇偶校验的结果随机地存放在3块磁盘中。

RAID 5的特性如下:

  • 提供磁盘冗余功能。
  • 同时读写磁盘,加快的数据读写速度。
  • 需要执行奇偶校验,要消耗计算资源。
  • RAID 5的可用空间计算公式为:n*(m-1)。其中n表示单个磁盘的空间,m表示组成阵列的磁盘总数。

注意:RAID 5的冗余工作机制为,当其中一块磁盘损坏时,可以通过其他几块磁盘中的数据计算出丢失的数据。因此虽然RAID 5提供了磁盘冗余功能,但如果损坏的磁盘数大于1,仍然无法计算出丢失的数据。

  1. 三、创建组成阵列的磁盘分区

在Linux系统中,阵列的实现方式是:利用多个现有的块设备文件,通过操作系统的底层代码虚拟出新的块设备文件(称为虚拟块设备文件)。实现虚拟块设备文件功能的底层代码叫做MD(Multiple Device),利用MD可以组成RAID0、RAID4、RAID5、RAID6等多种阵列。

与Windows环境中的软件阵列不同,MD使用磁盘分区创建阵列(Windows系统中只能使用磁盘组成阵列)。

[root@localhost ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 1958.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK) #使用命令n和p添加主要分区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
#新分区使用分区号1,并使用所有可用空间
Partition number (1-4): 1
First cylinder (1-1958, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1958, default 1958):
Using default value 1958 #使用命令t修改分区类型
Command (m for help): t
Selected partition 1
#分区类型代码fd(可通过键入L查看所有的分区类型及其对应的代码)
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): p Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
/dev/sda1 1 1958 15727603+ fd Linux raid autodetect #使用命令w将分区表同步到磁盘
Command (m for help): w

上面这个过程与创建普通磁盘分区类似,但在上面创建分区的过程中,使用了命令t将分区类型修改为Linux raid autodetect。虽然不修改分区类型也可以创建磁盘阵列,但为了方便管理员了解功能,建议修改组成阵列的所有磁盘分区。

按照上面的步骤依次添加sdb1和sdc1.

  1. 四、创建磁盘阵列

在Linux系统中,创建和管理磁盘阵列的使用的命令是mdadm。

注意:虽然系统不会提示,但组成阵列的所有分区大小应该基本一致。最好使用几个相同的磁盘,每个磁盘创建一个分区,然后创建阵列。

         不要使用一个磁盘的多个分区组建阵列,这会大大影响阵列的读写速度。

除了注意上述两点外,建议使用相同型号的磁盘组成阵列(相同型号的磁盘参数都相同),以保证阵列获得最佳的性能。

1、创建磁盘阵列

使用上面创建的磁盘分区sda1、sdb1和sdc1组成阵列RAID 5。

(1)创建阵列的命令如下:

#使用mdadm创建磁盘阵列
#选项create表示要创建的磁盘阵列的设备名,此处要创建的是/dev/md0
#选项level表示磁盘阵列的级别,本例中为5
#选项raid-devices表示阵列将使用的磁盘分区数,最后是分区列表
#本例中分区数为3,组成磁盘阵列的分区分别是sda1、sdb1、sdc1 [root@localhost ~]# mdadm --create /dev/md0 \
> --level 5 \
> --raid-devices 3 /dev/sda1 /dev/sdb1 /dev/sdc1

上面这个示例命令中,使用了长格式选项create、level、raid-devices,其对应的短格式选项为C、l和n。

(2)磁盘阵列创建完成后,系统会立即同步磁盘,并初始化创建的阵列。由于这个过程会读写磁盘,因此通常不建议在此时对阵列执行读写操作。

如果要查看初始化进度,可以使用以下命令:

[root@localhost ~]# cat /proc/mdstat

2、写入配置文件

为方便系统跟踪和监视阵列,应该将阵列信息写入配置文件/etc/mdadm.conf中(默认情况下并不存在这个文件)。

可以使用如下命令写入配置文件:

#使用echo命令将阵列的组成信息写入配置文件
#如果当前写入的阵列不是系统中的第1个阵列,下面的命令应该使用追加的方式写入文件
[root@localhost ~]# echo "DEVICE /dev/sda1 /dev/sdb1 /dev/sdc1">/etc/mdadm.conf
#使用选项detail和scan命令扫描磁盘阵列,并将详细信息写入配置文件
[root@localhost ~]# mdadm --detail --scan>>/etc/mdadm.conf

3、使用阵列

完成以上步骤后,就可以像使用分区那样使用阵列了:

[root@localhost ~]# mkfd.ext3 /dev/md0
[root@localhost ~]# mount /dev/md0 /mnt/md0

至此,就可以使用阵列存储数据了。

  1. 五、为阵列添加热备份盘

如果使用了具有冗余功能的磁盘阵列,应该考虑为阵列添加热备份盘(即阵列的后备磁盘)。当阵列中的某个磁盘损坏时,阵列将自动使用热备份盘替代已损坏的磁盘并继续工作。

添加热备份盘之前,需要查看磁盘阵列的状态:

#通过查看/proc/mdstat的方法查看阵列状态
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[2] sdb1[1] sda1[0]
167766528 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>

在上面的示例中,第2行中的active表示阵列/dev/md0工作正常。第3行中的[3/3]和[UUU]表示组成阵列的磁盘有3个,并且3个磁盘都处于正常工作状态(“U”表示正常,“_”表示不正常)。

要为阵列添加热备份盘,可以使用选项add(或短格式选项a):

[root@localhost ~]# mdadm /dev/md0 --add /dev/sdd1
#通过查看/proc/mdstat的方法查看阵列状态
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3](S) sdc1[2] sdb1[1] sda1[0]
167766528 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>

添加热备份盘后,查看阵列信息发现组成阵列的磁盘多了一块,其状态标识为S,表示这是一个热备份盘。

为阵列添加热备份盘后,阵列不会立即在热备份盘中存放数据。只有当阵列中的磁盘损坏时,阵列才会启用热备份盘。

提示:为阵列添加热备份盘的创建方法,与组成阵列的其他磁盘的创建方法一样,并且都要求大小基本一致。

六、使用热备份盘替换损坏磁盘

如果阵列中一个磁盘已经损坏,阵列会自动使用热备份盘将已损坏的磁盘替换掉,并重新同步阵列中保存的数据。

我们可以模拟这个过程:

(1)使用选项fail(短格式选项为f),认为标识损坏磁盘:

[root@localhost ~]# mdadm -f /dev/md0 /dev/sdc1

(2)将已损坏的磁盘从阵列中移除,可使用选项remove:

[root@localhost ~]# mdadm /dev/md0 --remove /dev/sdc1

七、扩展阵列

许多时候已经建立的磁盘阵列不能满足应用需求,这时就需要扩展阵列(即扩充阵列的容量)。

步骤:先将扩展磁盘添加为阵列的热备份盘,然后再扩展阵列。

假设已经将sdc1和sde1以热备份的方式添加到阵列中,现在需要扩展阵列。扩展现有阵列需要使用选项grow和raid-devices,过程如下:

[root@localhost ~]# mdadm --grow /dev/md0 --raid-devices 5

上面的命令将两个热备份盘添加到阵列中,构成阵列的磁盘数量从3个扩展到5个。扩展完成后,系统会自动同步阵列中的数据。

RAID设备的更多相关文章

  1. 联想RD350板载RAID110i,安装CentOS 7 不识别RAID设备

    联想RD350板载RAID110i,安装CentOS 7 不识别RAID设备   情况如题所述. 1. 确认BIOS中 Boot mode为[UEFI]或者[AUTO] 2. 确认BIOS中 Stor ...

  2. Linux设备文件简介(转载)

    Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).每个字符设备和块设备都必须有主.次设备号,主设备号相同的设 备是同类设备(使用同一个驱动程序).这些设 ...

  3. Linux学习之CentOS(二十八)--RAID原理基础及Linux下软件RAID配置

    一.RAID的原理基础 在 讲解RAID的原理基础之前,我们首先来了解一下传统磁盘的劣势.我们知道一台PC机种都会包含CPU.内存.主板.硬盘.网卡等硬件,影响计算机性能的 组建包括:CPU.主板总线 ...

  4. Raid 介绍以及软raid的实现

    RAID: old Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列) new Redundant Arrays of Independent Disks ...

  5. Linux软raid创建

    RAID: HBA:基于主机的适配器 RAID:Redundent Array of Inexpensive Disks 廉价磁盘阵列 Independent       独立磁盘阵列 Level:仅 ...

  6. CentOS 6.3下配置软RAID(Software RAID)

    一.RAID 简介 RAID 是英文Redundant Array of Independent Disks 的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array). ...

  7. 在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1)

    在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1) RAID即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护.RAID是一些磁盘的集合, ...

  8. 网易视频云技术分享:linux软raid的bitmap分析

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

  9. 了解linux下RAID(磁盘阵列)创建和管理

    现在的操作系统,不论是windows 还是linux都具有raid的功能,RAID 分为硬件 RAID 和软件 RAID, 硬件 RAID 是通过 RAID 卡来实现的,软件RAID是通过软件实现的, ...

随机推荐

  1. 一行 Python 实现并行化 -- 日常多线程操作的新思路

    春节坐在回家的火车上百无聊赖,偶然看到 Parallelism in one line 这篇在 Hacker News 和 reddit 上都评论过百的文章,顺手译出,enjoy:-) http:// ...

  2. Mysql explain分析SQL语句之字段属性说明

    在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的 ...

  3. Yii 1.1 URL两个笔记 同时支持PATH于GET路由和隐藏index.php

    同时支持PATH于GET格式路由(修改框架文件 简直坑) framework/web/CUrlManager.php parseUrl方法 第一行判断修改成 if($this->getUrlFo ...

  4. OpenCV实现的高斯滤波探究_1(《学习OpenCV》练习题第五章第三题ab部分)

    首先看下OpenCV 官方文档对于cvSmooth各个参数的解释: Smooths the image in one of several ways. C: void cvSmooth(const C ...

  5. dom 动态生产表格

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. javascript里面dom操作和兼容问题汇总

    DOM     增,删,改,查 oUl.children         获取UL的子节点         有length的属性 oUl.children[0]    获取UL第1个子节点     使 ...

  7. GRUB加密

    在 /etc/grub.conf 内添加password=密码(也可使用加密的密码password= --md5 加密过的密码) 如何获得加密密码? 那就是grub-md5-crypt命令 简单流程如 ...

  8. POJ 3617 Best Cow Line (贪心)

    题意:给定一行字符串,让你把它变成字典序最短,方法只有两种,要么从头部拿一个字符,要么从尾部拿一个. 析:贪心,从两边拿时,哪个小先拿哪个,如果一样,接着往下比较,要么比到字符不一样,要么比完,也就是 ...

  9. <!DOCTYPE> 标签的深度剖析以及使用选择

    前言: 今天被问道“有没有仔细了解过<!DOCTYPE>标签?”,愣了一下,因为一开始在W3cschool上看到过建议使用XHTML Transitional DTD,之后就很听话地把Dr ...

  10. 说下Fedora下把SpiderMonkey放入Eclipse内编译的过程

    首先要知道SpiderMonkey是个什么玩意 详细的可以看看这里(当然,如果你有google翻译的话看起来也一样费劲,你可以在语言那里选择中文.看完了再转回英文-因为中文有很多文档都没有的,比如:B ...