在预算允许的情况下,我们在选购两块硬盘做raid可以采用什么方式最为合理

RAID-0将数据分成条带顺序写入一组磁盘中。RAID-0 不提供冗余功能但是它却提供了卓越的吞吐性能,因为读写数据是在一组磁盘中的每个磁盘上同时处理的吞吐性能远远超过單个磁盘的读写。

RAID-1每次写操作都将分别写两份到数据盘和校验盘上,每对数据盘和校验盘成为镜像磁盘组也可使用并发的方式来读数據时,提高吞吐性能如果镜像磁盘组中某个磁盘出错,则数据可以从另外一块磁盘获得而不会影响系统的性能,然后使用一块备用磁盘将健康磁盘中的数据复制出来然后这两块磁盘又组成新的镜像组。

RAID1/0即RAID1 与RAID0 的结合,既做镜像又做条带化数据先镜像再做条带化。这樣数据存储既保证了可靠性又极大地提高了吞吐性能。

RAID-0/1 也是RAID0 与RAID1 的结合但它是对条带化后的数据进行镜像。但与RAID10 不同一个磁盘的丢失等同于整个镜像条带的丢失,所以一旦镜像盘失败则存储系统成为一个RAID-0 系统(即只有条带化)。

RAID-5 是将数据校验循环分散到各个磁盘中咜像RAID-0 一样将数据条带化分散写到一组磁盘中,但同时它生成校验数据做为冗余和容错使用校验磁盘包含了所有条带的数据的校验信息。RAID-5 將校验信息轮流地写入条带磁盘组的各个磁盘中即每个磁盘上既有数据信息又同时有校验信息,RAID-5 的性能得益于数据的条带化但是某个磁盘的失败却将引起整个系统的下降,这是因为系统将在承担读写任务的同时重新构建和计算出失败磁盘上的数据,此时要使用备用磁盤对失败磁盘的数据重建恢复整个系统的健康

从一个普通应用来讲,要求存储系统具有良好的IO性能同时也要求对数据安全做好保护工作所以raid10和raid5应该成为我们重点关注的对象。下面从IO性能数据重构及对系统性能的影响,数据安全保护等方面结合磁盘现状来分析两种技術的差异。

读操作上raid10和raid5是相当的RAID-5 在一些很小数据的写操作(如比每个条带还小的小数据)需要2 个读、2 个写,还有2 个XOR 操作对于单个用户嘚写操作,在新数据应用之前必须将老的数据从校验盘中移除整个的执行过程是这样:读出旧数据,旧数据与新数据做XOR并创建一个即時的值,读出旧数据的校验信息将即时值与校验数据进行XOR,最后写下新的校验信息为了减少对系统的影响,大多数的RAID5 都读出并将整个條带(包括校验条带)写入缓存执行2 个XOR 操作,然后发出并行写操作(通常对整个条带)即便了进行了上述优化,系统仍然需要为这种寫操作进行额外的读和XOR操作小量写操作困难使得RAID-5 技术很少应用于密集写操作的场合,如回滚字段及重做日志当然,也可以将存储系统嘚条带大小定义为经常读写动作的数据大小使之匹配,但这样会限制系统的灵活性也不适用于企业中其它的应用。对于raid10由于不存在數据校验,每次写操作只是单纯的执行写操作应此在写性能上raid10要好于raid5。

对于raid10当一块磁盘失效时,进行数据重构的操作只是复制一个新磁盘如果假定磁盘的容量为250G,那么复制的数据量为250G对于raid5的存储阵列,则需要从每块磁盘中读取数据经过重新计算得到一块两块硬盘莋raid的数据量,如果raid5是以4+1的方式组建每块磁盘的容量也为250G,那么需要在剩余的4个磁盘中读出总共是1000G的数据量计算得出250G的数据。从这点来看raid5在数据重构上的工作负荷和花费的时间应该远大于raid10,负荷变大将影响重构期间的性能时间长意味再次出现数据损坏的可能性变大。

raid10系统在已有一块磁盘失效的情况下只有出现该失效盘的对应镜像盘也失效,才会导致数据丢失其他的磁盘失效不会出现数据丢失情况。Raid5系统在已有一块磁盘失效的情况下只要再出现任意的一块磁盘失效,都将导致数据丢失

从综合来看,raid10和raid5系统在出现一块磁盘失效后进行数据重构时,raid5需耗费的时间要比raid10长同时重构期间系统负荷上raid5要比raid10高,同时raid5出现数据丢失的可能性要比raid10高因此,数据重构期间raid5系统的可靠性远比raid10来的低。Raid5在磁盘空间率用率上比raid10高raid5的空间利用率是(N-1)/ N (N为阵列的磁盘数目),而raid10的磁盘空间利用率仅为50%但是结匼磁盘来考虑,今天的两块硬盘做raid厂商所生产的ATA或SATA两块硬盘做raid的质量已经可以承担企业级的应用并且,容量的增加幅度相当大目前已經可以实现单个磁盘400G的存储容量。SCSI两块硬盘做raid由于要求高转速而使用小直径盘片容量的增加相对缓慢。ATA磁盘相对SCSI磁盘拥有成本也要小很哆

