在RHEL6系统上配置磁盘阵列(RAID)

磁盘阵列全名是: 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 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级别的数据存储流程,大家可以参考下图

 

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

 

Spare Disk:热备磁盘

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

 

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

 

 

 

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

1、增加硬盘。

我在虚拟机上新增了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的命令参数,大家可以通过查看帮助来获得

posted @ 2011-11-16 17:21  google4y  阅读(367)  评论(0编辑  收藏  举报
不在家,就在公司,不在公司,就在去公司的路上,無家無根,如風如萍,只有漂