RAID(Redundant Array ofInexpensiveDisks)称为廉价磁盘冗余阵列。RAID的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。

目前RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。其中在Linux下通过自带的软件就能实现RAID功能,这样便可省去购买昂贵的硬件RAID控制器和附件就能极大地增强磁盘的IO性能和可靠性。由于是用软件去实现的RAID功能,所以它配置灵活、管理方便。同时使用软件RAID,还可以实现将几个物理磁盘合并成一个更大的虚拟设备,从而达到性能改进和数据冗余的目的。当然基于硬件的RAID解决方案比基于软件RAID技术在使用性能和服务性能上稍胜一筹,具体表现在检测和修复多位错误的能力、错误磁盘自动检测和阵列重建等方面。在本节将详细讲述如何在红旗Linux服务器上创建和维护软RAID。

RAID级别介绍

随着RAID技术经过不断的发展,现已有RAID 0到RAID 6七种基本的RAID级别,同时还有RAID 0和RAID 1的组合形式,称为RAID10。其中的级别并不代表技术的高低,而RAID 2和RAID 4基本上不再使用了,RAID 3则是由于实现起来太复杂也很少使用。目前这些常用的RAID级别Linux内核都能够支持,本节就以Linux 2.6的内核为例,在Linux 2.6内核中的软RAID可支持以下级别:RAID 0、RAID 1、RAID 4、RAID 5以及RAID 6等。Linux 2.6的内核除支持以上几种RAID级别外,还可支持LINEAR(线性模式)的软RAID,线性模式是将两个或更多的磁盘组合到一个物理设备中,磁盘不必具有相同的大小,在写入RAID设备时会首先填满磁盘A,然后是磁盘B,以此类推。

RAID 0

也称为条带模式(striped),即把连续的数据分散到多个磁盘上存取,如图1所示。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行RAID 0的主要原因。但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。

图1 RAID 0示意图

RAID 1

RAID 1又称为镜像(Mirroring),一个具有全冗余的模式,如图2所示。RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。

图2 RAID 1示意图

RAID 4

创建RAID 4需要三块或更多的磁盘,它在一个驱动器上保存校验信息,并以RAID 0方式将数据写入其它磁盘,如图3所示。因为一块磁盘是为校验信息保留的,所以阵列的大小是(N-l)*S,其中S是阵列中最小驱动器的大小。就像在RAID 1中那样,磁盘的大小应该相等。

如果一个驱动器出现故障,那么可以使用校验信息来重建所有数据。如果两个驱动器出现故障,那么所有数据都将丢失。不经常使用这个级别的原因是校验信息存储在一个驱动器上。每次写入其它磁盘时,都必须更新这些信息。因此,在大量写入数据时很容易造成校验磁盘的瓶颈,所以目前这个级别的RAID很少使用了。

图3 RAID 4示意图

RAID 5

在希望结合大量物理磁盘并且仍然保留一些冗余时,RAID 5可能是最有用的RAID模式。RAID 5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。就像RAID 4一样,得到的RAID5设备的大小是(N-1)*S。

RAID5与RAID4之间最大的区别就是校验信息均匀分布在各个驱动器上,如图4所示,这样就避免了RAID 4中出现的瓶颈问题。如果其中一块磁盘出现故障,那么由于有校验信息,所以所有数据仍然可以保持不变。如果可以使用备用磁盘,那么在设备出现故障之后,将立即开始同步数据。如果两块磁盘同时出现故障,那么所有数据都会丢失。RAID5可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。

图4 RAID 5示意图

RAID 6

RAID 6是在RAID 5基础上扩展而来的。与RAID 5一样,数据和校验码都是被分成数据块然后分别存储到磁盘阵列的各个硬盘上。只是RAID 6中增加一块校验磁盘,用于备份分布在各个磁盘上的校验码,如图5所示,这样RAID 6磁盘阵列就允许两个磁盘同时出现故障,所以RAID 6的磁盘阵列最少需要四块硬盘。

图5 RAID 6示意图

创建软RAID

在红旗Linux服务器中是通过mdadm工具来创建和维护软RAID的,mdadm在创建和管理软RAID时非常方便,而且很灵活。mdadm常用的参数有如下:

--create或-C:创建一个新的软RAID,后面接raid设备的名称。例如,/dev/md0,/dev/md1等。

--assemble或-A:加载一个已存在的阵列,后面跟阵列以及设备的名称。

--detail或-D:输出指定RAID设备的详细信息。

--stop或-S:停止指定的RAID设备。

--level或-l:设置RAID的级别,例如,设置“--level=5”则表示创建阵列的级别是RAID 5。

--raid-devices或-n:指定阵列中活动磁盘的数目。

