linux基础学习之磁盘阵列

感谢http://molinux.blog.51cto.com/2536040/516008  ,感谢 慕小潮 的BLOG
本篇的文章基本脉络是按照上面提到的文章写的,只是自己过了一遍写出来而已,甚至有些照抄,不过试验内容为自己做的,也加入了自己的一些想法!

raid技术简介

RAID(Redundant Array of Inexpensive Disk) :
用多台小型的磁盘存储器(或光盘存储器)按一定的组合条件,而组成的一个大容量的、快速响应的、高可靠的存储子系统。
主要形式:
按分条(Stripping)、分块(Declustering)和交叉存取(Interleaving)等方式对数据和校验数据进行各种组合处理, 以达到存储系统的目标。
现在已知的RAID0~RAID7的8种组合,各有其特点。
 
目前用的最多的磁盘阵列为raid0 ,raid1,raid5,raid10;可能还有raid50等;在这里主要介绍raid0,raid1,raid5,raid10等;对于理论的学习仅限于介绍,对于如数据存储的细节均未作介绍;对存储有兴趣的东西可以深入学习,存储的精通学习也不是一天两天的事情,因为它本身也是一门很深的学问;
 
RAID 0 又称为Stripe或Striping,中文译为集带工作方式。
它是将要存取的数据以条带状形式尽量平均分配到多个硬盘上,读写时多个硬盘同时进行读写,从而提高数据的读写速度。RAID 0另一目的是获得更大的“单个”磁盘容量。
优点:存储容量和传输率有较大的提高。
缺点:组成的磁盘阵列的平均无故障间隔时间MTTF(Mean Time To Failure)减少到单个磁盘机MTTF时间的1/N(N为组成盘阵列的磁盘个数);
在容错方面未采取任何措施,可靠性差。
 
RAID 1 又称为Mirror或Mirroring,中文译为镜像方式。
这种工作方式的出现完全是为了数据安全考虑的,它是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上或硬盘的不同地方(镜像)。当读取数据时,系统先从RAID 1的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘上的数据,不会造成用户工作任务的中断。由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而,Mirror的磁盘空间利用率低,存储成本高。
优点:数据安全性高(所有raid中最安全性最好的)
缺点:磁盘利用率低,存储成本高
 
RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案,也是目前应用最广泛的RAID技术。各块独立硬盘进行条带化分割,相同的条带区进行奇偶校验(异或运算),校验数据平均分布在每块硬盘上。以n块硬盘构建的RAID 5阵列可以有n-1块硬盘的容量,存储空间利用率非常高。RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID 5的任何一块硬盘上的数据丢失,均可以通过校验数据推算出来。
优点:磁盘利用率较高,安全性较好,读出效率高
缺点:写入效率一般
 
raid分为使用硬raid和软raid;
顾名思义,硬raid就是使用专门的raid设备,组成一个raid,结合存储网络使用;
软raid,就是使用软件实现raid功能;
 
linux的磁盘阵列基于软件实现的,所以也叫软raid;linux使用的工具为mdadm(multipe device admin);
mdadm介绍
mdadm(multipe device admin)是linux下标准的raid管理工具,是一个模块化的工具,工作在不同的模式下;一般来说,linux已经内置该工具,rhce5.8中,版本为mdadm - v2.6.9 ;
[root@jxbsn ~]# mdadm -V
mdadm - v2.6.9 - 10th March 2009
 
mdadm共有8种工作模式,分别负责不同的功能;可以通过mdadm --help或者man mdadm查询详细使用方法;
基本语法:
mdadm [mode] <raiddevice> [options] <component-devices>
模式:
Assemble 装载模式;加载已经存在的raid
Build Build模式;建立一个raid,每块设备都不带有超级块的raid
Create 创建模式;创建一个每块设备都带有超级快的raid
Follow or Monitor 监视模式;监控raid状态, 一般只对RAID1/4/5/6/10等有冗余功能的raid使用
Grow Grow (or shrink) ;扩容或者收缩一个raid
Incremental Assembly 添加一个单独的设备到一个合适的陈列
Manage 管理模式;管理阵列中的某个设备,比如添加一个备用磁盘或者删除一个错误磁盘
Misc 混杂模式;允许单独对阵列中的某个设备进行操作(如抹去superblocks 或停止阵列)
Auto-detect 自动探测;不是针对某个设备或者某个针对操作,而且使内核在启动的时候加载检测到的阵列
 
选择一个模式
-A, --assemble: 加入并开启一个以前定义的阵列
-B, --build: 创建一个没有超级块的阵列(Build a legacy array without superblocks.)
-C, --create: 创建一个新的阵列
-F, --follow, --monitor:选择监控(Monitor)模式
-G, --grow: 改变激活阵列的大小或形态
-I, --incremental: 添加一个单独的设备到合适的阵列,并可能启动阵列
--auto-detect: 请求内核启动任何自动检测到的阵列
在这里,可以看出来,对于mangle模式和混杂模式来说,不需要指定模式
 
 
 
