码迷,mamicode.com
首页 > 其他好文 > 详细

RAID及mdadm命令

时间:2016-08-06 22:00:27      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:linux

RAID及mdadm命令详解

    我们64位的操作系统是向前兼容32位的操作系统的,这样使得用户在32位操作系统上可以使用的软件也能在64位操作系统上使用,不过适用于32位操作系统的软件依赖的是32位的库文件/lib,适用于64位操作系统的软件依赖的是64位的库文件/lib64。

    技术分享

    我们的内核是运行在内存中的。

    我们的CPU想要通过内存从我们的硬盘上读取数据的时候,必须通过主板上的Controller(控制器->集成在我们的主板上的)或者是Adapter(适配器->独立的没有集成在主板上的)来和我们的硬盘进行通信,CPU和硬盘间的通信是依靠协议来进行的,协议是一种规定的语言规范,协议是双方都理解的且都遵循的一种信号传输法则。

    我们硬盘的接口类型分为以下几种:

    IDE类型->也叫做ATA类型,是一种并口盘,IDE总线的理论传输值是133Mbps,MB和Mb是不一样的,MB等于Mb/8,因为1B=8b,IDE是并口盘,信号并行的时候信号之间会产生干扰,IDE在我们的主板上有两块控制器,每一块控制器上面只能连接两块磁盘,一个主盘,一个从盘。

    SATA类型->也叫做串行ATA类型,SATA总线的理论传输值可以达到300Mbps、600Mbps以及6Gbps,SATA盘的一个控制器上面只能连接一块磁盘。

    USB 3.0类型->是一种串口盘,理论传输值可以达到480Mbps

    SCSI(Small Computer Syetem Interface->小型计算机系统接口)->是所有型号硬盘接口中性能最好的,是一种并口盘,现在常见的类型是UltraSCSI,理论传输值为320Mbps,SCSI盘的总线分为以下两类:

    ->窄带类型

        窄带类型的SCSI盘有8个接口,和主板相连的适配器占用一个接口,然后其余部分用来连接磁盘的接口叫做target,那么就有7个target,可以连接7块磁盘,还有16个接口类型的SCSI盘,那么这种类型的SCSI盘就有15个target,可以连接15块磁盘,在这里我们的适配器叫做initiator(数据请求的发起者),在后期我们的SCSI盘又得到了扩展,每一个target上面可以连接一个磁盘组,每一个磁盘组上面可以有多个磁盘,这样就使得我们的SCSI盘的容量得到了大大的扩展,但是这么多数量的target和磁盘我们要怎么去进行管理呢?我们的服务器方在向我们的磁盘方发送数据的时候,发送的每一个数据包的前面都会加上一个控制信息,这个控制信息可以指定我们的数据存放在哪一个target的哪一块磁盘上,这个控制信息就叫做数据包的首部,也叫做数据报文的首部(head),数据包也成为协议数据单元或者是协议报文,SCSI盘上的每一个target上的每一个磁盘都会有自己的地址,这个地址叫做LUN->Logical Unit Number:逻辑单元号,我们数据包的首部查找的信息就是LUN。

    ->宽带类型

    SAS类型->这是一种SCSI类型的串口设备

    现在RAID中组合的磁盘要么是SATA类型的盘,要么是SAS类型的盘。