--scan或-s:扫描配置文件或/proc/mdstat文件来搜索软RAID的配置信息,该参数不能单独使用,只能配置其它参数才能使用。

下面将通过一个实例来讲述通过mdadm如何实现软RAID的功能。

【实例1】

某台机器上有4块空闲的硬盘,分别是/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde,并用这四块硬盘来创建来创建一个RAID 5,具体操作步骤如下:

1、创建分区

首先使用“fdisk”命令在每块硬盘上创建一个分区,操作如下:

# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-102, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-102, default 102):

Using default value 102

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

针对其余几块硬盘也做相同操作,如果是直接基于磁盘来创建RAID设备,那么就可以跳过这一步。

2、创建RAID 5

创建完/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个分区后,下面就可以来创建RAID 5了,其中设定/dev/sde1作为备用设备,其余为活动设备,备用设备的作用是一旦某一设备损坏可以立即使用备用设备替换。操作命令如下:

# mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[b-e]1

mdadm: array /dev/md0 started.

其中“--spare-devices=1”表示当前阵列中备用设备只有一块,即作为备用设备的“/dev/sde1”,若有多块备用设备,则将“--spare-devices”的值设置为相应的数目。成功创建完成RAID设备后,通过如下命令可以查看到RAID的详细信息:

# mdadm --detail /dev/md0

/dev/md0:

Version : 00.90.01

Creation Time : Mon Jan 22 10:55:49 2007

Raid Level : raid5

Array Size : 208640 (203.75 MiB 213.65 MB)

Device Size : 104320 (101.88 MiB 106.82 MB)

Raid Devices : 3

Total Devices : 4

Preferred Minor : 0

Persistence : Superblock is persistent

Update Time : Mon Jan 22 10:55:52 2007

State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 64K

Number Major Minor RaidDevice State

0 8 17 0 active sync /dev/sdb1

1 8 33 1 active sync /dev/sdc1

2 8 49 2 active sync /dev/sdd1

3 8 65 -1 spare /dev/sde1

UUID : b372436a:6ba09b3d:2c80612c:efe19d75

Events : 0.6

3、创建RAID的配置文件

RAID的配置文件名为“mdadm.conf”,默认是不存在的,所以需要手工创建,该配置文件存在的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理。“mdadm.conf”文件内容包括:由DEVICE选项指定用于软RAID的所有设备,和ARRAY选项所指定阵列的设备名、RAID级别、阵列中活动设备的数目以及设备的UUID号。生成RAID配置文件操做如下:

# mdadm --detail --scan > /etc/mdadm.conf

但是当前生成“mdadm.conf”文件的内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:

# vi /etc/mdadm.conf

DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

ARRAY /dev/md0 level=raid5 num-devices=3 UUID=b372436a:6ba09b3d:2c80612c:efe19d75

如果没有创建RAID的配置文件,那么在每次系统启动后,需要手工加载软RAID才能使用,手工加载软RAID的命令是:

# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

mdadm: /dev/md0 has been started with 3 drives and 1 spare.

4、创建文件系统

接下来就只需要在RAID设备上创建文件系统就可使用了,在RAID设备上创建文件系统和在分区或磁盘上创建文件系统的方法一样。在设备“/dev/md0”上创建ext3的文件系统命令如下:

# mkfs.ext3 /dev/md0

创建完文件系统后,将该设备挂载上就可正常的使用了。如果要创建其它级别的RAID,其步骤和创建RAID 5基本都一样,区别在于指定“--level”值的时候,需要将该值设置为相应的级别。

维护软RAID

软RAID虽然很大程度上能保证数据的可靠性,但是在日常的工作中,有时可能需要对RAID进行调整以及不排除RAID设备物理介质损坏的可能等相关问题

,当遇到这些情况时,那么同样可以通过“mdadm”命令来完成这些操作。下面也将通过一个实例来介绍更换RAID故障磁盘的完整过程。

【实例2】

以前面的【实例1】为基础,假定其中的“/dev/sdc1”设备出现故障时,更换一个新的磁盘,整个过程的详细说明如下:

1、模拟故障磁盘

在实际中,当软RAID检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作,所以这里需要将/dev/sdc1标记为出现故障的磁盘,命令如下:

# mdadm /dev/md0 --fail /dev/sdc1

mdadm: set /dev/sdc1 faulty in /dev/md0

由于【实例1】中的RAID 5设置了一个备用设备,所以当有标记为故障磁盘的时候,备用磁盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过“/proc/mdstat”文件可查看到当前阵列的状态,如下:

# cat /proc/mdstat

Personalities : [raid5]

