磁盘冗余阵列 RAID

一、磁盘冗余阵列 RAIDRedundant Array of Independent Disk

    RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。根据磁盘陈列的不同组合方式,可以将RAID分为不同的级别。 其中提高传输速率和提供容错功能是最大的优点。其特色是N台硬盘同时读取速度加快及提供容错性Fault Tolerant,所以RAID主要是解决访问数据的存储速度问题(Storage)不是备份问题(Backup Solution)。在不须停机情况下可处理以下动作:

1.       RAID 磁盘阵列支持自动检测故障硬盘

2.       RAID 磁盘阵列支持重建硬盘坏轨的资料;

3.       RAID 磁盘阵列支持不须停机的硬盘备援 Hot Spare

4.       RAID 磁盘阵列支援支持不须停机的硬盘替换 Hot Swap

     5.       RAID 磁盘阵列支持扩充硬盘容量等。

功能:

      1、扩大了存储能力 可由多个硬盘组成容量巨大的存储空间。

  2、降低了单位容量的成本 市场上最大容量的硬盘每兆容量的价格要大大高于普及型硬盘,因此采用多个普及型硬盘组成的阵列其单位价格要低得多。

  3、提高了存储速度 单个硬盘速度的提高均受到各个时期的技术条件限制,要更进一步往往是很困难的,而使用RAID,则可以让多个硬盘同时分摊数据的读或写操作,因此整体速度有成倍地提高。

  4、可靠性 RAID系统可以使用两组硬盘同步完成镜像存储,这种安全措施对于网络服务器来说是最重要不过的了。

  5、容错性 RAID控制器的一个关键功能就是容错处理。容错阵列中如有单块硬盘出错,不会影响到整体的继续使用,高级RAID控制器还具有拯救数据功能。

  6、对于IDE RAID来说,目前还有一个功能就是支持ATA/66/100RAID也分为SCSI RAIDIDE RAID两类,当然IDE RAID要廉价得多。如果主机主板不支持ATA/66/100硬盘,通过RAID卡,则能够使用上新硬盘的ATA/66/100

功能。

二、相关术语解释

    硬盘镜像(Disk Mirroring):硬盘镜像最简单的形式是,一个主机控制器带二个互为镜像的硬盘。数据同时写入二个硬盘,二个硬盘上的数据完全相同,因此一个硬盘故障时,另一个硬盘可提供数据。

  硬盘数据跨盘(Disk Spanning):利用这种技术,几个硬盘看上去像是一个大硬盘;这个虚拟盘可以把数据跨盘存储在不同的物理盘上,用户不需关心哪个盘上存有他需要的数据。

  硬盘数据分段(Disk Striping):数据分散存储在几个盘上。数据的第一段放在盘0,第2段放在盘1,……直至达到硬盘链中的最后一个盘,然后下一个逻辑段将放在硬盘0,再下一个逻辑段放在盘1,如此循环直至完成写操作。

  双控(Duplexing):这里指的是用二个控制器来驱动一个硬盘子系统。一个控制器发生故障,另一个控制器马上控制硬盘操作。此外,如果编写恰当的控制器软件,可实现不同的硬盘驱动器同时工作。

  容错(Fault Tolerant):具有容错功能的机器有抗故障的能力。例如RAID 1镜像系统是容错的,镜像盘中的一个出故障,硬盘子系统仍能正常工作。

  主机控制器(Host Adapter):这里指的是使主机和外设进行数据交换的控制部件(如SCSI控制器)。

  热修复(Hot Fix):指用一个硬盘热备份来替换发生故障的硬盘。要注意故障盘并不是真正地被物理替换了。用作热备份的盘被加载上故障盘原来的数据,然后系统恢复工作。

  平均数据丢失时间(MTBDLMean Time Between Data Loss MTBDL,平均时间之间的数据丢失):发生数据丢失的事件间的平均时间。

  平均无故障工作时间(MTBFMean Time Between FailureMTIF MTBF – 平均无故障时间或MTIF):设备平均无故障运行时间。

  系统重建(Reconstruction or Rebuild 改造或重建):一个硬盘发生故障后,从其它正确的硬盘数据和奇偶信息恢复故障盘数据的过程。

  恢复时间(Reconstruction Time 重建时间):为故障盘重建数据所需要的时间。

虚拟盘(Virtual Disk 虚拟磁盘):与虚拟存储器类似,虚拟盘是一个概念盘,用户不必关心他的数据写在哪个物理盘上。虚拟盘一般跨越几个物理盘,但用户看到的只是一个盘。

 

三、 RAID 0RAID 7详细说明:

 1. RAID 0:无差错控制的带区组

要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。如果刚好所需要的数据在不同的驱动器上效率最好。它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID0比较合适。同时,RAID可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么原来读取同样文件的时间被缩短为1/2。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。

 

2. RAID 1:镜象结构

   对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作。您也可以看到必须有两个驱动器。因为是镜象结构在一组盘出现问题时,可以使用镜象,提高系统的容错能力。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。

 

3. RAID2:带海明码校验

