磁盘阵列全名是: Redundant Arrays of Inexpensive Disks, RAID ,大概的意思是:廉价的磁盘冗余阵列。 RAID 可以通过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘设备,而这个较大的磁盘不但扩展了储存空间,而且还有数据保护的功能。

RAID会根据等级 (level) 的不同,而使得整合后的磁盘具有不同的功能,基本常见的 level 有以下这几种

 

RAID级别划分

 

RAID 0:磁盘叠加

这种模式一般是使用相同型号与容量的磁盘来组成。这种模式的 RAID 会将磁盘先切出等量的区块, 然后当一个文件需要要写入 RAID 设备时,该文件就会依据区块的大小切割好,然后再依次放到各个磁盘里。由于每个磁盘会交错的存放数据, 因此数据要写入 RAID 时,会被等量的放在各个磁盘上面。
所以说,RAID 0,他的特点就是:
1、磁盘越多RAID设备的容量就越大。
2、容量的总大小是多个硬盘的容量的总和。
3、磁盘越多,写入的效能就越高。
4、如果使用非等大的硬盘,那么当小的磁盘写满后,就直接向空间大的磁盘中写数据了。
5、最少的磁盘数是2个,而且磁盘使用率为100%
他的致使之处就是:万一其中一个磁盘有问题,那么数据就会全部出问题。因为数据是分开存储的。

 

RAID 1:镜像备份

这种模式主要是让同一份数据,完整的保存在不同的磁盘上。由于同一份数据会被分别写入到其他不同磁盘。因此在大量写入 RAID 1 设备的情况下,写入的效能会变的非常差。但如果你使用的是硬件 RAID (磁盘阵列卡) 时,磁盘阵列卡会主动的复制一份而不使用系统的 I/O总线,这对效能影响是不大的。 如果使用软件磁盘阵列,效能就会明显下降了。
RAID 1,他的特点是:
1、保证了数据的安全,
2、RAID 1设备的容量是所有磁盘容量总和的一半
3、在多个磁盘组成RAID 1设备的时候,总容量将以最小的那一颗磁盘为主
4、读取的效能相对增加。这是因为数据在不同的磁盘上面,如果多个进程在读取同一笔数据时,RAID 会自行取得最佳的读取平衡。
5、磁盘数必需是2的整数倍。磁盘利用率为50%
不足之处就是:写入的效能会降低

RAID 5:效能与数据备份的均衡考虑

RAID 5:至少需要三个以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似 RAID 0, 不过每个循环的写入过程中,在每颗磁盘还加入一个校验数据(Parity),这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。

特点:
1、当任何一个磁盘损坏时,都能够通过其他磁盘的检查码来重建原本磁盘内的数据,安全性明显增强。
2、由于有同位检查码的存在,因此 RAID 5 的总容量会是整个磁盘数量减一个。
3、当损毁的磁盘数量大于等于两颗时,那么 RAID 5 的资料就损坏了。 因为 RAID 5 预设只能支持一颗磁盘的损坏情况。
4、在读写效能上与 RAID-0 差不多。
5、最少磁盘是3块,磁盘利用率N-1块
不 足:数据写入的效能不一定增加,因为要写入 RAID 5 的数据还得要经过计算校验码 (parity)。所以写入的效能与系统的硬件关系较大。尤其当使用软件磁盘阵列时,校验码 (parity)是通过 CPU 去计算而非专职的磁盘阵列卡, 因此在数据校验恢复的时候,硬盘的效能会明显下降。
RAID0 RAID1 RAID5三个级别的数据存储流程,大家可以参考下图
RAID 0 1 5

RAID 01或RAID 10

这个RAID级别就是针对上面的特点与不足,把RAID 0和RAID 1这两个结合起来了。
所谓的RAID 01就是: (1)先让磁盘组成 RAID 0 (2)将这 RAID 0 再组 RAID 1。这就是 RAID 0+1
而RAID 10就是:先组成 RAID 1 再组成 RAID 0,这就是RAID 1+0
特点与不足:由于具有 RAID 0 的优点,所以效能得以提升,由于具有 RAID 1 的优点,所以数据得以备份。 但是也由于 RAID 1 的缺点,所以总容量会少一半用来做为备份。

RAID10级别的数据存储流程,大家可以参考下图
RAID 10

