RAID 概述

RAID 即廉价冗余磁盘阵列( Redundant Array of Inexpensive Disk )的简称,通过该技术可以将多个磁盘组成一个阵列整体,而应用时可以作为单个磁盘使用。 RAID 磁盘阵列根据其使用的技术不同,可用于提高数据读写效率、提高数据冗余(备份),当阵列中的一个磁盘发生故障时,可以通过校验数据从其他磁盘中进行恢复,大大增强了应用系统数据的读写性能及可靠性。

较常见的 RAID 技术包括如下几个级别:

  RAID 0 :最基本的一种阵列方式,通过简单的将多个磁盘(最少 2 块)组成到一起,作为一个大磁盘使用。存取数据时,通过将数据分段同时写入到不同的磁盘中,大大提高了效率。但是这种方式没有数据冗余,其中任何一个磁盘坏了以后,都可能导致数据丢失。

  RAID 1 :即磁盘镜像技术,需要最少 2 块磁盘(磁盘利用率: 1/n )。这种方式将数据同时写入到阵列中的多块磁盘中,不同磁盘中的数据互为镜像。因此,其中任何一个磁盘坏了以后,数据不会丢失。

  RAID 5 :通过引入数据校验技术来保证数据的安全,需要最少 3 块磁盘(磁盘利用率: n-1 )。

这种方式并不使用固定的某块磁盘存放校验数据,而是分段存储在各个磁盘中。因此,其中任何一个磁盘坏了以后,也可以根据其他磁盘中的校验数据进行恢复。

由于 RAID5 阵列技术既通过数据冗余增强了可靠性,又通过多块磁盘同时写入数据提高了效

率,一直以来受到广泛的应用。

未使用硬件磁盘卡方式实现的 RAID 技术,通常称为软 RAID 技术。本文将在 RHEL5 系统中,使用不同磁盘中的多个分区,配置实现 RAID 5 磁盘阵列。

 

9.2  构建使用软 RAID 磁盘阵列

在 RHEL5 系统中,配置软 RAID 阵列可以通过安装 mdadm 软件包实现。该软件包一般为系

统默认安装,若检查没有安装的话,从 RHEL5 系统光盘中查找安装即可。

[root@localhost ~]# mount /dev/cdrom /media/cdrom/

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# rpm -ivh /media/cdrom/Server/mdadm-2.5.4-3.el5.i386.rpm

Preparing...        ########################################### [100%]

   1:mdadm       ########################################### [100%]

[root@localhost ~]# rpm -qi mdadm | grep "Summary"

Summary     : mdadm 控制 Linux md 设备 ( 软件 RAID 阵列 )

 

下面将以 RAID5 磁盘阵列为例,讲解软磁盘阵列的配置使用方法。

 

  准备用于 RAID 阵列的分区

用于组成 RAID 阵列的各个分区应该位于不同的磁盘设备中,否则实用价值不大。各分区的容

量最好也相同,必要时可以将整个硬盘划分为一个分区。

为 Linux 服务器添加 4 块 SCSI 硬盘,并使用 fdisk 工具各划分出一块 2GB 的分区,依次为:

/dev/sdb1 、 /dev/sdc1 、 /dev/sdd1 、 /dev/sde1 。分区前请注意确保没有别的程序正在使用对应的磁盘。下一小节中将以这 4 个分区为例( RAID 5 需要至少 3 块磁盘或分区)讲解 RAID5 磁盘阵列的创建方法。

对于上述分区还应该将其类型 ID 更改为“ fd ”,对应为“ Linux raid autodetect ”,表示支持用于 RAID 磁盘阵列。

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

……

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-522, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-522, default 522): +2048M

Command (m for help): t

Selected partition 1

Hex code (type L to list codes): fd

Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p

……

   Device Boot     Start      End      Blocks    Id   System

/dev/sdb1            1        250     2008093+  fd  Linux raid autodetect

 

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]#

 

创建好三个分区以后,执行“ partprobe ”重新探测分区表(或重启系统),验证分区类型和容量等信息。

[root@localhost ~]# partprobe

[root@localhost ~]# fdisk -l /dev/sd[b-e] | grep "^/dev/sd"