md0 : active raid5 sde1[3] sdb1[0] sdd1[2] sdc1[4](F)

208640 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

[=====>...............] recovery = 26.4% (28416/104320) finish=0.0min speed=28416K/sec

unused devices:

以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如“sdc1[4](F)”,其中“[3/2]”的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;而“[U_U]”表示当前阵列可以正常

linux中RAID是什么意思,Linux中Raid的介绍相关推荐

  1. linux 使用了哪个存储阵列卡,Linux中RAID概述及配置实验

    Linux中RAID概述及配置实验 一.RAID磁盘阵列概述 RAID 0 (条带化存储) RAID 1(镜像存储) RAID 5 RAID 6 RAID 1+0(先做镜象,再做条带) RAID 0+ ...

  2. linux中dev目录的作用,Linux 的dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解 在linux下,/dev目录是很重要的,各种设备都在下面.下面简单总结一下: dev是设备(device)的英文缩写./dev这个目录对所有的用户都十分重要.因为在这个目 ...

  3. Linux常见命令作用(持续更新中,欢迎提议支持)

    Linux常见命令作用(持续更新中,欢迎提议支持) 1.ifconfig 查看ip地址 2.cd 切换工作目录(跳转路径) cd 路径 切换至工作目录"路径" 下同,指令后面都可附 ...

  4. 虚拟机linux 8.04汉化,在虚拟机中快速安装 Ubuntu 18.04

    1.准备工作:安装前的准备 2.快速安装及认识界面:安装并认识 Ubuntu,知道最常规操作 3.系统设置:添加中文支持,设置系统时区 4.安装常用软件:选择国内的镜像服务器,安装常用软件 1.准备工 ...

  5. linux用户空间 限制吗,在Linux中限制用户空间

    在Linux中限制用户的磁盘使用空间使用的是Quota,一般Quota在安装Linux时就已包括在内核中,不需要另行安装.Quota可以从两方面指定磁盘的储存限制: 使用者所能够支配的索引节点(ino ...

  6. linux中system清屏命令,Linux磁盘管理命令

    语法:df [选项] 说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况. 该命令各个选项的含义如下: -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件 ...

  7. linux sed 批量替换多个文件中的字符串

    原文: http://blog.csdn.net/kauu/article/details/1757325 一.linux sed 批量替换多个文件中的字符串 sed -i "s/oldst ...

  8. linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问

    Linux中安装MySQL 因为使用yum安装.安装过程需保证网络通畅 一.安装mysql 1.yum安装mysqlCentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql, ...

  9. go 基准测试 找不到函数_Go 中的内联优化 | Linux 中国

    本文讨论 Go 编译器是如何实现内联的,以及这种优化方法如何影响你的 Go 代码.https://linux.cn/article-12176-1.html作者:Dave Cheney译者:Xiaob ...

最新文章

  1. JAVAEclipse:could not find the main class,program will exit!
  2. IOS动态库打包导入工程报错Library not loaded: @rpath/SwiftFrame.framework/SwiftFrame
  3. Cent OS yum 安装 Adobe flash player
  4. gridview databind 会导致页面刷新马_Innodb批量页面刷盘情况下的quot;两次写quot;
  5. .Net WinForm 启用XP效果的问题
  6. 查看各类型数据库版本的SQL(Oracle/DB2/SQL Server/PG/MySQL)
  7. win7服务器未能登入,Win7提示profile服务未能登录,无法在系统中创建怎么办
  8. 搭建一个QQ机器人叫女友起床
  9. 宏晶STC单片机使用STC-ISP串口烧录失败的解决方法及实例汇总 (Ver0.99.16)
  10. 谷粒商城高级篇-商品上架
  11. 分割整数构成字母字符串(动态规划)
  12. PAYPAL使用虚拟卡的会有优势吗?
  13. ubuntu16.04服务器下安装cuda9.0+cudnn7.0+tensorflow1.6.0+Anaconda3
  14. vue功能-数字键盘
  15. python中pow函数用法_Python pow()用法及代码示例
  16. 《将月夜》——高宠儿
  17. 会议OA之会议排座送审
  18. 欢迎大家关注公众号【音视频开发训练营】
  19. 什么是嵌入式系统,什么是单片机?
  20. 闲话网名之“J0ker”

热门文章

  1. Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)...
  2. 部署glusterfs
  3. 仿真模拟-Abaqus2021、Abaqus2022 安装下载教程
  4. Faster RCNN流程图
  5. 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)
  6. Admui相关第三方插件
  7. Linux中运行可执行文件时找不到lib文件
  8. 解除IE锁定主页批处理
  9. python readline循环读取_Python 文件 readline() 方法
  10. APP内H5调试方法