由于 RAID5 仅能支持一颗磁盘的损毁,因此还有发展出另外一种等级,就是 RAID 6 ,这个 RAID 6 则使用两颗磁盘的容量作为 parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗,也就是在 RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以恢复回来的。而此级别的RAID磁盘最少是4块,利用率为 N-2。

Spare Disk:热备磁盘

 

他的作用就是:当磁盘阵列中的磁盘有损毁时,这个热备磁盘就能立刻代替损坏磁盘的位置,这时候我们的磁盘阵列就会主动重建。然后把所有的数据自动恢复。而这个或多个热备磁盘是没有包含在原本磁盘阵列等级中的磁盘,只有当磁盘阵列有任何磁盘损毁时,才真正的起作用。

关于理论知识我们就只介绍到这里,当然还可以延伸出多种组合,只要理解了上面的内容,那么其他级别就不难了,无非是多种组合而已。通过上面的讲解, 我相信大家也知道了做磁盘阵列的优点了:1、数据的安全性明显增强,2、读写的效能明显提高,3、磁盘的容量有效扩展。但也别忘记了他的缺点就是成本提 高。但相对于数据而言,我想这点成本也不算什么吧!

 

下面我就以RAID5为例,给大家演示

1、增加硬盘。

add disk
我在虚拟机上新增了6块硬盘,每块是2G。哈哈,这么多只是为了做实验啊!

[root@yufei ~]# ls /dev/sd*
/dev/sda   /dev/sda2  /dev/sdc  /dev/sde  /dev/sdg
/dev/sda1  /dev/sdb   /dev/sdd  /dev/sdf

这里面除了sda是以前的,后面的都是新增加了,当然你也可以通过fdisk -l来查询,其他的都是没有进行过分区的。所以会显示"Disk /dev/sdb doesn’t contain a valid partition table"这样的提示啊!

先拿出三个(sdb,sdc,sdd)来做RAID5,这是做RAID5的最少硬盘数量。但为了安全,我们需要加入sde做热备磁盘。这才是最安全的设置,当然,如果你不加热备也没有关系,RAID5照样能做出来。

特别说明:如果使用分区来创建的话,也是可以的,但不太科学啊!还有一点就是,你可以对分区转换类型(fd),也可以不转换,似乎这个不重要,我测试转换与不转换都是一样的效果。