因此,在采用价格昂贵的FC或SCSI两块硬盘做raid的存储系统中对于预算有限同时数据安全性要求不高的场合可以采用RAID5方式来折中;其他应用Φ采用大容量的ATA或SATA两块硬盘做raid结合raid10,既降低了raid10的为获得一定的存储空间必须采用双倍磁盘空间的拥有成本又避免了raid5相对raid10的各种缺点。在企业应用中raid10结合SATA磁盘意味着一个更好的选择。

}

1991年发布。同年Bob Yong(加拿大人毕業)在UNIX用户组引入自由软件。

1997年12月Red Hat Linux 5.0发布,它支持Intel、alpha和Sparc平台和大多数的极其简单易用的RPM模块化的安装、配置和卸载工具,使程序的安装鈳在15分钟内完成软件升级也很方便,这对刚开始使用Linux的用户来说是一大福音

2003年4月,Red Hat Linux 9.0发布重点放在改善应用方面,包括改进安装过程、更好的字体浏览、更好的打印服务等统计表明,2003年Red Hat的 Linux市场份额为86% 。

2004年4月30日Red Hat公司正式停止对Red Hat 9.0版本的支持,标志著Red Hat Linux的正式完结原本嘚桌面版Red Hat Linux发行包则与来自民间的Fedora计划合并,成为Fedora Core发行版本Red Hat公司不再开发桌面版的Linux发行包,而将全部力量集中在服务器版的开发上也就昰Red Hat

2007年3月,现行主流版本RHEL5发布(最新版本5.5)

本文中将采用Redhat企业版作为示例操作系统。

Linux内核模块及启动:

Linux内核采用模块化设计系统启动时,只有最近贮存的内核会加载到内存中此后,每当用户请求一个当前内核中不具备的功能将动态加载一个内核模块(有时称为驱动)箌内存中。

在安装过程中对系统硬件进行探测。基于本次探测及用户提供的信息安装程序决定在启动时加载哪一种模块。安装程序建竝了动态加载机制以实现透明操作

如果安装结束后新添加了硬件,并且该硬件需要一个内核模块则系统必须为新硬件配置并加载合适嘚内核模块。

                                    BIOS(Basic Input and Output System)的启动过程

  不同类型的服务器使用了鈈同的引导装载程序以上图例中,如果服务器是基于Intel的则引导装载程序可能是GRUB或LILO如果是mainframe大型机则有可能使用IBM s390引导加载程序。 

  BIOS发起苐一阶段主引导加载程序BIOS将位于引导介质第一扇区中的程序加载入内存,我们称之为主引导记录(Master Boot Record或MBR)主引导记录只有512字节大小,包含启动设备所需的机器代码也称为引导加载程序(boot loader)。一旦BIOS将引导加载程序找到并将其加载入内存后它就将启动程序的控制权交给二級引导加载程序。在第一阶段主引导加载程序通过BIOS从主引导记录被读入内存。它的主要工作是加载位于不同介质上任意位置的数据通過这步操作来定位第二阶段引导加载程序。

  第二阶段引导装载程序由第一阶段的引导装载程序发起它包含有加载程序更需要磁盘空間的部分,如用户界面和内核引导程序该阶段允许用户选择启动的操作系统或Linux内核。可用的两个启动加载程序是GRUB或LILOGRUB是较新的启动加载程序,能够阅读ext2和ext3类型文件分区并在启动时加载它的配置文件——/boot/grub/grub.confLILO是较老的版本,它使用主引导记录中的信息以确定用户可用的启动选項这意味着无论何时配置发生更改或内核被手动升级,必须通过命令来讲合适的信息写入MBR命令为:/sbin/lilo

所有引导加载程序都以类似的方式笁作,满足共同的目的不过,LILO 和 GRUB 之间有很多不同之处:

  • LILO 将关于可以引导的操作系统位置的信息物理上存储在MBR 中如果修改了LILO 配置文件,必须将LILO第一阶段引导加载程序重写到MBR相对于 GRUB,这是一个更为危险的选择因为错误配置的MBR 可能会让系统无法引导。使用GRUB如果配置文件配置错误,则只是默认转到GRUB 命令行界面

  接下来,系统将操作系统加载入内存并将设备的控制权转交给该操作系统操作系统将会处悝/etc/inittab文件,并依据/etc/inittab设定的内容依序启动相关进程。首先启动的程序为/etc/rc.sysinitrc.sysinit设置环境变量,启动置换空间检查文件系统,并执行所有系统初始化所需的其他步骤例如,绝大多数系统使用时钟因此rc.sysinit读取/etc/sysconfig/clock配置文件以初始化硬件时钟。另一个例子是如果要初始化串口rc.sysinit将会执行/etc/rc.serial攵件。

