Linux学习笔记之 RAID介绍,及centos6上软RAID的实现

RAID:Redundant Arrays of Inexpensive Disk 廉价冗余磁盘阵列,通过对多块硬盘按不同的方式组织起来,来提高IO能力,或提高耐用性等。RAID可分为软RAID和硬RAID,软RAID通过软件实现,硬RAID使用专业的RAID卡和磁盘组成。


RAID级别:多块磁盘组织在一起的工作方式有所不同。常见的RAID级别有RAID0,RAID1,RAID2,RAID3,RAID4,RAID5,RAID6,RAID10,RAID01。

RAID0:striping 条带化数据,存储到不多个硬盘

    读写性能均有提升

    可用空间:N*磁盘空间(受最小的磁盘空间的限制)

    无容错能力,任何一块设备算坏,都会导致数据丢失

    最少磁盘数:2

wKioL1XkRT7T_sP1AACfFmfEk40967.jpg

RAID1:镜像RAID

    读性能提升、写性能略有下降;

    可用空间:容量较小的磁盘的容量

    有冗余能力,单块磁盘损坏,不会导致数据丢失

    最少磁盘数:2

wKioL1XkRk-DOpYqAAOBEydLncw446.jpg

RAID4:用一块磁盘专门存储校验码

    读,写性能均有提升

    可用空间:(N-1)*最小磁盘的容量

    有容错能力:可以坏1块磁盘

    最少磁盘数:3

wKiom1XkRJzTIk5EAAEHe7YYfzY840.jpg

RAID5:

    读,写性能均有提升

    可用空间:(N-1)*最小磁盘的容量

    有容错能力:可以坏1块磁盘

    最少磁盘数:3

wKiom1XkRQORzQdqAABzgHF6ghg795.gif

RAID6:交验信息存储两份:会导致更多磁盘空间的浪费

    读、写性能提升

    可用空间:(N-2)*最小磁盘的容量

    有容错能力:最多可有2块磁盘损坏

    最少磁盘数:4

  spacer.gif wKiom1XkRSXzqaGiAAEIscRt75Y460.jpg

RAID10:

    读写系能均有提升

    可用磁盘空间:50%

    有容错能力:没组最多坏一块盘

    最少磁盘数:4

wKioL1XkR7PCV9Z1AAC5uhtKhSE446.jpg

其它:

JBOD:Just a bunch of disks. 

功能:将多块磁盘的空间合并一个大的连续空间使用;

可用空间:sum(S1,S2,...)

spacer.gif

CentOS 6上的软件RAID的实现

    结合内核中的md(multi devices)

mdadm:模式化的工具

    命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>

    支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;

模式:

    创建:-C

    装配: -A

    监控: -F

    管理:-f, -r, -a

<raiddevice>: /dev/md#

<component-devices>: 任意块设备

-C: 创建模式

    -n #: 使用#个块设备来创建此RAID;

    -l #:指明要创建的RAID的级别;

    -a {yes|no}:自动创建目标RAID设备的设备文件;

    -c CHUNK_SIZE: 指明块大小;

    -x #: 指明空闲盘的个数;


练习:创建一个10G可用空间的RAID5,留一个空闲盘做热备

第一步:使用fdisk命令划分4个5G的分区,3个组成RAID5,另外一个做位空闲盘

root@centos6 ~]# fdisk /dev/sdb 

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

Command (m for help): n    #创建新分区

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-15665, default 1): 

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +5G

...

...

重复此上步骤,直至创建好4个所需的分区:同时需要注意将分区id改为fd格式,可以参照如下步骤使用fdisk命令来修改

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

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

Command (m for help): t    #x修改分区id

Partition number (1-5): 1

Hex code (type L to list codes): fd     #选择RARID所需的分区id

Command (m for help): w    #保存修改

The partition table has been altered!


第二步:格式化分区

所有的分区都已经创建好,效果如下

[root@centos6 ~]# fdisk -l /dev/sdb    #查看分区情况

Disk /dev/sdb: 128.8 GB, 128849018880 bytes

255 heads, 63 sectors/track, 15665 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x067824c0

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         654     5253223+  fd  Linux raid autodetect

/dev/sdb2             655        1308     5253255   fd  Linux raid autodetect

/dev/sdb3            1309        1962     5253255   fd  Linux raid autodetect

/dev/sdb4            1963       15665   110069347+   5  Extended

/dev/sdb5            1963        2616     5253223+  fd  Linux raid autodetect

[root@centos6 ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{1,2,3,5} 

        mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.

 

[root@centos6 ~]#watch -n1 cat /proc/mdstat    #查看mad的状态

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

Personalities : [raid6] [raid5] [raid4] 

md0 : active raid5 sdb3[4] sdb5[3] sdb2[1] sdb1[0](F)

      10498048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]

      [==================>..]  recovery = 91.5% (4804320/5249024) finish=0.1min speed=72603K/sec     

unused devices: <none>

root@centos6 ~]# mkfs.ext4 /dev/md0

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

657072 inodes, 2624512 blocks

131225 blocks (5.00%) reserved for the super user

...此处省略N行信息

This filesystem will be automatically checked every 30 mounts or

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


第三步:挂载检验RAID是否成功创建


[root@centos6 ~]# mkdir /mnt/raid5    #创建挂载点

[root@centos6 ~]# mount /dev/md0 /mnt/raid5/    #挂载RAID

[root@centos6 ~]# mdadm -D /dev/md0

/dev/md0:

 ... 此处省略N行信息

       0       8       17        0      active sync   /dev/sdb1

       1       8       18        1      active sync   /dev/sdb2

       4       8       19        2      active sync   /dev/sdb3

       3       8       21        -      spare   /dev/sdb5

[root@centos6 ~]# ls -l /mnt/raid5/

total 16

drwx------ 2 root root 16384 Aug 30 03:57 lost+found

[root@centos6 ~]# df -lh /mnt/raid5/

Filesystem      Size  Used Avail Use% Mounted on

/dev/md0        9.8G   23M  9.3G   1% /mnt/raid5

如果要让此文件系统自动挂载,同样需要添加到/etc/fstab中

模拟RAID5磁盘损坏的,空闲盘会自动补充到RIAD5中去

  • mdadm -D /dev/md0 查看当前md状态

spacer.gif

[root@centos6 ~]# mdadm /dev/md0 -f /dev/sdb5  #将sdb5设置为faulty(损坏)

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

  • 此时sdb1会自动添加到RAID5中去,以下是正在recovery的状态


spacer.gif

  • 恢复完成后:再度查看,RAID已经完全恢复正常状态:


spacer.gif

  • 此时,可以移除坏掉的磁盘sdb5,重新添加新的可用分区做位RAID5的空闲盘


[root@centos6 ~]# mdadm /dev/md0 --remove /dev/sdb5    #从RAID中移除sdb5

mdadm: hot removed /dev/sdb5 from /dev/md0

root@centos6 ~]# mdadm /dev/md0 --add /dev/sdb6    #将sdb6添加到RIAD中去

mdadm: added /dev/sdb6

其它命令

-D:显raid的详细信息;

mdadm -D /dev/md#

管理模式:

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

-a: 添加磁盘

-r: 移除磁盘


观察md的状态:

cat /proc/mdstat

停止md设备:

mdadm -S /dev/md#

watch命令:

-n #: 刷新间隔,单位是秒;

watch -n# 'COMMAND'

你可能感兴趣的:(raid介绍)