/dev/sdb1       1       250     2008093+  fd  Linux raid autodetect

/dev/sdc1       1       250      2008093+  fd  Linux raid autodetect

/dev/sdd1       1       250     2008093+  fd  Linux raid autodetect

/dev/sde1       1       250     2008093+  fd  Linux raid autodetect

 

  创建 RAID 设备

使用 mdadm 工具可以组合多个 RAID 分区作为一个磁盘阵列,阵列设备文件名习惯上使用

“ /dev/md0 ”、“ /dev/md1 ”等。

[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n4 -l5 /dev/sd[b-e]1

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 64K

mdadm: /dev/sdb1 appears to be part of a raid array:

    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: /dev/sdc1 appears to be part of a raid array:

    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: /dev/sdd1 appears to be part of a raid array:

level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: /dev/sde1 appears to be part of a raid array:

    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009

mdadm: size set to 2008000K

Continue creating array? y

mdadm: array /dev/md0 started.

[root@localhost ~]#

在上述命令操作中,“ /dev/md0 ”为新建的 RAID 阵列设备文件名,“ /dev/sd[bcd]1 ”表示此阵列将使用 /dev/sdb1 、 /dev/sdc1 、 /dev/sdd1 这三个分区。其他各部分选项、参数的含义如下:

  -C ,等同于 --create :创建一个新的阵列设备

  -v ,等同于 --verbose :执行过程中输出细节信息

  -a ,等同于 --auto= :指定参数为 yes 时,表示若对应的设备文件不存在则自动创建

  -n ,等同于 --raid-devices= :用于组成阵列的分区设备个数,“ -n3” 表示为 3 个

  -l ,等同于 --level= :使用的 RAID 级别,“ -l5” 表示为 RAID 5

关于 mdadm 命令更多选项的使用,请参考“ man mdadm ”帮助信息。

创建好 md0 阵列设备后,将自动被激活,执行“ cat /proc/mdstat ”可以观察阵列设备的运行状态。

[root@localhost ~]# ls -l /dev/md0

brw------- 1 root root 9, 0 07-25 09:03 /dev/md0

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]

      6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

其中,“ [4/4] ”部分中的第一个“ 4 ”表示成员设备个数,后边的“ 4 ”表示当前的活动设备个数,“ UUUU ”对应为成员设备的状态。例如,若出现“ [4/3][UUU_] ”的信息时,则表示第 4 个成员设备( /dev/sde1 )出现故障了。

 

  在 RAID 设备中建立文件系统

创建好磁盘阵列设备文件“ /dev/md0 ”以后,就可以在该设备中建立文件系统了。在 RHEL5系统中,可以使用 mkfs 命令格式化该设备,将其作为 ext3 文件系统来使用。

[root@localhost ~]# mkfs -t ext3 /dev/md0

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

753664 inodes, 1506000 blocks

75300 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1543503872

46 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

  挂载并使用文件系统

创建挂载点目录“ /mdata ”,并将上一小节中建立好的文件系统挂载到该目录,即可正常使用。  

[root@localhost ~]# mkdir /mdata

[root@localhost ~]# mount /dev/md0 /mdata

[root@localhost ~]# df -T | grep "md0"    // 验证挂载的“ /mdata ”文件系统

/dev/md0      ext3     5929360    142976   5485184   3% /mdata

除去一个成员设备作为校验盘以后,磁盘阵列的有效存储空间为 3 个成员设备的容量之和(大约为 2GB × 3 = 6GB )。

如果希望在每次开机后自动挂载该阵列设备,可以在“ /etc/fstab ”文件中添加相应设置。

[root@localhost ~]# vi /etc/fstab

/dev/md0      /mdata        ext3   defaults   0  0

 

 

  阵列的管理及设备恢复

 

  基本管理操作

1. 扫描或查看磁盘阵列信息

使用 mdadm 命令时,“ -D ”选项相当于“ --detail ”,表示显示扫描结果的详细内容;“ -s ”

选项相当于“ --scan ”,用于扫描阵列设备。

未指定阵列设备文件时,可以显示出当前系统中的阵列配置信息、 RAID 设备列表。

[root@localhost ~]# mdadm -vDs

