今天我将RAID的学习心得写下来和大家一起分享,希望大家多多指点
RAID:Redundant Arrays of Independent Disks独立磁盘冗余阵列
raid的由来:随着计算机的发展,人们对数据的读写速度要求越来越高,而新型的设备虽然满足了这样的需求,但价格非常昂贵,并不是一般公司能够支付起的,但一般公司也要提高数据的读写速度,在这样的需求环境下产生了RAID;他的出现极大的满足了普通公司的需求,而他的原理就是利用多个小型廉价的磁盘合并为一组磁盘阵列,来达到大型昂贵的磁盘所无法达到的读写性能和文件的冗余性,而这个磁盘阵列在计算机看来仍然是一个大型的存储磁盘
Raid分为多个不同的工作级别,这些工作级别只是为了区分不同的工作原理:
RAID0 条带技术,将一个文件的数据分成大小相同的多份,并将每一份保存在不同的磁盘中,大大提高了读写速度n倍,空间能够全部使用,但是却不能保证数据的安全性,一旦其中一块磁盘损坏,则数据全部损毁,且至少两块硬盘
RAID1 镜像技术,将同一文件的数据同时存储到多个不同的硬盘中,相当于实现数据的备份,读取的速度得到提高,还具有一定的冗错能力,即使其中一块硬盘坏掉,数据仍然完整可用,但是因为数据要同时写多份,所以写的速度大大降低,而且空间利用率下降至50%,至少需要两块硬盘
RAID01 先对数据使用条带技术,然后再使用镜像技术;先对文件数据进行等份切割存储,然后再将切割好的数据分别存储在两组硬盘中,这样即实现了数据读写速度的提升,也实现了数据冗余能力,即使其中一块硬盘坏掉,数据仍然可修复使用,但是数据的修复需要全局的硬盘同时工作,影响了全局硬盘的读写速度,且磁盘的空间利用率下降到50%,需要的硬盘数量增加了,至少需要四块硬盘
RAID10 先对数据使用镜像技术,然后再使用条带技术;先对文件内的数据做镜像,然后将两份镜像数据分别存储到两组硬盘阵列中,读写速度都得到提升,有冗余能力,即使其中一块硬盘坏掉数据仍然可修复使用,且此时修复只需同组硬盘进行复制修复即可,并不影响全局读写速度,但是对空间的利用率只有50%,且至少需要四块硬盘
RAID5 轮流校验技术,将文件数据进行切割存储,但是至存储在N-1个硬盘中,剩余的一个硬盘做校验码,以防止其他硬盘出现故障导致数据丢失,且数据的存储是轮流存储(第一次存储在前三个硬盘中,最后一个做校验磁盘,第二次可能存储在前两个和最后一个中,第三个做校验码磁盘,依次轮流存储),数据的读写速度得到提升,而且有数据冗错能力,其中一块坏掉,可以根据其他存储硬盘和校验硬盘进行数据修复使用,但是对空间利用率只有(n-1)/n,至少需要三块硬盘
RAID50 先做轮流校验,在做条带存储;先对文件的数据做轮流校验技术,然后再做条带存储,对数据的读写速度有提升,有冗余能力,允许其中某一块硬盘坏掉,但是对空间的利用率只有(n-2)/n,且至少需要六块硬盘,一般只有对数据安全性要求极高的公司会使用
Jbob 实现将多个小存储量硬盘组合成一个大存储的硬盘来使用,对数据的读写性能都没有提升,没有数据冗余能力,只是为了扩大数据的存储量,空间的利用率100%;这种技术只是在极少数情况下使用,比如hadoop服务器,因为HDFS文件系统自带数据冗余能力,允许某一块磁盘坏掉,HDFS可自行进行修复,至少需要两块磁盘
RAID阵列的实现有两种形式,一种是我们刚刚叙述的各种RAID级别及其组合实现;另一种实现方式是软RAID,以软件模拟的形式来实现RAID阵列
由于硬RAID的实现需要有足够的硬件存储设备,而有的时候我们需要RAID阵列来提升数据的读写速度,却不能立即得到设备时,我们就已软件的形式模拟来RAID阵列(强烈建议在工作环境中不使用软RAID,除非到万不得已的时候),下面我们介绍一下软RAID阵列的实现
首先查看内核是否有支持软RAID的模块md,multi disks,如果有就可以使用多个分区或者硬盘组合称raid阵列,并将这些分区类型更改为fd
# lsmod 查看当前Linux操作系统上已经装载的模块有那些
软RAID的工作模式:在系统中先使用md模块模拟一个逻辑raid阵列,当我们要存储数据时,逻辑raid阵列会将数据分割为相等的两部分,分别存储在多个存储组中;而创建的逻辑raid设备文件存放在/dev/下,一般以md*表示后边的*号表示第几个,而软raid的启动信息文件存放在/proc/mdstat下
Mdadm Linux下软raid的模块实现管理工具
创建模式
-C 指定要创建一个新的软raid
-l # 指定要创建的raid的级别(0,1,01,10,5,50等)
-n # 指定要创建的raid所使用的设备个数
-x # 指定要创建的raid备用设备个数(当其中一个出现故障时备用的能够自动顶上去)n+x==后边跟的设备个数
-a yes|no 自动创建设备文件/dev/md#
-c # 指定要创建的软raid的chunk块大小(这个raid阵列中的存储数据的最小存储单位,默认为64K,在创建完成之后,对其进行格式化时,系统会自动计算chunk大小和块大小的比例,我们也可以直接指定比例来节省cpu的计算时间)
# mke2fs -j -E stride=16 -b 4096 /dev/md0 直接给出比例
# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6} 创建一个新的级别为raid0的软raid阵列,指定名称为md0,自动创建目录,使用两个设备创建,分别是sda5,6
创建之后格式化然后进行挂载即可使用
管理模式
直接输入参数即可进入管理模式
--add 添加一个或几个分区或硬盘到已有的raid阵列中
# mdadm --add /dev/md0 /dev/sda7 /dev/sda8
--stop 停止一个raid阵列的使用
# mdadm --stop /dev/md0
--remove 移除一个raid阵列,将raid阵列分区中的所有数据全部清空,请谨慎使用
# mdadm /dev/md0 --remove /dev/sda5
--move 将一个raid阵列分区中的数据移动到另外一个分区中,建议在移除某个raid之前先使用此命令将数据移动到另一个分区中
# mdadm /dev/md0 --move /dev/sda5 /dev/sda9
--fail 模拟raid阵列中的某一块分区坏掉,一般用于测试
# mdadm /dev/md0 --fail /dev/sda5
--detail 显示某一个raid阵列的详细信息
此时查看的是某一时间的静态信息,我们可以使用另一个命令使得我们能
够不断的监测raid阵列的运转情况
# mdadm --detail /dev/md0
# watch -n # `command` 设置某一命令每隔#秒运行一次
--scan 将当前raid阵列的保存至配置文件,一边以后能够自动装载
# mdadm -D --scan > /etc/mdadm.conf
切记:在工作环境中不要随意使用软RAID阵列,可以用来对RAID阵列进行测试