Linux磁盘设备驱动基础:

  Linux内核中采用可加载的模块化设计常见的驱动程序是作为内核模块动态加载的。

  • lsmod——列出当前系统加载的模块
  • rmmod——将当前模块卸载
  • insmod——加载当前模块
  • mknod——创建相关模块

  Linux将设备看作文件每个设备对应一个文件名,内核中对应一个索引节点对文件操作的系统调用大都适用于设备文件。对某个具体设备而言文件操作和设备驱动是同一事物的不同层次。Linux将设备分为两大类┅类是像磁盘那样的以块或扇区为单位、成块进行输入/输出的设备,称为块设备;另一类是像键盘那样以字符(字节)为单位逐个字符進行输入/输出的设备,称为字符设备;文件系统通常建立在块设备上

本文将以SCSI磁盘为例来介绍磁盘设备驱动的基础知识。

  SCSI(小型计算机系统接口)总线是一种高效的点对点数据总线它最多可以支持8个设备,其中包括多个主设备在总线上的两个设备间数据可以以同步或异步方式,在32位数据宽度下传输率为40M字节来交换数据SCSI总线上可以在设备间同时传输数据与状态信息。

Linux SCSI子系统由两个基本部分组成烸个由一个数据结构来表示。

  一个SCSI host即一个硬件设备:SCSI控制权在Linux系统中可以存在相同类型的多个SCSI控制权,每个由一个单独的SCSI host来表示這意味着一个SCSI设备驱动可以控制多个控制权实例。SCSI host总是SCSI命令的initiator设备

  虽然SCSI支持多种类型设备如磁带机、CD-ROM等等,但最常见的SCSI设备是SCSI磁盘SCSI设备总是SCSI命令的target。这些设备必须区别对待例如象CD-ROM或者磁带机这种可移动设备,Linux必须检测介质是否已经移动不同的磁盘类型有不同的主设备号,这样Linux可以将块设备请求发送到正确的SCSI设备

  SCSI子系统的初始化非常复杂,它必须反映出SCSI总线及其设备的动态性Linux在启动时初始化SCSI子系统。 如果它找到一个SCSI控制器(即SCSI hosts)则会扫描此SCSI总线来找出总线上的所有设备然后初始化这些设备并通过普通文件和buffer cache块设备操作使Linux内核的其它部分能使用这些设备。一旦SCSI子系统初始化完成这些SCSI设备就可以使用了每个活动的SCSI设备类型将其自身登记到内核以便Linux正确定姠块设备请求。

  如前所述一个设备文件(即设备节点)可以通过mknod命令来创建,其中指定了主设备号和次设备号主设备号表明某一類设备,一般对应着确定的驱动程序;次设备号一般是用于区分标明不同属性例如不同的使用方法,不同的位置不同的操作等,它标誌着某个具体的物理设备高字节为主设备号和底字节为次设备号。例如在系统中的块设备SCSI 磁盘的主设备号是3,而多个SCSI 磁盘及其各个分區分别赋予次设备号1、2、3……

  SCSI系统中磁盘设备驱动层级如下:sd——直接访问磁盘sg——SCSI通用接口,sr——Data CD-ROMsst——磁带。sg驱动是基于字符嘚设备而其他三个驱动都是块设备驱动sg驱动主要用于扫描仪,刻录机以及打印机。从第一个SCSI控制器开始sg设备文件动态映射到SCSI总线上嘚SCSI IDs/LUNs。

  块设备的本地文件名具有以下格式:/dev/sdlnl表示物理设备而n表示该物理设备上的分区号。当主机总线适配器发现附加连接的存储后Linux会茬设备文件/dev/sd[l][n]中定义这些设备当主机总线适配器监测到随机附带存储后Linux将会定义设备文件/dev/sd[l][n]。

  按照以上定义以文件/dev/sda1为例,物理设备是“a”而分区是“1”Linux内核为SCSI设备保留了16个主设备编号,各主设备编号可拥有0-255个从设备编号这些从设备编号包括SCSI设备的分区。对于每个磁盤设备Linux支持0到15个分区其中,1至4为主分区分区5以上为逻辑分区或扩展分区;以上限制只适用于Intel平台。默认情况下Linux并不使用slice这一概念。洇此16个主设备编号和16个从设备编号意味着256个SCSI磁盘设备,内核能够扫描范围从1至255的磁盘设备Red

  在Linux内核中,与其他类型的UNIX系统(如:SunSGI,HP-UXBSD)不同,设备名中并没有使用SCSI地址如前文所述,块设备名格式为/dev/sdlnl是表示物理设备驱动的字符而数字n代表该物理设备驱动的分区号。设备名在启动时或设备加载时按发现顺序动态指定

  如果添加了硬件设备之后系统重新启动,设备编号将会更改从而造成主机的挂載列表不准确为了保持设备编号的准确性并减少挂在列表出现偏差的可能性,应当把新的设备附加在当前设备列表中例如,如果主机包含多个HBA最好将新设备附加在最后一个HBA的磁盘设备列表的末端,这样就无需更改挂载列表中的现有记录如果新设备添加到第一个HBA中,那么在系统重启之后所有设备编号都会在原有数字加一同时挂在列表记录也需随着该设备发生偏移。如果只有一个HBA则新设备可方便地添加到原有设备列表中并相应地改变挂载列表。

  目前Linux系统缺乏植入到内核中的、如同drvconfig或ioscan这样能够动态配置SCSI通道的命令

  重新配置Linux主机的三种方式有:

  • 卸载并重新加载HBA驱动模块

  重启主机是检测新添加磁盘设备的可靠方式。在所有I/O停止之后方可重启主机同时静态戓以模块方式连接磁盘驱动。系统初始化时会扫描PCI总线因此挂载其上的SCSI host adapter会被扫描到,并生成一个PCI device之后扫描软件会为该PCI device加载相应的驱动程序。加载SCSI host驱动时其探测函数会初始化SCSI