不依赖于某个模式的选项
-c, --config=: 指定配置文件,缺省为 /etc/mdadm.conf
-s, --scan: 扫描配置文件或 /proc/mdstat以搜寻丢失的信息。默认配置文件:/etc/mdadm.conf
-h, --help: 帮助信息,用在以上选项后,则显示该选项信息
-v, --verbose: 显示细节,一般只能跟 --detile 或 --examine一起使用,显示中级的信息;
-b, --brief: 较少的细节。用于 --detail 和 --examine 选项
--help-options: 显示更详细的帮助
-V, --version: 版本信息
-q,--quit: 安静模式;加上该选项能使mdadm不显示纯消息性的信息,除非那是一个重要的报告;
create build 或grow时使用的选项:
-n, --raid-devices=: 指定阵列中活动的device数目,不包括spare磁盘,这个数目只能由--grow修改
-x, --spare-devices=:指定初始阵列的冗余device 数目即spare device数目;
-c, --chunk=: Specify chunk size of kibibytes. 缺省为 64. chunk-size是一个重要的参数,决定了一次向阵列中每个磁盘写入数据的量
(Chunk :,可以理解为raid分储数据时每个数据段的大小(通常为32/64/128等这类数字大小);合理的选择chunk大小非常重要,若chunk过大可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使得数据的读写只局限于一块硬盘上,这便不能充分发挥RAID并发的优势;如果chunk设置过小,任何很小的I/O指令都 可能引发大量的读写操作,不能良好发挥并发性能,占用过多的控制器总线带宽,也影响了阵列的整体性能。所以,在创建带区时,我们应该根据实际应用的需要,合理的选择带区大小。)
 
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数;但是大小必须为chunk的倍数,还需要在每个设备最后给RAID的superblock留至少128KB的大小。
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=: 设定 raid level.raid的几倍
--create: 可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build: 可用:linear, raid0, 0, stripe.
-p, --layout=:设定raid5 和raid10的奇偶校验规则;并且控制故障的故障模式;其中RAID-5的奇偶校验可以在设置为::eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--parity: 类似于--layout=
--assume-clean:目前仅用于 --build 选项
-R, --run: 阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force: 通常mdadm不允许只用一个device 创建阵列,而且此时创建raid5时会使用一个device作为missing drive。此选项正相反
-N,--name=: 设定阵列的名称
 
管理模式选项(For Manage mode):
-a, --add: 添加列出的设备到一个工作的阵列中;当阵列处于降级状态(故障状态),你添加一个设备,该设备将作为备用设备并且在该备用设备上开始数据重建。
-r, --remove:从阵列中移除列出的设备,并且该设备不能处于活动状态(是冗余盘或故障盘);
-f,--fail:将列出的设备标记为faulty状态,标记后就可以移除设备;(可以作为故障恢复的测试手段)
--set-faulty:同上
 
监控模式选项(For Monitor mode):
-m, --mail: 设置一个mail地址,在报警时给该mail发信;该地址可写入conf文件,在启动阵列是生效
-p, --program, --alert:当检测到一个事件时运行一个指定的程序
-y, --syslog: 设置所有的事件记录于syslog中
-t, --test: 给启动时发现的每个阵列生成test警告信息;该信息传递给mail或报警程序;(以此来测试报警信息是否能正确接收)
 
MISC模式选项:
Usage: mdadm options ... devices ...
-Q, --query: 查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail: 打印一个或多个md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
 
开始试验,创建一个raid5
raid5至少需要3个设备,可以使分区,也可以是磁盘;在这里使用4块磁盘做环境(3块陈列磁盘,一块备用磁盘)
一:选定磁盘(或者分区)
二:创建raid
三:使用raid
三:查看磁盘阵列状态
四:raid配置文件
五:raid管理
 
一:选定磁盘
 
 
 
isk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
 
Disk /dev/sdb doesn't contain a valid partition table
 
Disk /dev/sdc: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
 
Disk /dev/sdc doesn't contain a valid partition table
 
Disk /dev/sdd: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
 
Disk /dev/sdd doesn't contain a valid partition table
 
Disk /dev/sde: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
 
Disk /dev/sde doesn't contain a valid partition table
 
 
 
[root@jxbsn ~]# mdadm -C /dev/md0 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}
mdadm: array /dev/md0 started.
 
-C 创建模式,创建一个阵列;
[root@jxbsn ~]# mdadm -C --help
Usage: mdadm --create device -chunk=X --level=Y --raid-devices=Z devices
-l 指定raid级别
-n 陈列中活动磁盘数目
-x 备用磁盘数目
/dev/sd{b,c,d,e} 使用这四个磁盘;前面为活动磁盘,后面为备用磁盘
 
