红联Linux门户
Linux帮助

Raid 技术学习

发布时间:2005-06-07 00:21:03来源:红联作者:ming
知识拓展: http://www.scsi.cn/knowledge/knowledge_list.php?news_id=588 RAID技术详解

http://www.it.com.cn/f/server/051/4/53660.htm 什么是独立磁盘冗余阵列?
http://download.chinaitlab.com/soft/452.htm 高端服务器RAID配置录像
http://www.net130.com/2004/8-31/85635.html RAID全解
http://www-900.ibm.com/developerWorks/cn/linux/filesystem/raid1/index.shtml 新 Linux 2.4 内核中的软件 RAID

什么是RAID?

RAID(Redundant Array of Inexpensive Disks) 称为独立磁盘冗余阵列,RAID的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大,价格昂贵的磁盘。
RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。

磁盘阵列其实也分为软阵列 (Software Raid)和硬阵列 (Hardware Raid) 两种. 软阵列即通过软件程序并由计算机的 CPU提供运行能力所成. 由于软件程式不是一个完整系统故只能提供最基本的 RAID容错功能. 其他如热备用硬盘的设置, 远程管理等功能均一一欠奉. 硬阵列是由独立操作的硬件提供整个磁盘阵列的控制和计算功能. 不依靠系统的CPU资源.
由于硬阵列是一个完整的系统, 所有需要的功能均可以做进去. 所以硬阵列所提供的功能和性能均比软阵列好. 而且, 如果你想把系统也做到磁盘阵列中, 硬阵列是唯一的选择. 故我们可以看市场上 RAID 5 级的磁盘阵列均为硬阵列.(2001)
软件RAID使你不必购买昂贵的硬件RAID控制器和附件就能极大增强linux磁盘的IO性能和可靠性。由于Linux RAID是用软件实现的,所以他灵活速度快,使用软件RAID,可以实现将几个物理磁盘合并成一个更大的虚拟设备,达到性能改进和数据冗余的目的。

软件RAID的级别
目前用于Linux 2.4内核的软件RAID支持以下级别:线性模式,RAID0, RAID1, RAID4和RAID5.
线性模式:
将两个或更多的磁盘组合到一个物理设备中,磁盘不必具有相同的大小。因为磁盘彼此间是附加在一起的,所以写入RAID设备时首先填满磁盘0,然后是磁盘1以此类推。
该级别中没有冗余。如果一块磁盘出现鼓掌,那么很可能会丢失所有数据。不过因为文件系统只是丢失一个大的连续数据块,所以可以非常幸运地恢复一些数据。
对于单独的读和写,读取和写入性能不会提高。但是如果几个用户同时使用这一设备,并且一个用户实际使用第一个磁盘,而另一个用户正访问第二块磁盘上的数据,那么将会提高性能。

RAID0
也成为分带(stripe)模式,它与线性模式类似,只不过读取和写入是在设备上并行完成的,设备的大小应该大致相等,因为所有的访问都是并行完成的,所有的设备都是同等填充的,如果一个设备比其他设备大的多,那么RAID设备中仍将使用额外的空间,但在写入RAID设备的高端部分时只能访问那个大的磁盘,会降低性能。
与线性模式一样,RAID0也没有冗余,与线性模式不同的是,如果驱动器出现故障,那么将无法恢复任何数据,如果从RAID0中取出一个驱动器,那么RAID设备将不仅丢失一个连续的数据块,而是整个设备上都将充满小的空洞。
因为读取和写入都是在设备上并行完成的,读取和写入性能都将会增加,这通常是运行RAID0的主要原因,如果磁盘总线足够快,可以非常接近N*P MB/S

RAID1
一个真正具有冗余的模式,RAID1可以用于两个或多个磁盘,拥有0块或多块备用磁盘,这种模式在其他一些磁盘上保留一块磁盘信息的准确镜像。当然磁盘大小必须相等,如果不等,你的设备将具有最小磁盘的大小。
如果最多驱除了N-1块磁盘(或出现故障),那么所有的数据仍然保持不变,如果有备用的磁盘,而且系统在故障中并没有被破坏,那么在检测到驱动器故障后,会立即在一块备用磁盘上开始重建镜像。
RAID的写入性能比在一个单独的设备上稍差一些,这是因为写入数据的相同副本必须发送到列中的每一个磁盘上,读取性能通常更为糟糕,但在2.4内核中已经得到大大的改进。