2、创建RAID设备文件
[root@yufei ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdc but will be lost or
       meaningless after creating array
mdadm: partition table exists on /dev/sdd but will be lost or
       meaningless after creating array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

这时候会在/dev/下创建md文件夹和md5设备文件,而且/dev/md这个文件夹里面还有一个连接文件和一个MD设备的镜像文件

[root@yufei ~]# ls -l /dev/md*
brw-rw----. 1 root disk 9, 5 May 31 00:19 /dev/md5

/dev/md:
total 4
lrwxrwxrwx. 1 root root  8 May 31 00:15 md5 -> ../md127
-rw-------. 1 root root 53 May 31 00:19 md-device-map

我们可以通过下面的命令查看RAID设备的状况

[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Tue May 31 00:19:11 2011
     Raid Level : raid5
     Array Size : 4191232 (4.00 GiB 4.29 GB)
  Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue May 31 00:19:22 2011
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

           Name : yufei:5  (local to host yufei)
           UUID : 69443d97:7e32415d:7f3843c5:4d5015cf
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       3       8       64        -      spare   /dev/sde


这里我们可以把他看作是一个普通的硬盘,只是他是多块硬盘的结合体而已。我们可以对其分区、格式化,然后挂载使用的操作

3、对RAID设备进行分区、格式化、挂载


如果你想对其分区也是可以,分区后的分区名为md5p1 md5p2等等。当然不分区也一样能正常使用,这个就看你的用途了。我这里就不分区了。直接进行格式化。

[root@yufei ~]# mkfs.ext4 /dev/md5
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
262144 inodes, 1047808 blocks
52390 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

如果想要分区你可以这样做

[root@yufei ~]# fdisk /dev/md5

我这里就不分区了

挂载使用

[root@yufei ~]# mount /dev/md5 /mnt
[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   7014960   7335768  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/md5               4125376     73720   3842096   2% /mnt

向里面写入数据文件。

[root@yufei ~]# touch /mnt/testfil1
[root@yufei ~]# touch /mnt/testfil2
[root@yufei ~]# ls /mnt
lost+found  testfil1  testfil2
4、模拟磁盘损坏

我们模拟是/dev/sdb这块硬盘损坏

[root@yufei ~]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5

再查看一下md5的状态

[root@yufei ~]# mdadm -D /dev/md5
前面省略
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty spare   /dev/sdb

我们看到,热备盘现在正在使用,而/dev/sdb是处于损坏状态。

注意一点:当热备盘在顶替损坏盘的时候,RAID设备的性能会明显下降,因为他要进行数据检验与恢复。

再看看里面的文件还存在不?

[root@yufei ~]# ls /mnt
lost+found  testfil1  testfil2
一切正常

下面就是要把损坏的硬盘移除,然后新加硬盘,来充当热备盘。注意:如果此时我不加热备盘的话,当MD5中再有任何一个硬盘损坏的话,数据还是正常的。这个留给大家来测试吧。

5、移除损坏的磁盘
mdadm: hot removed /dev/sdb from /dev/md5
再查看MD5的信息
[root@yufei ~]# mdadm -D /dev/md5
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

发现已经移除了

6、新加热备磁盘
[root@yufei ~]# mdadm /dev/md5 -a /dev/sdf
mdadm: added /dev/sdf
再次查看MD5的情况
[root@yufei ~]# mdadm -D /dev/md5
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       5       8       80        -      spare   /dev/sdf

热备盘已经加上了

[root@yufei ~]# ls /mnt/
lost+found  testfil1  testfil2

 

向RAID中增加存储硬盘

如果说,我现在已经做好的RAID空间还是不够用的话,那么我们可以向里面增加新的硬盘,来增加RAID的空间,默认的情况下,我们向RAID中增加的磁盘,会被默认当作热备盘的,如何把热备盘加入到RAID中呢?下面看演示。

我们接着上面的继续操作

[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Tue May 31 19:46:20 2011
     Raid Level : raid5
     Array Size : 4191232 (4.00 GiB 4.29 GB)
  Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue May 31 19:49:07 2011
省略
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       5       8       80        -      spare   /dev/sdf

向RAID中增加一块硬盘   

[root@yufei ~]# mdadm /dev/md5 -a /dev/sdg
mdadm: added /dev/sdg
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Tue May 31 19:46:20 2011
     Raid Level : raid5
     Array Size : 4191232 (4.00 GiB 4.29 GB)
  Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
   Raid Devices : 3
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Tue May 31 19:53:53 2011
省略
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       5       8       80        -      spare   /dev/sdf
       6       8       96        -      spare   /dev/sdg

我们新加的磁盘变成了热备盘,还没有加入到RAID的存储盘中,我们需要让其中的一个热备磁盘起存储作用。看看如何来操作。

[root@yufei ~]# mdadm -G /dev/md5 -n4
mdadm: Need to backup 3072K of critical section..

[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Tue May 31 19:46:20 2011
     Raid Level : raid5
     Array Size : 4191232 (4.00 GiB 4.29 GB)
  Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Tue May 31 20:02:34 2011
省略
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd
       6       8       96        3      active sync   /dev/sdg

       5       8       80        -      spare   /dev/sdf

我们看到RAID的存储盘已经增加了一个了,由3个变成了4个,但注意这里的一条信息Array Size : 4191232 (4.00 GiB 4.29 GB),虽然我们已经加入了一块硬盘,但此RAID的空间并没有增大,下面就是要把RAID的空间扩展

resize2fs /dev/md5

先来看看这个md5里面的数据

[root@yufei ~]# ls /mnt
lost+found  testfile1  testfile2

[root@yufei ~]# resize2fs /dev/md5
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/md5 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/md5 to 1571712 (4k) blocks.
The filesystem on /dev/md5 is now 1571712 blocks long.

[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Tue May 31 20:21:36 2011
     Raid Level : raid5
     Array Size : 6286848 (6.00 GiB 6.44 GB)
  Used Dev Size : 2095616 (2046.84 MiB 2145.91 MB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Tue May 31 20:26:15 2011
以下省略

这时候,我们就看到Array Size : 6286848 (6.00 GiB 6.44 GB)就增加了2G了

[root@yufei ~]# ls /mnt
lost+found  testfile1  testfile2

而且里面的数据也是正常的


开机挂载RAID设备

为了下次开机还能正常使用我们的RAID设备,我们还需要做以下事情

1、把挂载的信息写入fstab

[root@yufei ~]# vim /etc/fstab
加入下面的内容
/dev/md5                /mnt                    ext4    defaults        0 0
[root@yufei ~]# mount -a

没有错误,那说明我们没有写错哦!

2、把我们的RAID信息写入配置文件

我们先看一下/etc/mdadm.conf文件的内容

[root@yufei ~]# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all

里面已经有了一些内容,但没有RAID的相关信息,所以我们要把RAID的相关信息写入此文件中,否则在下次开机RAID设备就不起作用了。

[root@yufei ~]# mdadm -D -s >> /etc/mdadm.conf
[root@yufei ~]# cat /etc/mdadm.conf
# mdadm.conf written out by anaconda
MAILADDR root
AUTO +imsm +1.x -all
ARRAY /dev/md5 metadata=1.2 spares=1 name=yufei:5 UUID=69443d97:7e32415d:7f3843c5:4d5015cf

RAID信息已经写入了。注意,如果系统中有多个RAID的话,此命令会把系统中所有的RAID信息全部收集并写入此文件。所以,当用>>来追加内容的时候,你可能需要根据情况来修改。

3、重新启动系统测试看是否成功

重新启动后,查看内容

[root@yufei ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             15118728   7015236   7335492  49% /
tmpfs                   255784         0    255784   0% /dev/shm
/dev/md5               4125376     73720   3842096   2% /mnt
[root@yufei ~]# ls /mnt
lost+found  testfil1  testfil2

一切正常

 

RAID设备的删除

这个在网上很多的资料都不是正确的移除方法,今天我就给大家详细说一下。

网上很多教程一般都是这样的步骤

umount卸载RAID设备

编辑配置文件包括

/etc/mdadm.conf

/etc/fstab

停止RAID设备

mdadm -S /dev/md5

到这里就结束了,如今在RHEL6的系统上,你会发现仅上面的步骤是完全不行的,RHEL6系统重新启动后,他会自动创建/dev/md127(这 里不同级别数字会不同)这样的文件,而且以前在RAID里面的设备,你是不能使用的。如果你遇到这样的情况的话,就说明我们做的RAID没有彻底删除。那 么下面就看看我是如何实现彻底删除的。

1、umount卸载RAID设备

[root@yufei ~]# umount /dev/md5

2、停止RAID设备

[root@yufei ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5

这里顺便给大家讲一下设备停止后如何开启,算是插曲啊。

[root@yufei ~]# mdadm -A -s /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

在停止前,你要用再查看一下RAID里面的硬盘信息,因为后面会用到这个,很关键哦!

[root@yufei ~]# mdadm -D /dev/md5
    Number   Major   Minor   RaidDevice State
       3       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       5       8       80        -      spare   /dev/sdf

OK,现在再停止一次

[root@yufei ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5

3、移除RAID里面的磁盘(这是关键的一步,而很多教程上都没有写)

删除RAID里面的所有磁盘

这一步,一定要把RAID停止后才能执行,否则会出现下面的错误提示

mdadm: Couldn’t open /dev/sde for write – not zeroing

[root@yufei ~]# mdadm --misc --zero-superblock /dev/sde
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdc
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdd
[root@yufei ~]# mdadm --misc --zero-superblock /dev/sdf

OK,这时候就把RAID里面的所有磁盘删除掉了。

4、删除相关配置文件里面的RAID信息

[root@yufei ~]# vim /etc/mdadm.conf

把我们增加的这一行删除

ARRAY /dev/md5 metadata=1.2 spares=1 name=yufei:5 UUID=69443d97:7e32415d:7f3843c5:4d5015cf
[root@yufei ~]# vim /etc/fstab
把我们增加的这一行删除
/dev/md5                /mnt                    ext4    defaults        0 0

经过这四步就完全删除RIAD了。重新启动,也不会有raid的相关内容了。

如果你想做得更熟练的话,建议你把raid5 raid0 raid1 raid5+raid0都做一边。我想这也不是什么难事了。关于mdadm的命令参数,大家可以通过查看帮助来获得。