RAID特性详解,及RAID创建详细操作
写在前面–命令总览:创建RAID:mdamd -C [-l级别 -n盘数量 -cchunk -a是否询问]
查看RAID: mdadm –D 停止RAID:mdadm –S 管理RAID:-f标记损坏 -r删除 -a添加
watch 文件:/proc/mdstat 操作简要流程在尾部
RAID各级特性
RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵的硬盘。
RAID优点如下:
把多块硬盘组合成更大的硬盘当做一块硬盘使用
提高IO能力:磁盘并行读写
提高耐用性:通过磁盘冗余来实现
拥有独立内存和自我供电能力,在突然断电时能靠电池把内存中的数据写入磁盘,一定程度上防止数据丢失。
RAID的实现方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
上述两种方式:RAID配置在BIOS中
software RAID:但现在几乎没人用了
RAID级别:level,多块磁盘组织在一起的工作方式不同,而不是性能好坏之分
单一类型:
RAID-0:条带卷。chunk
假如,有两块硬盘A和B,把数据存储到这两块硬盘上。就把数据切割成到四数据块,把数据块1存储到A盘上,数据块2存储到B盘上,把数据块3再存储到A盘上,把数据块4存储到B盘上。这样A和B盘可以同时存储,整个数据存储的时间就减半了。相同的,读取时从两盘一起读数据,读取的时间也减半了。
但是,假如一块磁盘坏掉的可能性为1/4,那么两块盘坏掉一块的概率就为1/2,坏掉任何块盘都会导致整个数据的损坏,所以使用磁盘越多,虽然IO能力越强,但风险也越大。上述数据块1,数据块2等称为chunk。这种方式一般存放不是很重要的数据。
特性:
读写能力提升
可用空间:n*min 假如有三块硬盘分别为10G,12G,15G 大小,可用空间为3x10G=30G。
无容错(冗余)能力,反而增加风险
需要磁盘数量:2块以上
RAID-1:镜像卷。
把数据分别写入A和B两块盘内,相当于把数据存了两份,这两个盘内的数据完全一样。这样,即便有一块盘坏掉,另一块盘也能保存好完成数据。读取是从两块盘一起读,所以读取能力上升。但是写入数据时需要把数据写两遍,所以写入能力下降。
特性:
写性能下降
读性能提升
可用空间:1*min,只有一块盘有用,其他盘只是做备份
有容错能力
最少磁盘数:2
RAID-4:校验盘技术。假如有四块盘,拿三块盘A,B,C分别存储小数据块chunk,拿最后一块盘D做校验盘,存储前面三块盘数据的校验码(校验码可以理解为前三块盘数据的总和但占用空间却没增加)。这样就允许坏一块盘,无论任何一块盘坏掉,通过另外三块盘都可以找回丢失的数据。但是校验盘D存储数据多,压力大,而且前ABC三块盘任何一块坏掉,校验盘D就不得不扛起那块坏掉的盘的工作,压力很大,所以坏掉的可能性最大。所以通常就为校验盘D做一块备胎盘E,E时刻监视D的一举一动,哪一天D坏掉了,备胎E就会自动自告奋勇,挑起大梁。
RAID-5:三块盘轮流做校验盘。
比如第一轮存储把chunk1存储到A上,chunk2存储到B上,chunk3存储到C上,校验码存储到D上。第二轮存储校验码存到C上,chunk存储到ABD上,第三轮存储把校验码存储到B上,chunk存储到ACD上,第四轮把校验码存储到A上,以此类推。这样就不会有哪一块盘的压力特别大了。
读写性能提升
可用空间:n-1,相当于一块拿来做校验盘
容错能力:1块盘
最少磁盘数:3
RAID-6:
拿两个盘做校验盘,这样可以允许坏两块磁盘,但效果不如RAID10
读写性能提升
可用空间:n-2
容错能力:2块盘
最少磁盘数:4
混合类型:
RAID-10:先做1再做0,先组合下层,才能组合上层
假如6个盘分成三组,AB为一组,CD二组,EF三组。简称把数据分成三个chunk,每一组一个chunk,
读写性能提升。一组拿到chunk后把自己的chunk分别存到A,B盘上,这样A和B就互为镜像了。这样每个小组内都允许坏掉一块盘,比如ACE同时坏掉都没事。
可用空间:1/2
有容错能力:每组只能坏一块
最少磁盘数:4
RAID-01:
例如把6个盘分成两组,ABC为第一组,DEF为第二组。把数据给第一组,再把相同的数据给第二组。第一组拿到数据后把数据切成三个chunk,分别存储到A、B、C、上。第二组拿到数据后也执行与第一组相同的操作。表面看两组互为镜像,但由于组拿到数据后又进行了切割,两个组的切割方式几乎不可能完全相同,所以如果 第一组和第二组都各自坏掉一块盘,数据基本就找不回来了,所以只允许有一组出错,一组内全部坏掉都没事,但不允许两组同时出现坏盘。
RAID-50:至少6块盘,最多坏一个
RAID-7:
JBOD:just a bunch of disks
最简单的将多块磁盘空间合并成一个大的可用空间
可用空间:sum,不论是否一样大
无容错能力
常用级别:RAID-0,RAID-1,RAID-10,RAID-50,JBDO
一般用10,和50,或0,其他不好用
centos6上软RAID的实现;
结合内核中的md(multi device)
mdadm:模式化工具
支持LINEAR, RAID0,RAID4,RAID5,RAID6,RAID10
创建:-C 查看 –D 管理-f,-r,-a 停用,删除-S 装配-A 监控-F
-C:创建RAID
mdadm –C /dev/md0 –l 5 –n 3 –x 1 –c 128K -a yes /dev/sda{5,6,7}
-n #:使用#块设备创建此RAID
-l #:指明RAID级别
-a {yes,no}:自动创建目标RAID的设备的设备文件
-c chunk_size:指明块大小
-x#:指明空闲盘的个数
-D:显示raid的详细信息
mdadm -D /dev/md0
观察md状态:
cat /proc/mdstat
watch命令:
watch –n1 \’command\’
watch -n1 \’cat /proc/mdstat\’
管理模式:
-f:标记磁盘为损坏
mdadm /dev/md0 -f /dev/sda6
-a添加磁盘
mdadm /dev/md0 -a /dev/sda5
-r移除磁盘
mdadm /dev/md0 -r /dev/sda5
-S停止,删除md设备
mdadm -S /dev/md0 ———删除md0
下面为创建RAID5的详细过程:
[root@localhost ~]# mdadm -C /dev/md0 -l 5 -n 3 -x 1 -c 128K -a yes /dev/sda{7,8,9,10}
mdadm: /dev/sda7 appears to contain an ext2fs file system —————-创建/dev/md0
size=2099724K mtime=Thu Jan 1 08:00:00 1970
mdadm: largest drive (/dev/sda9) exceeds size (2097664K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]
4195328 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
[root@localhost ~]# mke2fs -t ext4 /dev/md0 ———–格式化md0
[root@localhost ~]# mkdir /mydata
[root@localhost ~]# mount /dev/md0 /mydata
[root@localhost ~]# mdadm -D /dev/md0 —-可以看到一共有4块设备组成/dev/sda{7,8,9}和/dev/sda10
[root@localhost ~]# mdadm /dev/md0 -f /dev/sda7 ——–把/dev/sda7标记损坏
mdadm: set /dev/sda7 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
Number Major Minor RaidDevice State
3 8 10 0 spare rebuilding /dev/sda10
1 8 8 1 active sync /dev/sda8 ——–可看到/dev/sda10自动替换到了
—————————/dev/sda7的位置,正在同步数据
4 8 9 2 active sync /dev/sda9
0 8 7 – faulty /dev/sda7
[root@localhost ~]# mdadm /dev/md0 -f /dev/sda8 —–再标记坏一块盘
mdadm: set /dev/sda8 faulty in /dev/md0
[root@localhost ~]# cd /mydata
[root@localhost mydata]# ll
总用量 16
drwx——. 2 root root 16384 12月 20 17:11 lost+found ————-原来数据还能查看
[root@localhost mydata]# mdadm /dev/md0 -r /dev/sda7 ———移除/dev/sda7
mdadm: hot removed /dev/sda7 from /dev/md0
[root@localhost mydata]# mdadm /dev/md0 -r /dev/sda8
mdadm: hot removed /dev/sda8 from /dev/md0
[root@localhost mydata]# mdadm -D /dev/md0 ——发现只剩两块盘
………………………………………………..
Number Major Minor RaidDevice State
3 8 10 0 active sync /dev/sda10
2 0 0 2 removed
4 8 9 2 active sync /dev/sda9
[root@localhost mydata]# mdadm /dev/md0 -a /dev/sda7 ——-/dev/sda7加上去
mdadm: added /dev/sda7
[root@localhost mydata]# mdadm -D /dev/md0 ———-/dev/sda7添加成功
Number Major Minor RaidDevice State
3 8 10 0 active sync /dev/sda10
5 8 7 1 spare rebuilding /dev/sda7
4 8 9 2 active sync /dev/sda9
下面为创建RAID5的简要过程:
fdisk /dev/sda — 创建4个5G分区—用t,设备号即数字—-把磁盘类型改写fd,RAID用的磁盘类型
cat /proc/mdstat ———此文件可查看RAID设备的信息
mdadm -C /dev/md0 -a yes -n 3 -l 5 /dev/sda{5,6,7,8,}—– 创建一个名为md0的RAID
mke2fs -t ext4 /dev/md0 ————-把RAID格式化成ext4格式
mount /dev/md0 /mydata ———-把RAID挂载至 /mydata目录下
mount ———-查看是否挂载成功
df –lh ———查看磁盘信息
blkid /dev/md0 ———–查看md0的信息
mdadm -D /dev/md0 ————查看md0的详细信息
mdadm /dev/md0 -f /dev/sda5———损坏一块 损坏RAID md0 上的一块盘
watch -n1 \’cat /proc/mdstat\’ ———-监控这个文件,随时掌握RAID的信息
mdadm -D /dev/md0 ———-查看md0的详细信息
mdadm /dev/md0 -f /dev/sda6–再损坏一块盘
mdadm -D /dev/md0 —————查看md0的详细信息,发现依然能访问挂载点
mdadm /dev/md0 -r /dev/sda5 ——-移除坏掉的盘
mdadm /dev/md0 -r /dev/sda6
mdadm -D /dev/md0
mdadm /dev/md0 -a /dev/sda5 ———给md0加上一块盘
mdadm -D /dev/md0 ———–查看md0的状态