·RAID

    Redundant Arrays of Indepent Disks,独立冗余的磁盘阵列,RAID是一种通过特殊的方式将几种独立的磁盘组合起来的技术,这样做的好处在于:

    ->能够使得磁盘的空间变得很大

    ->能够使得IO速度变的很快

    ->能够将多块磁盘组合起来当成一块磁盘来使用

    我们的RAID在磁盘中存储数据是条带化存储的,所谓条带化就是将要存储的数据一份一份的平均分配在RAID中的各个磁盘上,由于我们的RAID中磁盘的组织方式不同,所以我们的RAID有组成级别之分,称为RAID LEVEL:

    ->级别的高低并不意味着RAID性能的高低,而仅仅意味着磁盘的组织方式不同

    ->如果RAID中的某一块磁盘发生了损坏,那么有可能我们的所存储的整个数据都会发生损坏,因此我们在组织RAID的时候,不仅仅要考虑RAID的速度,还要考虑RAID数据的可用性,我们RAID数据的可用性可以用以下几种方式来实现:

    ->校验码机制:

        校验码机制的RAID至少得有两个用来存储数据的磁盘,一个来存储校验码的磁盘,总共三个磁盘,不过我们这里介绍的有三个用来存储数据的磁盘,一个用来当做校验码磁盘的磁盘组织方式,称为RAID4也叫做RAID5,不过RAID5的四个磁盘可以轮流当做校验码盘来使用,这种磁盘组织方式的工作原理如下:

        当我们要在RAID中存储一个文件的时候,前三块磁盘以条带的方式来存储文件数据,第四块磁盘用来存储代表前三块磁盘的校验码,如果前三块磁盘中的某一块发生故障,那么我们就可以利用第四块磁盘中存储的校验码减去前三块磁盘中完好的那两块磁盘的校验码从而得出哪一块磁盘发生了故障,从而可以替换新的磁盘上去,并且根据校验码恢复其中的数据,但是这种方式比较危险,因为不论哪一块磁盘发生故障,系统都会把该RAID中的其余三块磁盘都读一遍,这样一来会加大我们的磁盘的损坏风险,但是这种方式的RAID速度快,而且数据可用性好,但是这种方式最多允许损坏一块磁盘,因为如果损坏的磁盘数超过一块的话,我们利用校验码盘的机制也无法准确判断出具体损坏的哪一块磁盘,这样的磁盘组织方式的浪费比例是1/n,因为我们只使用其中的一块磁盘当做我们的校验码盘。

    ->镜像机制:也称为RAID1的方式,因为1代表镜像方式,而RAID0称为条带方式

        我们也可以使用磁盘镜像(mirror)技术来保证我们RAID的数据可用性,这种方式的RAID工作原理是,当我们要存储一个文件的时候,我们将文件存以条带的方式存储至RAID中的一组磁盘组中,然后将该组磁盘组中的数据复制一份作为镜像,存储至另一组完全一样的磁盘组中,这样就可以实现我们的数据可用性了,当RAID中的一个磁盘组发生故障的时候,另一个磁盘组还可以使用,这时我们的RAID就不至于发生故障而无法使用,这种磁盘组织方式的浪费比例是二分之一,因为它的两个磁盘组中存储的是一样的数据,而且两个磁盘组是一模一样的。


我们还有几种更加先进的磁盘组织方式:

    ->RAID01:表示整个RAID组织结构由下至上,先以条带的方式存储数据,然后再以镜像的方式复制一个完全一样的磁盘组的方式

      这种方式的RAID工作原理是,当我们有一个文件需要存储的时候,先将文件数据以条带的方式存储在一个磁盘组中,然后再利用镜像的方式复制一个一一模一样的磁盘组,如果某一个磁盘组中的某一块磁盘发生了故障,然后我们就需要利用镜像磁盘组来和我们发生故障的磁盘组进行对比,来找出发生了故障的磁盘组中的具体磁盘,然后利用镜像磁盘组中的磁盘数据来恢复我们发生了故障的磁盘中的数据,这种磁盘组织方试的不好之处在于,如果磁盘组和镜像磁盘组中的相对应的磁盘都发生了故障,那么整个RAID架构就会发生故障导致无法使用,但是两个磁盘组中的不同磁盘发生了故障有可能数据还能恢复,但是这种磁盘组织的方式有一个好处,当我们真个磁盘组都发生损坏,也没有关系,因为我们还有镜像磁盘组,可以用来恢复数据,不至于使得整个RAID都发生故障而无法使用。

    ->RAID10:表示整个RAID的组织架构由下至上,先以镜像的方式在同一个磁盘组中备份一个镜像磁盘,从而再以条带的方式将数据存储在这些磁盘组中的方式

    这种磁盘组织的方式的工作原理是,我们先用镜像的方式给每一个磁盘组都复制一个镜像磁盘,然后再用条带的方式将文件数据平均分成n份存储在我们的RAID中,如果我们此时有一个文件将要存储,此种RAID会将文件数据以条带的方式先平均分成n份存储在各个磁盘组中,然后在每个磁盘组中再以镜像的方式备份一份数据,这样做的好处在于不管哪一个磁盘组中的哪一块磁盘发生了故障,我们都可以利用镜像的方式将数据进行修复,这种方式和RAID01方式的性能差不多,但是磁盘数据的修复速度要远远大于RAID01的方式,在RAID10方式中,同一个磁盘组不能同时发生故障,否则整个RAID就会发生故障从而导致无法使用,RAID10方式的数据可用性高于RAID01方式。

    ->RAID50:表示使用校验码机制和条带机制整合起来的一种磁盘组织方式


