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
RAID1:镜像RAID
读性能提升、写性能略有下降;
可用空间:容量较小的磁盘的容量
有冗余能力,单块磁盘损坏,不会导致数据丢失
最少磁盘数:2
RAID4:用一块磁盘专门存储校验码
读,写性能均有提升
可用空间:(N-1)*最小磁盘的容量
有容错能力:可以坏1块磁盘
最少磁盘数:3
RAID5:
读,写性能均有提升
可用空间:(N-1)*最小磁盘的容量
有容错能力:可以坏1块磁盘
最少磁盘数:3
RAID6:交验信息存储两份:会导致更多磁盘空间的浪费
读、写性能提升
可用空间:(N-2)*最小磁盘的容量
有容错能力:最多可有2块磁盘损坏
最少磁盘数:4
RAID10:
读写系能均有提升
可用磁盘空间:50%
有容错能力:没组最多坏一块盘
最少磁盘数:4
其它:
JBOD:Just a bunch of disks.
功能:将多块磁盘的空间合并一个大的连续空间使用;
可用空间:sum(S1,S2,...)
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状态
[root@centos6 ~]# mdadm /dev/md0 -f /dev/sdb5 #将sdb5设置为faulty(损坏)
mdadm: set /dev/sdb5 faulty in /dev/md0
此时sdb1会自动添加到RAID5中去,以下是正在recovery的状态
恢复完成后:再度查看,RAID已经完全恢复正常状态:
此时,可以移除坏掉的磁盘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'