RAID4
RAID 4将数据条块化并分布于不同的磁盘上,但条块单位为块或记录。RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。阵列大小是(N-1)*S , S是阵列中最小驱动器的大小
如果一个驱动器出现故障,那么可以使用奇偶校验信息来重建所有数据,如果两个驱动器出现故障,那么所有数据都将丢失。

RAID5
在希望结合大量物理硬盘并且仍然保留一些冗余时,RAID5可能是最有用的RAID模式,RAID5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。就想RAID4一样,得到的RAID5设备的大小是(N-1)*S .
RAID5和RAID4最大的区别就是奇偶校验信息均匀分布在各个驱动器上,这样就避免了RAID4中出现的瓶颈问题,如果其中一块磁盘出现故障,那么由于奇偶校验信息,所以所有的数据仍然可以保持不便,如果可以使用磁盘,那么在设备故障之后,将立即开始重建数据。如果两块硬盘同时出现故障,那么所有数据就会丢失。RAID5可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。
读取和写入性能通常会很高,但很难预测其提高程度。
文章评论

共有 22 条评论

  1. 657129880@qq.co 于 2013-04-30 17:15:06发表:

    谢谢分享!!!

  2. 空中的云 于 2012-11-23 22:01:56发表:

  3. panda6401 于 2010-02-04 16:44:23发表:

  4. tangzhi 于 2009-08-28 10:14:10发表:

    学习了,真的太感谢了

  5. ycfh1ss 于 2009-08-27 13:40:36发表:

    thanks

  6. at_123 于 2009-08-23 20:07:24发表:

    ☆°.☆..☆°.☆..☆° ☆..☆°
    ????????????????????????
    ?支持楼主??再接再厉??燕过留声??人过留帖?
    ?◎??◎??◎??◎??◎??◎??◎??◎?
    °.☆°...°∴°.°...°∴°...°∴°.☆......

  7. 194.88.214.* 于 2007-07-19 06:02:17发表:

    http://www.special-ringtones.net/mp3/ ringtones site. Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . from website .

  8. 194.88.214.* 于 2007-07-19 06:02:13发表:

    http://www.special-ringtones.net/mp3/ ringtones site. qwest ringtones: Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . nextel ringtones from website .

  9. 194.88.214.* 于 2007-07-19 06:01:42发表:

    http://www.special-ringtones.net/mp3/ ringtones site. qwest ringtones: Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . nextel ringtones from website .

  10. 194.88.214.* 于 2007-07-19 06:01:38发表:

    http://www.special-ringtones.net/mp3/ ringtones site. qwest ringtones: Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . nextel ringtones from website .

  11. 194.88.214.* 于 2007-07-19 06:00:50发表:

    http://www.special-ringtones.net/mp3/ ringtones site. qwest ringtones: Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . nextel ringtones from website .

  12. 194.88.214.* 于 2007-07-19 06:00:42发表:

    http://www.special-ringtones.net/tones/ real ringtones. motorola ringtones: Best free samsung ringtones, Cingular ringtones and more, Ringtones for free . http://www.special-ringtones.net/ring/ [link=http://www.special-ringtones.net]tracfone ringtones[/link] from site .

  13. 星光依然 于 2005-11-27 17:21:33发表:

    好像不错啊

  14. Mrlinux 于 2005-10-19 00:31:25发表:

    顶下

  15. aini 于 2005-10-07 00:16:25发表:

    再顶上去

  16. cooc 于 2005-09-02 00:24:21发表:

  17. bluesky22 于 2005-08-19 18:31:49发表:

    强烈支持~~

  18. aini 于 2005-08-16 00:15:14发表:

    顶了

  19. 007 于 2005-08-02 00:02:03发表:

    学习了----------

  20. 风雨无阻 于 2005-07-12 00:26:10发表:

    支持下

  21. ming 于 2005-06-07 00:22:38发表:

    RAID 实现
    通常情况下,RAID盘是通过专用的RAID卡进行的。而在Linux 环境下,我们可以利用软件raidtool达到RAID功能

    第一种方法:

    自行下载并编译raidtools软件包,较早版本的raidtool软件包名为md,现在已正式更名为raidtool。

    如果你已经从网上下载了raidtools-0.41.tar.gz软件包。解开后,自行编译,步骤如下:

    $gunzip -d raidtools-0.41.tar.gz

    $tar -xvf raidtools-0.4.1.tar

    在使用raidtools之前,首先要知道目前正在使用的核心是否支持md。如果你正在使用的核心是2.0.x,并且不是

    自己编译过的话,大多数情况下是支持软RAID的。如果不能确定,则应自己编译核心。在配置时,应选择对md的支持。

    确定了正在使用的核心支持RAID。则编译raidtools软件包如下:

    $cd raidtools-0.41

    $./configure

    $ make

    $make install ##make install在/dev下产生md0-md3共4个设备。

    OK, 安装完成。

    在使用raidtool前,首先决定自己要使用的RAID的种类。目前使用raidtool可以作RAID0,RAID1,RAID5。


    第二种方式:如果你安装的Linux发行版较新,其中已经带有raidtool工具,那么就不必再下载软件并自己编译了。


    raid0
    要求:有两个或两个以上的磁盘
    这里创建RAID0 两个磁盘
    首先使用man raidtab查看配置文件结构
    建立一个文件/etc/raidtab,文件内容如下:
    raiddev /dev/md0 指明要创建的 RAID 卷

    raid-level 0

    nr-raid-disks 2 指定您的阵列中的磁盘数目

    persistent-superblock 1 初始化阵列时,一个特殊的超级块被写入参与阵列的所有 磁盘的开始位置,这允许内核从所涉及的磁盘上直接读取RAID设备的配置,而不是从某些配置文件中读取。
    chunk-size 32 注意“chunk-size ”一句不能少,指定RAID- 使用的块大小为32KB。RAID- 卷会以32KB的块写入其组成分区,

    device /dev/hdb1 指定实际的块设备

    raid-disk 0 其在阵列中的位置,从零开始.

    device /dev/hdd1

    raid-disk 1

    然后,运行以下命令初始化阵列:

    #mkraid /dev/md0

    这样就可以生成一个新的设备:/dev/md0。

    查看一下/proc/mdstat 可以看到设备正在运行。
    lsraid -a /dev/md0 查看RAID分区状况

    启用软raid方法:

    #raidstart /dev/md0

    现在就可以格式化、装载和使用/dev/md0设备了。

    Eg:
    建立新的文件系统


    建立新的ext3文件系统. 只要运行. mke2fs -j /dev/hdXX. 命令在该设备上建立新的ext3
    文件系统。
    #mke2fs -j /dev/md0 或#mkfs.ext3 /dev/md0

    将/dev/md0设备挂载(mount)上来。
    #mount /dev/md0 /mnt/md0


    RAID5
    要求:系统中有三个或更多大小大致相同的设备。
    这里创建RAID-5,使用3个RAID磁盘,1个备用磁盘
    1>配置/etc/raidtab文件
    raiddev /dev/md0
    raid-level 5
    nr-raid-disks 3
    nr-spare-disks 1
    persistent-superblock 1
    chunk-size 32

    device /dev/hda9
    raid-disk 0
    device /dev/hda10
    raid-disk 1
    device /dev/hda11
    raid-disk 2
    device /dev/hda12
    spare-disk 0 添加备用磁盘,磁盘主要起备用作用,一旦某一磁盘损坏可以立即顶上,这里也可以不要


    2>使用mkraid /dev/md0创建RAID阵列
    3>使用 lsraid -a /dev/md0 查看RAID分区状况
    4>查看一下/proc/mdstat 可以看到设备运行情况
    5>mkfs.ext3/dev/md0将RAID分区格式化为ext3格式
    6>mount /dev/md0 /mnt/md0


    检验RAID的效果

    我们可以使用以下步骤检验RAID的效果。

    1.dd if=/dev/zero of=/dev/hda9 bs=100000000 count=10

    将RAID的第一个磁盘分区hda9全部置0;bs表示一次写多少位,count表示写多少次。这里一定要使写入的数据大于磁盘分区的容量,否则由于RAID的作用,数据会自动恢复原有值。如下所示:

    [root@localhost root]
    # dd if=/dev/zero of=/dev/hda9 bs=100000000 count=10
    dd: writing `/dev/hda9': No space left on device
    2+0 records in
    1+0 records out



    2.用lsraid -a /dev/md0查看到/dev/hda9数据全为0

    如下所示:

    [root@localhost root]# lsraid -a /dev/md0
    lsraid: Device "/dev/hda9" does not have a valid raid superblock
    lsraid: Device "/dev/hda9" does not have a valid raid superblock
    lsraid: Device "/dev/hda9" does not have a valid raid superblock
    lsraid: Device "/dev/hda9" does not have a valid raid superblock
    [dev 9, 0] /dev/md0 86391738.19BEDD09.8F02C37B.51584DBA online
    [dev ?, ?] (unknown) 00000000.00000000.00000000.00000000 missing
    [dev 3, 10] /dev/hda10 86391738.19BEDD09.8F02C37B.51584DBA good
    [dev 3, 11] /dev/hda11 86391738.19BEDD09.8F02C37B.51584DBA good
    [dev 3, 12] /dev/hda12 86391738.19BEDD09.8F02C37B.51584DBA spare



    3.raidstop /dev/md0

    4.raidstart /dev/md0

    则/dev/hda9的数据恢复正常,说明RAID的数据校验功能已起作用。

    在使用Linux的过程中,可以随时创建RAID来提高数据的可靠性和I/O性能,甚至可以将多个硬盘剩余的较小空间组合成一个较大空间。

  22. ming 于 2005-06-07 00:22:05发表:


    RAID问答篇
    1.问:我应该选择怎样的RAID解决方案,带RAID功能的主板?RAID控制卡?还是软件RAID?
    答:其实RAID解决方案只有高端和低端之分,对于绝大部分的廉价RAID解决方案来讲,其构架中都不包含运算部分,因此对CPU的依赖性比较强,低速的CPU很难胜任这种工作,当然,对于较新的CPU如PⅢ、新赛扬、雷鸟、毒龙等来说,这种运算完全可以承受,但是为了保证RAID系统的稳定运行,并且为了避免RAID拖累系统性能,我们强烈建议用户使用主频1GHz以上的CPU。
    至于是选择RAID卡还是购买带集成RAID功能的主板,则要依据用户的需求而定,一般来说,使用RAID卡能得到比较稳定的性能,但是会占用一个宝贵的扩展槽,而且成本较高;如果是正在准备升级主板或新装机的用户,集成RAID芯片的主板则是以最低成本实现RAID功能的首选。
    2.问:我使用了RAID系统,但是并没有感觉到速度有明显的提升,这是为什么?
    答:对于RAID系统有数种标准,对于RAID 1、RAID 5等标准的磁盘阵列,主要追求数据的可靠性,所以尽管是并行存储,但由于需要对数据进行校验,所以它们的写性能会受到一些影响,对于普通用户来说,会感到速度提升并不明显。当然,对于一些需要大量读取的应用,它们的优势还是比较大的。
    3.问:我使用了RAID 0标准的磁盘阵列方式,我听说这样会导致数据非常不安全,我是不是应该使用RAID 0+1方式?
    答:对于普通用户而言,RAID 0的安全性还是可以承受的,但对于重要数据而言,RAID 0显然是比较危险的方式,并且RAID 0阵列中的磁盘数量越多,出现问题的几率越大。由于RAID 0使用分割数据的方式且没有冗余,一旦某块磁盘失效,将会对所有数据造成毁灭性的打击,相对的,其他RAID方式均提供了冗余盘(或数据块)用来备份或者恢复数据。因此我们建议用户不要在RAID 0阵列中存储重要数据或在其上安装系统,因为进行大量临时交换文件的存储和交换才是RAID 0真正的优势所在。
    4.问:我有两块规格并不一致的硬盘,我能不能使用RAID?效果怎样?
    答:可以使用RAID 0方式,但是要注意的是,这样构建的RAID 0,总容量将是较小的磁盘的容量×磁盘总数,因此可能会造成一些资源的浪费。当然电脑如果拥有比较强劲的运算能力并且使用Windows 2000/XP操作系统,使用软件RAID就可以避免这种损失,详情请参看本篇内的“动态磁盘”相关介绍。
    5.问:使用RAID和使用SCSI硬盘有什么不同,哪一种性价比更好?
    答:我们这里仅仅讨论IDE-RAID,在通常情况下,SCSI能够提供更好的稳定性和更快的速度,但是价格则是相当昂贵。一款7200转的9.2GB/Ultra160 SCSI硬盘价格会高达1500元左右,相比之下,同样价位的普通IDE硬盘容量会达到80GB以上。
    我们可以对比IDE-RAID和SCSI RAID,我们使用4块迈拓(Maxtor)金钻七代80GB硬盘组成RAID 0+1,选用支持ATA/133的HighPoint RocketRAID 404 RAID卡,这套系统的总价在8000元以下*,大约相当于某10 000转73.4GB容量的SCSI硬盘,使用Ultra160 SCSI接口/4MB缓存,并且配备支持Ultra160的SCSI卡。
    当然,SCSI硬盘有着许多普通IDE硬盘无法比拟的优点,例如高传输率、低CPU占用率和支持热插拔等,但对个人用户而言,它的性价比还是很低,我们不得不将目光继续留在我们的IDE硬盘上。
    在Oracle里使用RAID
    RAID,即廉价磁盘冗余阵列,是一种将相同的数据放在多个硬盘上不同位置的方法。RAID有很多不同的类型(叫做RAID“级”),每种类型都有其相对的优势和劣势。


    对于Oracle9i的数据库而言,很多RAID方案都不具备Oracle数据库所要求的高性能。大多数Oracle的专家都会选择一种结合了镜像(mirroring)和数据块分段(block-level striping)的RAID方案。
    要注意的是,使用RAID并不能防止磁盘灾难性的故障,这一点极其重要。Oracle专门推荐将所有的付诸使用的数据库都运行在ARCHIVELOG模式下,而不去考虑RAID的架构。Oracle还建议定期进行Oracle的备份。
    要记住,I/O子系统由很多组件组成----包括控制器、通道、磁盘适配器,以及SCSI适配器----这些组件中的任何一者发生崩溃都会导致你数据库无法挽回的磁盘错误。现在让我们来看看Oracle数据库最常用的RAID架构吧。
    RAID 0
    RAID 0通常指的是数据块的分段技术,它是在磁盘设备上实现Oracle数据库负载平衡的卓越方法,但是由于它没有提供数据的备份,因而完全无法提供高可用性。和手动的数据文件分段(你要手动将Oracle的表格空间分割放进小的数据文件里)不一样,Oracle会利用RAID 0自动地将一个数据块进行分段并一次放进所有的磁盘设备里。在这种方式下,每个数据文件在每个磁盘上都存有其一部分内容,这样磁盘I/O的负载会变得非常平衡。
    RAID 1
    RAID 1也叫做磁盘镜像。由于磁盘都是被相互复制,所以RAID 1可以做成双重或者三重镜像。根据RAID 1架构的设计,如果一个磁盘发生错误,那么I/O子系统就会自动切换到各个复制磁盘中的一个上,而不需要中断服务。Oracle的专家会在要求高可用性的时候使用RAID 1。对于三重镜像而言,Oracle数据库的平均无故障时间(mean time to failure,MTTF)可以长达数十年。
    RAID 0+1(RAID 10)
    RAID 0+1是数据块分段和磁盘镜像的组合。RAID 0+1一出现就淘汰了Oracle这一层的分段技术,因为RAID 0+1的分段是在数据块这一层的,它分配表格块的方式是:每个磁盘上一个数据块,跨越每个磁盘设备。
    RAID 0+1也是一个远比(单纯的)分段技术好得多的替代方案,因为它将负载平均地分配到所有的磁盘设备上,也就是说负载的上升和降低都被平均地分配到了所有的磁盘上。这就减轻了Oracle系统管理员在各个磁盘上手动地进行Oracle表格分段的负担。
    RAID 5
    有些更新的基于硬件的RAID 5存储方案极其适合于作为数据仓库。RAID 5是打造Oracle数据仓库的好方法,因为在这里负载的速度不是很重要,而且系统I/O的主要职责在于只读的活动。