RAID磁盘阵列
什么是RAID
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。
简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为玩家的一个选择,特别是需要大容量存储空间的工作,如:视频与音频制作。
最初的RAID分成不同的档次,每种档次都有其理论上的优缺点,不同的档次在两个目标间获取平衡,分别是增加数据可靠性以及增加存储器(群)读写性能。这些年来,出现对于RAID观念不同的应用。
根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。我们在本次学习过程中只学习RAID-0,RAID-1,RAID-4,RAID-5,RAID-10,RAID-50。
RAID-0
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,是分段后分散存储在这些磁盘中的。因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
一般家用我们可以考虑这种使用方式,目的是增加读写速度和存储量,但是妖姬存放及其重要的数据时最好还是单独存放。
RAID-1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
RAID-4
RAID-4至少有三块硬盘组成,两块盘用来存储数据,一块盘作为校验盘。,奇数时为1,所以当数据盘的同一位置的一个区块发生数据损坏时,可以修复,如果是两个或多个数据盘损坏就没办法进行修复。
RAID 5
RAID 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少需要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用"回写缓存"可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。
RAID 10/01
RAID 10是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。
RAID 01则是跟RAID 10的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。
当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作,可靠性较低。如果以六个硬盘建RAID 01,镜射再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘离线。因此,RAID 10远较RAID 01常用,零售主板绝大部分支持RAID 0/1/5/10,但不支持RAID 01。
RAID 50
RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成Stripe访问。由于RAID 50是以RAID 5为基础,而RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘。以RAID 50最小的6颗硬盘配置为例,先把6颗硬盘分为2组,每组3颗构成RAID 5,如此就得到两组RAID 5,然后再把两组RAID 5构成RAID 0。
RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。
RAID 50由于在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,容量利用率比RAID5要低。比如同样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。
软件模拟RAID
一般在企业里面用的都是硬件的RAID,但是我是在学习环境中,买不起硬件的RAID,学习RAID的功能还可以通过软件来进行模拟学习,我模拟的是RAID5的功能。
首先,第一步,我在虚拟机里面加了六块50G的硬盘(其实用不到这么多,但是还是可以模拟一下的嘛)。我会用这六块硬盘中的几块来进行模拟。
然后我们需要知道一个命令,就是mdadm,这个命令就是用来创造,修改增加关闭RAID的命令,使用它来完成我们对RAID的学习。现在我们先介绍一下这个命令的使用方法,然后在一步一步的完成我们的实验。
一般的,RAID设备可命名为/dev/md0、 /dev/md1、 /dev/md2、/dev/md3等。在本次试验中我们也会将RAID命令为/dev/mdX。
命令:mdadm
格式:mdadm [mode] <raiddevice> [option] <component-devices>
参数:
[mode]:
-C:创建
[option]
-n #:使用#个块设备来创建此RAID
-l #:指定要创建的RAID级别
-a{yes|no}:自动创建目标RAID设备的设备文件
-c chunk_size:指定chunk大小
-x #:指定空闲盘的个数
-A:装配
-F:监控
-D:显示RAID的详细信息
如:mdadm –D /dev/md1
管理:
-f:标记指定磁盘为损坏
-a:添加磁盘
-r:移除磁盘
<raiddevice>:/dev/md# [#={0..111}]
<component-devices>:任意块设备
Mdadm支持的RAID级别是: LINEAR/RAID0, RAID1, RAID4,RAID5, RAID6, RAID10对应的数字是:0,1,4,5,6,10
软RAID的管理
生成配置文件: mdadm –D –s >> /etc/mdadm.conf
停止设备: mdadm –S /dev/md0
激活设备: mdadm –A –s /dev/md0 激活
强制启动: mdadm –R /dev/md0
删除raid信息: mdadm --zero-superblock /dev/sdb1
观察md的状态:
cat /proc/mdstat
软RAID实验
首先,第一步,我们在虚拟机上安装了六个硬盘,如下图所示:
我们就用sdb,sdc,sdd,sde,sdf这五块硬盘做实验。
我们来用这五块盘创建一个RAID5 加一块热备盘。命令如下:
mdadm –C /dev/md0 –a yes –l 5 –n 4 –x 1 –c 1024 /dev/sd{b..f}
解释:
-C /dev/md0 :创建一个RAID块文件
-a yes:如果有此块文件则使用,没有测创建
-l 5 :级别5,也就是RAID5
-n 4 :使用四块硬盘
-x 1:将一块盘作为热备盘
-c 1024 :chunk大小为1024K
/dev/sd{b..f} :我们使用的五块硬盘
创建效果如下图:
然后我们可以使用mdadm –D /dev/md0查看一下RAID的详细信息:
由于RAID5 最大可用空间是(n-1)*min(sda,sdb,sdc,sde……),所以此RAID最大的可用空间是(4-1)*min(50G)=150G
这时候,如果我们模拟一块磁盘损坏了会发生什么呢,我们来看一下:
mdadm /dev/md0 -f /dev/sdc(破坏硬盘sdc,注意格式)
我们很容易就能发现,当我们将一块盘损坏之后,在有热备盘的情况下,热备盘会马上代替损坏的硬盘,并停止使用损坏的硬盘,其他硬盘将数据同步到启用的热备盘中。
假设在我们没有添加热备盘的情况下,根据RAID5的原理,我们依旧可以读出我们的数据,但是如果再有一块硬盘损坏的话,我们的数据就会受损了。这里不再演示。
接下来我么将坏掉的硬盘给移除掉,再添加一块新硬盘进去:
我们假装/dev/sdc是一块好硬盘,再给它加上:
我们组一个磁盘整阵列是要干嘛呢,当然是用在我们的系统上呀,接下来我们将这块盘分区并进行格式化,然后挂载在我们想要挂载的目录下:
分区命令:fdisk /dev/md0(我只将分一个区,全分)
格式化的命令我们使用:mke2fs –t ext4 –L TEST /dev/md0p1
格式化完成后,我就将这块盘挂载在/bakup目录下,完全没问题,接下来我们可以里面创建一些文件:
我们既然可以使用RAID设备自然也可以停止他们,我们可以使用一个命令来停止设备:mdadm –S /dev/md0,我们在停止设备前需要先卸载挂载的设备使用umount
设备能停止就能激活,我们使用的激活命令是mdadm –A –s /dev/md0
我们发现我们使用这个命令,但是没有得到预期的效果,RAID5并没有被激活,反而提醒我们/dev/md0这个设备没有在配置文件中指明。这是由于RAID都是由一个个的硬盘组成的,所以我们需要把一块一块的硬盘给启动起来,这样就显得很是麻烦,我们还有一个方法,那就是写一个配置文件,我们只需要启动指定的设备,其他的设备也都能启动起来,这个配置文件是/etc/mdadm.conf,我们需要做的操作是:mdadm –D –s >> /etc/mdadm.conf
有一点是我们需要注意的是,这步操作是在我们没有停止RAID时做的,如果我们之前没有写配置文件直接停掉,在停掉之后我们是无法在写配置文件的,这一点需要注意。
还有一个强制重启命令,但是我们一边不要使用这个命令:
mdadm –R /dev/md0
当我们的RAID不在使用时,我们需要将RAID信息处理掉,此时我们只需要破坏其中一个块的信息,我们就不能再使用该RAID了:
mdadm --zero-superblock /dev/sdb
RAID磁盘阵列的更多相关文章
- 快速理解几种常用的RAID磁盘阵列级别
我发现周围不少人在学习和理解RAID磁盘阵列的原理时,找了很多专业的资料来看,但是因为动手的机会比较少,因此看完以后还是似懂非懂,真正遇到实际的方案设计的时候,还是拿不定主意. 因此,我结合自己在过去 ...
- 使用MegaCli工具查看Raid磁盘阵列状态
转载自:http://home.51.com/chenjianghui1987/diary/item/10051836.html 文章本身我不做过多修改了,在这里我就把自己在安装时候碰到的难点跟大家提 ...
- RAID磁盘阵列笔记
磁盘阵列RAID是服务器维护的必备知识,以前不太关心服务器维护方面的知识.目前要负责维护机房里的几台服务器,所以要关注这方面的内容. 磁盘阵列是用多块独立磁盘组成,提供两个方面的作用:数据安全冗余 和 ...
- RAID磁盘阵列学习笔记
RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列.简单地解释,就是将N台硬盘通过RAID Controller(分Hardware ...
- linux lvm管理扩展 RAID磁盘阵列管理
LVM逻辑卷将多个物理分区/磁盘从逻辑上组合成一个更大的整体,从其中划分出不同的逻辑分区,逻辑分区的大小可以根据需要扩大,缩减!!!!/boot用来存放引导文件,不要基于LVM创建 PV(物理卷)物理 ...
- RAID磁盘阵列及CentOS7系统启动流程(week2_day3)--技术流ken
RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...
- RAID磁盘阵列及CentOS7系统启动流程
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,,数据读取无影响.将数据切割成许多区段,分别存放在各个硬盘 ...
- 末学者笔记--Linux中RAID磁盘阵列及centos7启动过程
<一>RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便 ...
- Linux系统的RAID磁盘阵列
RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...
- 【存储】RAID磁盘阵列选择
RAID磁盘阵列(Redundant Arrays of Inexpensive Disks) 一个基本思想:将多个容量较小.相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量 ...
随机推荐
- RabbitMQ --- Routing(路由)
目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) RabbitMQ --- Publish/Subscribe(发布/订阅) 前言 ...
- Eclipse自动生成返回值对象的快捷键是什么?
如下代码 List<ShareholderEntity> shareList = fetch.parseShareHolder(data); 如何自动生成 List<Sharehol ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
- elasticsearch报错expected <block end>, but found BlockMappingStart解决方法
我用的是elasticsearch2.4.0,在修改完配置文件就出现类似格式 expected <block end>, but found BlockMappingStart...... ...
- Java获取Object属性值
做了一个拦截参数的需求,需要获取普通参数和对象参数 参数是Object类型,Object[] paramValues = pjp.getArgs(); 1.获取普通参数 ;i<paramValu ...
- windows7下VirtualBox COM获取对象失败
一.问题 今天在windows7系统下安装virtualbox报错:VirtualBox COM获取对象失败,应用程序将被中断.上网查了下,发现了解决办法. 环境:windows7.VirtualBo ...
- mysql事件机制——定时任务
定时任务是老生常谈了,因为我们总是需要定时修改特定的数据. 实现它的方法肯定不止一种,但我在相当长一段时间里都是用程序编码去做的,今天突然想到“为什么一定要采用调用的方式?”,用数据库自身的能力去实现 ...
- python 二进制转换
#二进制装换msg = "大家好"msg1 = msg.encode(encoding='utf-8')#转换成二进制print(msg1)msg2 = msg1.decode(' ...
- 计算机程序的思维逻辑 (95) - Java 8的日期和时间API
本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和 ...
- 关于C#开发 windows服务进程
最近在做一个物联网项目,其中有一个模块是需要实现热水工程的自动化补水和回水功能 实现的方式有多种,我选用了VS C#的Windows服务方式. 首先是创建一个windows服务项目(名称随你喜欢的规范 ...