从概念上讲,RAID 2 RAID 3类似, 两者都是将数据条块化分布于不同的硬盘上, 条块单位为位或字节。然而RAID 2 使用一定的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂。因此,在商业环境中很少使用。由于海明码的特点,它可以在数据发生错误的情况下将错误校正,以保证输出的正确。

 

4. RAID3:带奇偶校验码的并行传送

这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度,它像RAID 0一样以并行的方式来存放数据,但速度没有RAID 0快。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2RAID 3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。 如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。 利用单独的校验盘来保护数据虽然没有镜像的安全性高,但是硬盘利用率得到了很大的提高,为(n-1/n

 

RAID4:带奇偶校验码的独立磁盘结构  

RAID4RAID3很象,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。

 

RAID5:分布式奇偶校验的独立磁盘结构

它的奇偶校验码存在于所有磁盘上,。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。硬盘的利用率为n-1 但是它对数据传输的并行性解决不好RAID 3 RAID 5相比,重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。RAID-5的话,优点是提供了冗余性(支持一块盘掉线后仍然正常运行),磁盘空间利用率较高(N-1/N),读写速度较快(N-1倍)。RAID5最大的好处是在一块盘掉线的情况下,RAID照常工作,RAID5RAID级别中最常见的一个类型。RAID5校验位即P位是通过其它条带数据做异或(xor)求得的。

数学运算符号异或。

  

RAID6:两种存储的奇偶校验码的磁盘结构

它是对RAID5的扩展,主要是用于要求数据绝对不能出错的场合。当然了,由于引入了第二种奇偶校验值,所以需要N+2个磁盘,写入速度也不好,用于计算奇偶校验值和验证数据正确性所花费的时间比较多,造成了不必须的负载。

 

RAID10/01:高可靠性与高效磁盘结构

RAID 10是先镜射再分区数据。是将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。RAID 10有着不错的读取速度,而且拥有比RAID 0更高的数据保护性。RAID 10巧妙的利用了RAID 0的速度以及RAID 1的保护两种特性,不过它的缺点是需要的硬盘数较多,因为至少必须拥有四个以上的偶数硬盘才能使用。Raid 10首先创建2个独立的Raid1,然后将这两个独立的Raid1组成一个Raid0,图中磁盘1和磁盘2组成一个Raid1为阵列A,磁盘2和磁盘3又组成另外一个Raid1为阵列B;这两个Raid1组成了一个新的Raid0

  RAID 01则是跟RAID 10的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。RAID 01比起RAID 10有着更快的读写速度,不过也多了一些会让整个硬盘组停止运转的机率;因为只要同一组的硬盘全部损毁,RAID 01就会停止运作,而RAID 10则可以在牺牲RAID 0的优势下正常运作。

 

   mdadm的使用:

1.  mdadm工具如果没有安装则需要安装mdadm

2.  查看帮助,mdadm –help    mdadm –create –help    man mdadm

    man page中有许多好的例子,在page的最后

3.  mdadm  参数:

 -C|–create  创建模式:

         -n # 创建#个块设备来创建RAID

         -l # 指明要创建的RAID级别相当于–level

         -a {yes|no} 自动创建目标RAID

         -c chunk_size 指出chunk大小

         -x # 指明空闲盘的个数

-D|–detail 显示RAID的详细信息

         -s |–scan 通过扫描raid配置可以将配置追加至配置文件

-A -s  激活某一个设备

管理模式:

         -f 标记指定磁盘为损坏磁盘

         -a 添加磁盘

         -r 移除磁盘

查看md的状态:

         cat /proc/mdstat

停止md设备:

         mdadm -S /dev/md0

 

四、实际操作:

先对硬盘进行分区更改硬盘分区system id类型为:fd,下面我将sdbsdcsddsde四个磁盘进行分区,因为四个磁盘大小参数等都相等,我将先对一个硬盘进行分区,使用dd命令,将硬盘分区表同步至其他硬盘,使用fdisk对硬盘进行分区,这里将不在赘述

[root@cnode6_8 ~]# dd if=/dev/sdb of=/dev/sdc bs=1 count=512
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.0180665 s, 28.3 kB/s
 [root@cnode6_8 ~]# partx -a /dev/sdc

#其他盘类似操作

 [root@cnode6_8 ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1   3.7G  0 rom  /mnt/cdrom
sdb      8:16   0    20G  0 disk
└─sdb1   8:17   0 109.8M  0 part
sdc      8:32   0    20G  0 disk
└─sdc1   8:33   0 109.8M  0 part
sdd      8:48   0    20G  0 disk
└─sdd1   8:49   0 109.8M  0 part
sda      8:0    0   200G  0 disk
├─sda1   8:1    0   200M  0 part /boot
├─sda2   8:2    0  48.8G  0 part /
├─sda3   8:3    0   9.8G  0 part /testdir
├─sda4   8:4    0     1K  0 part
└─sda5   8:5    0     2G  0 part [SWAP]
sde      8:64   0    20G  0 disk
└─sde1   8:65   0 109.8M  0 part

#下面将创建/dev/md0设备,chunk大小为512kb如果大小为M等大于k的单位则需要加单位,k不需要,-a自动,-l表示raid5-n表示有几块硬盘处于工作状态,-x表示有几个空闲盘供其他磁盘损坏自动替补

[root@cnode6_8 ~]# mdadm -C /dev/md0  -c 512  -a yes  -l 5  -n 3  -x 1 /dev/sd{b,c,d,e}1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@cnode6_8 ~]# mke2fs -t ext3 /dev/md0
mke2fs 1.41.12 (17-May-2010)
…… 此处省略
180 days, whichever comes first.  Use tune2fs -c or -i to override.
 [root@cnode6_8 ~]# mdadm -D /dev/md0  //查看创建的md0设备
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jul 28 17:58:51 2016
     Raid Level : raid5
     Array Size : 222208 (217.00 MiB 227.54 MB)
  Used Dev Size : 111104 (108.50 MiB 113.77 MB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
    Update Time : Thu Jul 28 18:00:07 2016
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
           Name : cnode6_8.desktop:0  (local to host cnode6_8.desktop)
           UUID : 39c9d4e9:56d46119:0da52789:c7cc220e
         Events : 18
 
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
 
       3       8       65        -      spare   /dev/sde1
[root@cnode6_8 ~]# mdadm -D -s /dev/md0 >> /etc/mdadm.conf  //把配置信息保存为文件
[root@cnode6_8 ~]# mkdir /mnt/md0  //创建挂载点
[root@cnode6_8 ~]# mount /dev/md0 /mnt/md0  //挂载md0设备
[root@cnode6_8 ~]# df -h |grep md0
/dev/md0        211M  6.1M  194M   4% /mnt/md0
[root@cnode6_8 ~]# mdadm -G /dev/md0 -n4 -a /dev/sdb2  //添加一个raid设备
mdadm: added /dev/sdb2
mdadm: Need to backup 3072K of critical section..
 [root@cnode6_8 ~]# mdadm -D /dev/md0
/dev/md0:
……
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       5       8       18        3      active sync   /dev/sdb2
 
       3       8       65        -      spare   /dev/sde1
[root@cnode6_8 ~]#  mdadm  /dev/md0   -f /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md0
[root@cnode6_8 ~]# mdadm -D /dev/md0
/dev/md0:
       ……
 
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1
 
       5       8       18        -      faulty   /dev/sdb2
[root@cnode6_8 ~]# mdadm -S /dev/md0 //停止md 设备
mdadm: stopped /dev/md0
[root@cnode6_8 ~]# mdadm --zero-superblock /dev/sd{b1,b2,c1,d1,e1}  //清除磁盘上面的超级块信息
[root@cnode6_8 ~]# rm -f /etc/mdadm.conf   //删除生成的配置文件,如果是永久挂载的设备要将fstab配置文件中的挂载信息也清空

原创文章,作者:jack_cui,如若转载,请注明出处:http://www.178linux.com/43882

(0)
上一篇 2016-09-07 09:37
下一篇 2016-09-07 09:38

相关推荐

  • 马哥教育网络21期+第十三周练习博客

        马哥教育网络21期+第十三周练习博客 1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 在服务器上安装samba ]# yum install samba 创建共享目录/data 启动samba的nmb和smb…

    Linux干货 2016-10-31
  • 推荐-使用Ansible部署LAMP环境

    使用Ansible部署LAMP环境 使用Ansible部署LAMP环境 前言 实验环境 实验步骤 配置ssh公钥认证 安装ansible 配置host iventory 创建YAML文件 运行Ansible-Playbook并测试 总结 前言 这两天学习了Ansible, 在部署实验环境真的很好用, 今天向大家分享如何使用Ansible部署LAMP环境, 本…

    Linux干货 2016-04-10
  • 正则表达式的概念和用法

    概念 正则表达式是对字符串操作的一种逻辑表达方式,很多情况下我们需要在茫众多的文件中找到我们需要的文件时,就需要用到正则表达式了 正则表达式就如同一个过滤器,能够筛选出希望得到的字符串。它可以检索、替换符合我们自己规定格式的所有文本。 正则表达式分两类: 基本正则表达式 扩展正则表达式 正则表达式的用法和选项 在Linux中,正则表达式通常会配合文本过滤工具…

    2017-06-10
  • CentOS6.7下关于vsftpd的应用之一(匿名用户/普通用户/虚拟用户)

    1)使用yum安装vsftpd [root@C67-X64-A1 ~]# /etc/init.d/vsftpd start为 vsftpd 启动 vsftpd:           &nbs…

    Linux干货 2016-09-19
  • LVM逻辑卷管理器

    Logical Volume Manager     LVM(逻辑卷管理)是Linux环境下对磁盘分区进行管理的一种机制。     普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,     某个分区空间耗尽时,解决的方法通常是使…

    Linux干货 2016-08-29
  • php-fpm实验

    #yum install marisdb-server #vim /etc/my.cnf.d/server.cnf [mysqld]         skip_name_resolve=ON         innodb_file_per_…

    Linux干货 2017-06-08