就是这么简单,一个磁盘阵列就已经创建好了;
 
 
三:查看阵列状态
[root@jxbsn ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[2] sde[3](S) sdc[1] sdb[0]
1048448 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
 
unused devices: <none>
 
通过cat /proc/mdstat信息查看所有运行的RAID阵列的状态,在第二行中首先是MD的设备名md0,active和inactive选项表示阵列是否是活动的,接着是阵列的RAID级别raid5,后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号,(S)表示其是热备盘,(F)表示这个磁盘是 faulty状态。第三行中首先是阵列的大小,用块数来表示;后面有chunk-size的大小,然后是layout类型,不同RAID级别的 layout类型不同,[3/3] [UUU]表示阵列有3个磁盘并且3个磁盘都是正常运行的;在后面的试验中,会出现[3/2]和[_UU]表示阵列有3个磁盘中2个是正常运行的,下划线对应的那个位置的磁盘是faulty状态的。
查看阵列的详细信息:mdadm -D /dev/md0 或者mdadm --detail /cev/md0
 
[root@jxbsn ~]# mdadm -D /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Tue Sep 18 15:54:09 2012
Raid Level : raid5
Array Size : 1048448 (1024.05 MiB 1073.61 MB)
Used Dev Size : 524224 (512.02 MiB 536.81 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent
 
Update Time : Tue Sep 18 15:54:12 2012
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
 
Layout : left-symmetric
Chunk Size : 64K
 
UUID : a772cb0e:45c2e79e:87d40370:2f0ef83f
Events : 0.4
 
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
 
3 8 64 - spare /dev/sde
 
四:磁盘阵列的配置文件/etc/mdadm.conf
mdadm.conf是mdadm的默认配置文件,默认不存在,需要创建,一遍在机器重启的时候重新加载阵列;
mdadm -Ds > /etc/mdadm.conf
 
[root@jxbsn ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 level=raid5 num-devices=3 metadata=0.90 spares=1 UUID=a772cb0e:45c2e79e:87d40370:2f0ef83f
 
五:raid的停止和加载
1、停止某个raid
[root@jxbsn ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
2、停止所有raid
mdadm -Ss
3、开启一个raid
[root@jxbsn ~]# mdadm -A /dev/md0 #md0必须有配置文件
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
4、开启配置文件中所有raid
mdadm -As
 
5、如果没有配置文件,加载一个raid的时候需要制定设备
[root@jxbsn ~]# mdadm -A /dev/md0 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
 
6、如果没有配置文件,也不知道都有哪些设备在raid中,就需要逐个检查设备是否是raid设备以及包含的信息(这些信息在设备的超级块中);根据信息装载raid
[root@jxbsn ~]# mdadm -E /dev/sde
/dev/sde:
Magic : a92b4efc
Version : 0.90.00
UUID : 91f772df:e58c04b0:275ea0c6:0e04f184
Creation Time : Tue Sep 18 17:17:40 2012
Raid Level : raid5
Used Dev Size : 524224 (512.02 MiB 536.81 MB)
Array Size : 1048448 (1024.05 MiB 1073.61 MB)
Raid Devices : 3
Total Devices : 4
Preferred Minor : 0
 
Update Time : Tue Sep 18 17:17:43 2012
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Checksum : f6cbd2a7 - correct
Events : 4
 
Layout : left-symmetric
Chunk Size : 64K
 
Number Major Minor RaidDevice State
this 3 8 64 3 spare /dev/sde
 
0 0 8 16 0 active sync /dev/sdb
1 1 8 32 1 active sync /dev/sdc
2 2 8 48 2 active sync /dev/sdd
3 3 8 64 3 spare /dev/sde
磁盘阵列的管理
1、指定一个设备(磁盘/分区)为坏设备(磁盘/分区)
2、移除一个设备
3、添加一个设备
 
1、指定/dev/sdb为坏设备

[root@jxbsn ~]# mdadm -f /dev/md0 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
 
[root@jxbsn ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[2] sde[0] sdc[1] sdb[3](F)
1048448 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
 
unused devices: <none>
 
备用的设备顶替坏的设备;
2、移除一个设备
[root@jxbsn ~]# mdadm -r /dev/md0 /dev/sdb
mdadm: hot removed /dev/sdb
[root@jxbsn ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[2] sde[0] sdc[1]
1048448 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
 
unused devices: <none>
 
3、添加一个设备
[root@jxbsn ~]# mdadm -a /dev/md0 /dev/sdf
mdadm: added /dev/sdf
[root@jxbsn ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdf[3](S) sdd[2] sde[4](S) sdc[1] sdb[0]
1048448 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
 
unused devices: <none>
 
对于有冗余的raid形式,在单一磁盘故障时一般能在一段时间内重建数据;但是数据量非常大时,重建会非常缓慢,且重建过程系统压力比较大,此时需要多关注系统负载,防止重建过程出现错误;在热移除故障盘一户,也需要尽快的换上新硬盘,并且添加spare盘;在故障修复,重建重建之后,需要重新生成配置文件,防止在下次开启时,按照最初的定义模式开启;
 
六:彻底删除一个raid
1、首先,raid不能在使用过程中
umount /dev/md0
2、停止阵列
mdadm -S /dev/md0
3、清空设备超级块信息
mdadm --zero-superblock /dev/sd{b,c,d,e}
4、删除配置文件
rm /etc/mdadm.conf

 

你可能感兴趣的:(raid,磁盘阵列)