RAID是一种存储机制,英文全名为“RedundantArrays of Inexpensive Disks”,即容错廉价磁盘阵列。RAID可以通过一些技术(硬件或者软件)将多个磁盘整合起来,不仅是一个存储,还具有数据保护、提高IO能力等功能。不同等级的RAID有不同的功能。常见的RAID级别为RAID-0,RAID-1、RAID-5、RAID-6AID 1+0、RAID 1+0

RAID的实现方式:软件RAID、硬件RAID

  硬件RAID:

    外接式磁盘阵列:例如通过扩展卡提供适配能力

    内接式RAID:主板集成RAID控制器

  软件RAID

chunk:每块组成RAID-0的磁盘,都会被分隔为固定大小的小区块即chunk。当一个文件要写入RAID是,依据小区块(chunk)的大小切割好,一次放入RAID中。

RAID-0(等量模式,stripe):

  最少磁盘数:2

  可用空间:N*min[s1,s2……]

  优点:提升IO能力,读写性能均有提高

  缺点:没有冗余,耐用性降低

  数据存储方式:此处以两块磁盘为例。当有一个20M大小的数据写入时,每个磁盘将会被分配10M的数据

    

RAID-1(mirror,镜像模式)

  最少磁盘数:2

  可用空间:min[s1,s2……]

  优点:

    提升IO能力,写性能没有提(甚至会降低)高,读性能提高。

         有冗余,耐用性提高

  缺点:可用空间减少,由于每份数据都要完整的保存到两块磁盘,容量几乎减少50%。

  数据存储方式:此处以两块磁盘为例。当有一个20M大小的数据写入时,每个磁盘将会被分配20M的相同数据。

    

RAID-10和RAID-01:RAID-0性能佳但是数据不安全,RAID-1数据安全但是性能不佳。所以可以将两者结合起来组成RAID-10和RAID-01。

  RAID-10:举例来说,先将;两块磁盘组成RAID-1,并且这样的设置共有两组,然后将这两组RAID-1组成RAID-0。

    最少磁盘数:4

    可用空间:N*min[s1,s2……]/2

    优点:

      提升IO能力,读写性能提高。

           有冗余,耐用性提高

    缺点:可用空间减少,由于每份数据都要完整的保存到两块磁盘,容量几乎减少50%。

    数据存储方式:此处以四块磁盘为例。A和B组成第一组RAID-1,C和D组成第二组RAID-1,然后这两组在组成RAID-0。当有一个40M大小的数据写入时,由于RAID-0的特性,每组RAID-1会写入20M数据。由于RAID-1的特性,每块磁盘会写入20M数据。

    

 

  RAID-01:先组成RAID-0在组成RAID-1。

RAID4

  最少磁盘数:3

  可用空间:(N-1)*min(s1,s2,23.......)

  优点:

    提升IO能力,读性能提高,写性能不一定增加,因为软RAID写入的数据还要经过计CPU算同位校验码(parity)

        有冗余,耐用性提高允许坏一块盘

    缺点:可用空间减少一块单独一块做校验盘容易成为系统瓶颈。

    数据存储方式:此处以3块磁盘为例。A、B、C三块磁盘中有一块存储其他两块盘的校验码(此处认定为C盘)。有40M数据写入时,A、B各存储20M,C用来存放A、B盘的校验码。

RAID-5:以三块盘为例,与RAID4基本相同,不同的是RAID5是三块盘轮流做校验盘

  最少磁盘数:3

  可用空间:(N-1)*min(s1,s2,23.......)

  优点:

    读写性能均提升。

    有冗余,耐用性提高,允许坏一块盘。

linux上软RAID的实现

  在centos上要实现软RAID,依赖于内核的md(multi model)模块。

  命令:mdadm(multi model admin)

  语法:mdadm   [model]  <raiddevice> [options] <component-devices>

    model:

      创建:-C

      装配:-A

      监控:-F

      管理:--manage

        -f(--fail):将raid中某块磁盘标记为出错状态

        -r(--remove):

        -a(--add):

    raiddevice:/dev/md#。指名要创建或者管理的RAID设备。

    component-devices:指明raid组成成员是哪些盘

  -C:创建模式

    -n#:使用#快设备创建RAID

    -L#:创建RAID的级别

    -c chunk_size:指名块大小默认64M

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

    -a {yes|no}:自动创建目标RAID设备的设备文件

    示例:创建一个RAID-5设备,三块磁盘做存储,一块空闲磁盘。 

      第一步查看磁盘状态,并创建新的分区如下图创建sda{5,6,7,8}四个分区

      

      将分区的类型更改为fd。上图中新建的四个分区System还是Linux,需要将其改为fd。

        

      重读磁盘分区表

        使用:partprobe命令即可

      查看系统是否已经存在md设备:cat   /proc/mdstat。可以看到并没有md设备。此步骤主要是查看主机是否曾经创建过md设备,一次确定本次创建的md设备名称

      

      创建RAID-5

        mdadm -C /dev/md0  -a yes -l 5 -n 3 -x 1 /dev/sda{6,7,8,9}

      

      初始化raid设备

        mke2fs -t ext4 /dev/md0

      挂载使用

        mount /dev/md0 /mydata

      