·JBOD技术

    这是一种简单的将多块小磁盘连接为一块磁盘来使用的方式


·磁盘阵列技术总结

    1,RAID

        ->RAID0:条带方式

            读写性能(读写是并行的)提升,如果RAID中有n块磁盘的话,性能提升为1块磁盘时的n倍,但是没有数据冗余能力,冗余能力也成为容错能力,就是没有数据可用性,当RAID中的一块磁盘发生故障,整个RAID就会发生故障从而导致无法使用,如果一块磁盘的空间利用率为#的话,那么RAID0方式的磁盘利用率就是n#,此种方式至少需要两块磁盘,否则条带没有意义。

        ->RAID1:镜像方式

            将一个文件存储成同样的两份,所以写性能下降,比一块磁盘时的写性能好要差很多,但是读性能提升,因为可以在两个磁盘组中读取不同的磁盘数据块来组成整个文件,同样的数据可以交替的在两份同样的数据中读取,所以读性能大大提升,有数据冗余能力,空间利用率为1/2#,至少需要两块磁盘,否则镜像没有意义。

        ->RAID5:校验码方式

            因为数据是以条带的方式存储在存储文件数据的磁盘中的,所以读写性能都提升,校验码机制的存在导致此种方式有数据冗余能力,空间利用率为(n-1)#,因为有一块校验码盘的存在,此种方式至少需要三块磁盘的存在,否则校验码机制没有意义。

        ->RAID01:

                读性能提升,写性能下降,有数据冗余能力,空间利用率为1/2#,此种方式至少需要四块磁盘来实现。

        ->RAID10:

                读写性能都提升,有数据冗余能力,空间利用率为1/2#,此种方式至少需要四块磁盘来实现。

        ->RAID50:

                读写性能都提升,因为有条带方式的存在,有数据冗余能力,空间利用率为(n-2)#,此种方式至少需要六块磁盘来实现。

    RAID LEVEL是我们RAID中磁盘的组合方式。

    2,JBOD

        读写性能都没有提升,因为它是一种将多块小磁盘整合为一块磁盘来使用的技术,是真正的一块磁盘,而不是逻辑意义上的一块磁盘,没有数据冗余能力,其中任何一块小磁盘发生了故障,整个磁盘阵列都会发生故障而无法使用,空间利用率为100%,此种方式至少需要两块磁盘来实现,否则没有意义。