ARRAY /dev/md0 level=raid5 num-devices=4

UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259

   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

当指定阵列设备作为参数时,可以输出指定阵列设备的详细参数,包括活动设备个数、失效设备个数、更新时间、列表成员设备位置等。

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

/dev/md0:

        Version : 00.90.03

  Creation Time : Sat Jul 25 11:23:07 2009

     Raid Level : raid5

     Array Size : 6024000 (5.74 GiB 6.17 GB)

    Device Size : 2008000 (1961.27 MiB 2056.19 MB)

   Raid Devices : 4

  Total Devices : 4

Preferred Minor : 0

    Persistence : Superblock is persistent

    Update Time : Sat Jul 25 11:26:01 2009

          State : clean

 Active Devices : 4

Working Devices : 4

 Failed Devices : 0

  Spare Devices : 0

         Layout : left-symmetric

     Chunk Size : 64K

           UUID : 35bcffa1:cdc5ba41:0c5b5702:e32a3259

         Events : 0.6

    Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1

       1       8       33        1      active sync   /dev/sdc1

       2       8       49        2      active sync   /dev/sdd1

       3       8       18        3      active sync   /dev/sde1

 

2. 创建配置文件 mdadm.conf

mdamd 的配置文件为“ /etc/mdadm.conf ”,该文件只是用来方便用户管理和使用,缺少此文件并不会影响磁盘阵列的功能。在配置文件中可以保存多个磁盘阵列的配置信息。配置文件中的基本信息可以通过前面讲过的“ mdadm -vDs ”命令获得。

[root@localhost ~]# vi /etc/mdadm.conf

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=4

UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259 

devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1

CREATE owner=root group=root mode=0640

在上述文件中, “ ARRAY ”、“ UUID ” “ devices ”部分是位于同一行中的内容,最后一行中的“ CREATE ”用于设置自动创建阵列设备文件的属主、属组及默认权限。关于 mdadm.conf配置文件中更多配置项的使用,可以参考“ man mdadm.conf ”帮助信息。

3. 启动 / 停止 RAID 阵列

在确保没有相关程序读写磁盘阵列设备的情况下,可以停止阵列设备。只需使用 mdadm命令结合“ -S ”选项(等同于“ --stop ”选项)即可。执行该操作将会禁用对应的阵列设备,释放相关资源。

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

mdadm: stopped /dev/md0

结合“ -A ”选项(等同于“ --assemble ”选项)可以重新组合对应的磁盘阵列设备。

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

mdadm: /dev/md0 has been started with 4 drives.

[root@localhost ~]# mount /dev/md0 /mdata/

 

  设备恢复操作

1. 模拟阵列设备故障

对于运行中的磁盘阵列,可以结合 mdadm 命令的“ -f ”选项(等同于“”选项)用于模拟成员设备故障,例如可将阵列中的“ /dev/sdb1 ”标记为故障设备。

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

mdadm: set /dev/sde1 faulty in /dev/md0

当阵列中的某个成员设备出现故障时,阵列会将其标记为失活状态。此时通过“ cat/proc/mdstat ”可以观察到丢失出现故障的设备( /dev/sde1 )。

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3](F) sdd1[2] sdc1[1] sdb1[0]

      6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

 

2. 更换故障设备,并恢复数据

对于出现故障的设备,可以结合“ -r ”选项将其移除,然后换上正常的设备,结合“ -a ”选项重新添加到阵列中即可。

[root@localhost ~]# mdadm /dev/md0 -r /dev/sde1

mdadm: hot removed /dev/sde1     // 移除故障设备

[root@localhost ~]# mdadm /dev/md0 -a /dev/sde1

mdadm: re-added /dev/sde1      // 重新加入正常设备

RAID5 磁盘阵列能够在较短时间内进行重构和数据恢复,当需要恢复的数据较多时,可以在此期间观察到阵列状态的恢复进度。

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

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]

      6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

      [===>.................]  recovery =  16.3% (328192/2008000) finish=2.6min

speed=10586K/sec

unused devices: <none>

待数据恢复完成以后,再次查看阵列状态即显示为正常了。

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0] 
6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU] 
unused devices: <none>

转载于:https://blog.51cto.com/gm100861/794271