仿真RAID出错状态处理

  查看raid详细信息:mdadm  --detail /dev/md0

    

  将磁盘sda6标记为错误状态

    

  查看raid信息,可以看到有一个错误状态的磁盘,并且空闲磁盘自动加入到raid中

    

    

  将出错的磁盘删除并且加入新的磁盘/dev/sda10:mdadm --manage /dev/md0 -a /dev/sda10 -r /dev/mda6

    

关闭raid

    

linuxRAID(软)的更多相关文章

  1. Android性能优化之巧用软引用与弱引用优化内存使用

    前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强 ...

  2. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...

  3. 【腾讯Bugly经验分享】程序员的成长离不开哪些软技能?

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ce8068d4d44a246f72baf2 Dev Club 是一个交流移动 ...

  4. Android 弱引用和软引用

    软引用 和 弱引用 1.  SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2.  WeakRefere ...

  5. Android中点击隐藏软键盘最佳方法——Android开发之路4

    Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...

  6. Android之弹出/隐藏系统软键盘

    Android弹出/隐藏系统软键盘的代码如下: InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT ...

  7. 软工实践——github文件整理

    软工实践中,整理github上文件遇到的一些问题 先扔github链接Transcend/ActivityHelper 1.原来呢我们团队的github上的文件的安排十分凌乱,没有归档.把说明文档.源 ...

  8. tp5 model 中的软删除

    model中需use traits\model\SoftDelete; // 数据表中需添加一个 delete_time 字段保存删除时间 namespace app\index\model; use ...

  9. Oracle SQL的硬解析和软解析

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.在Oracle中存在两种类型的SQL语句,一类为 DDL语句(数据定义语言),他们是从来不会共享使用的,也 ...

随机推荐

  1. SpirngCloud之Ribbon负载均衡(二)

    一 概念 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具. 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...

  2. 面向对象的7个设计原则->开车理解->贴近生活

    设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的 ...

  3. 给自己网站配置 https,http2 ,gzip压缩

    https 需要购买域名ssl证书 注意事项: 1.要开启HTTP/2协议支持,需要在nginx 1.10以上版本并且需要openssl库的版本在1.0.2及以上编译. 2.http2.0只支持开启了 ...

  4. phpstudy 升级mysql到mysql5.7

    前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON UPDATE clause for '字段名' column 报错的数据表字段: ...

  5. FTP上传、下载文件Demo

    前言:最近在做一个app,负责写后台接口,客户那边给了一个FTP的账号密码过来,服务器上面放了一堆的PDF文件,让我们这边自己从上面拿,项目是spriongboot的,做个记录供以后参考. 一.app ...

  6. Covenant cc 用法

    新出现的cc框架,之前看hack the box有人用过,不过还是用cs比较多, 这里把之前的笔记搬运过来 ---   设置covenant git clone --recurse-submodule ...

  7. 刷题翻车:python 布尔运算操作符的优先级

    前两天在 xue.cn 体验答题挑战,我有道题做错了,却不明白错在哪里.题目大概如下,代码运行后将打印什么? if True or False and False: print('1') else: ...

  8. 1000m交叉网线最简单做法

    1-3,2-6,3-1,4-7,5-8,6-2,7-4,8-5 1,2,3,4,5,6,7,8即为网线内部8跟线编号,两头颜色和数字要对应.

  9. Git连接GitHub仓库详解

    [Annotation]本文将从标题八开始,因为前七个标题是关于Git的基本操作,如果对Git的基本操作不了解的话,可以点击下方链接先看一下Git怎么使用. 关于Git的详细使用 八:创建SSH Ke ...

  10. python使用openpyxl操作excel总结

    安装openpyxl pip install openpyxl 简单示例 from openpyxl import Workbook #创建一个工作薄对象,也就是创建一个excel文档 wb = Wo ...