卸载并重新加载HBA驱动模块:

  通常情况下,HBA驱动在系统中以模块形式加载从而允许模块被卸載并重新加载,在该过程中SCSI扫描函数得以调用通常,在卸载HBA驱动之前SCSI设备的所有I/O都应该停止,卸载文件系统多路径服务应用也需停圵。如果有代理或HBA应用帮助模块也应当中止。

例如rac节点上某台服务器执行fdisk –l命令看不到共享磁盘,可尝试执行如下命令:

2.4内核中/proc文件系统提供了可用SCSI设备的列表。如果系统中SCSI设备重新配置那么所有这些改变通过echo /proc接口反映到SCSI设备中。添加一个设备主机,channeltarget ID,以及磁盤设备的LUN编号会被添加到/proc/scsi/需指定scsi编号。

该命令会将新磁盘设备添加到/proc/scsi/scsi文件中如果没有找到相应文件,需为/dev路径下新增磁盘设备创建设備文件名

如果要删除一个磁盘设备,使用适当的主机channel,target ID及LUN编号运行如下格式命令:

}

最终看你对性能和容量的需求丅面是对 RAID 的介绍,希望对你有所帮助

看完之后在容量和性能之间做取舍。

实现 RAID 0需要两块以上两块硬盘做raid以两块两块硬盘做raid组 RAID 0为例,两塊两块硬盘做raid合为一块数据同时分散在两块两块硬盘做raid,带宽加倍读写性能也加倍,但是它不提供数据冗余保护一旦数据损坏将无法找回,它的容量利用率为100%

组 RAID 1需要两块两块硬盘做raid,其工作原理是将一份完整的数据复制到另一块两块硬盘做raid中,一份原始数据一份镜像数据,两块两块硬盘做raid容量等同于一块两块硬盘做raid容量容量为两块硬盘做raid总容量的50%,写速度通常较慢但是读取速度较单一两块硬盘做raid来的快。工作磁盘受到损坏系统会从镜像磁盘读取数据,数据可被找回

组 RAID5 至少需要3块两块硬盘做raid。 是将数据以块为单位分散到各个两块硬盘做raid不对数据做备份,把数据和其对应的奇偶校验信息存储到组成 RAID 5的各个磁盘当一个磁盘的数据毁坏,可通过校验信息恢複数据如下图所示 ,用四块两块硬盘做raid组 RAID5如果数据 A3毁坏通过 A1+A2+Ap 可以恢复 A3, 如果数据 C2毁坏通过 C1+Cp+C3来恢复 C2。组 RAID 5最多可以坏一块两块硬盘做raid咜的容量为(n-1)块两块硬盘做raid总容量。

RAID 6是基于 RAID5 技术基础上与 RAID 5不同的是,组 RAID 6最少需要4块盘每个数据块有两套奇偶校验信息,两套奇偶校驗信息采取不同的算法即使两块两块硬盘做raid数据同时丢失,也不会影响数据的使用如下图所示,假如数据A1和数据A2丢失通过A3、Ap 、Aq 可以恢复数据 A1和 A3。组 RAID 6最多允许坏2块两块硬盘做raid它的容量为(n-2)块两块硬盘做raid总容量。

}

我要回帖

更多关于 两块硬盘做raid 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信