·实现RAID的方式

    我们实现RAID的方式主要有两种:

     ->硬件RAID

     ->软件RAID

        我们之所以可以利用软件来实现RAID功能的原因是我们的操作系统的内核上有一个支持多设备的模块,叫做MD->Multi Disks,我们在做软件RAID的时候,通过CPU的角度来看待我们的RAID的时候可能就是独立的几块磁盘,但是我们通过我们的MD模块来看待我们的RAID的时候,它才是我们的RAID磁盘阵列,我们在使用软件实现RAID的时候,组成RAID的磁盘分区必须被指定为fd类型,当我们将组成RAID的磁盘类型标识为fd类型的时候,如果当我们的RAID发生故障的时候,我们之后可以根据磁盘上的fd类型来恢复磁盘中的数据,但是我们如果使用这种方法来恢复我们RAID中的磁盘的数据的时候,会导致我们的服务区压力过大,所以我们以后在生产环境中最好使用硬件RAID,如果我们想要在我们的Linux系统中实现软件RAID的时候,必须在我们的操作系统的内核上装载一个MD模块。


    我们Linux系统上提供了两个逻辑RAID设备文件(用软件模拟出来的设备,假的设备):

    ->/dev/md0

    ->/dev/md1

      技术分享  

    其后的数字是为了标识不同的RAID设备文件,并不标识RAID设备的级别,在我们的Linux系统上有一个用来管理我们的内核上Md(Multidisks)多设备模块的命令:

    mdadm(mdadmin)命令->

        称为Md管理器,在Linux系统中,该命令支持将任何块设备,也可以是磁盘分区做成RAID来使用,但是在同一块磁盘分区上做RAID是没有任何意义的,我们只是拿来做实验而已,因为同一块磁盘,根本无法体现性能的提升,因为它始终是一块磁盘,必须使用不同的磁盘设备才能体现出来RAID的意义,mdadm命令是一个用户空间管理工具,可以帮助我们来管理我们内核中的Md模块,从而来管理我们的软件RAID设备,但是我们软RAID设备的真正工作,依靠的是内核中的Md模块,mdadm命令是一个模式化的命令,可以支持多种模式:

    ->创建模式:创建RAID的时候,RAID中的每一块磁盘大小得一致

        格式:-C /dev/md#,-C选项还可以跟上如下专用选项->

                -l:指定RAID级别

                -n #:指定RAID中的磁盘个数

                -a yes|no:是否自动为其创建设备文件,作为RAID设备的访问入口

                -c:指定每一次往条带上分的chunk(数据块)上分的大小为多大,默认大小为64KB,大小为2^n倍

                我们的创建文件系统的命令mke2fs有一个-E选项,可以指定一个stride选项来指定我们的条带大小,条带指的是我们每个磁盘上的chunk比上block的商,具体实现格式如下:

        mke2fs -E stride=#(条带大小),利用这种方式格式化RAID,可以提高RAID的性能,不用RAID每次还要计算自己得需要多大的RAID,对RAID略有作用,可以提高软RAID的性能。

    温故:花括号{}表示文件名扩展,/dev/sda{5,6} = /dev/sda5和/dev/sda6

    我们/proc/mdstat可以显示当前系统上所有已经被启动的RAID设备,创建RAID的时候,组成RAID的磁盘分区,在创建完成RAID之前,不能进行格式化,创建完成RAID之后,直接格式化RAID即可。

                -x #:指定空闲磁盘的个数


    watch命令->

        这个命令的功能是周期性的执行某命令,然后全屏显示执行结果

            -n #选项:默认单位为秒钟,不指定数字,就默认为每2秒更新一次

            使用格式:watch -n # ‘COMMAND‘

            

                

  

->管理模式

--add|-a(mdadm /dev/md1 -a /dev/sda9->将一块新盘移动到磁盘阵列里面去,

不过移动进来的新盘必须和之前的任何一块磁盘的大小都得一致)

--remove|-r(mdadm /dev/md1 -r /dev/sda8->将损坏的磁盘进行移除)

用到这些模式默认就工作在管理模式下

在管理模式下,使用-f  --fail  --set-falty都可以模拟让RAID中的磁盘发生损坏

mdadm  /dev/md1  -f  /dev/sda7->将磁盘阵列/dev/md1中的/dev/sda7磁盘模拟成损坏的

->监控模式

-F

->增长模式

-G

->装配模式

-A

mdadm -A /dev/md# /dev/sda........->可以重新启动阵列

查看RAID阵列的详细信息

maadm -D /dev/md#

 --detail

-D|--detail选项可以用来显示RAID设备的信息


停止阵列:

mdadm -S /dev/md#->停用一个阵列

或--stop

为了安全起见

我们可以利用三块磁盘做成一个具有热空闲盘(当其中某一块磁盘坏掉的情况下这块磁盘会自动顶上去)的RAID1


mdadm命令的主配置文件在/etc/mdadm.conf文件里面保存着

我们可以使用mdadm -D --scan命令将我们的磁盘阵列信息导入到主配置文件里面

从而我们下次再重新装配的时候就不用再指向设备了,它会自动读取我们的配置文件的

我们再次重新装配的时候直接使用

maadm -A /dev/md#这条命令就可以了

将当前RAID信息保存至配置文件,以便以后进行装配

mdadm -D --scan > /etc/mdadm.conf

然后直接重新装配就好了

如何创建一个2G的RAID5

RAID5至少得有3块磁盘设备

创建一个2G的RAID5需要3G的容量,因为有一个磁盘属于校验码盘,其余两个盘才是真正存储数据的盘

再加一块热空闲盘,就需要4G的容量

lsmod命令

列出模块


DM

      



     

    

    

本文出自 “菜鸟的技术文档” 博客,请务必保留此出处http://zhubo.blog.51cto.com/11395641/1835113

RAID及mdadm命令

标签:linux

原文地址:http://zhubo.blog.51cto.com/11395641/1835113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!