转自http://www.linuxprobe.com/chapter-06/

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,作用是防止硬盘物理损坏以及增加存储设备的吞吐量

RAID常见的组合有01510

    • RAID0:需要至少两块(含)硬盘,可以有效的提高硬盘的性能和吞吐量,但没有数据的冗余和错误修复能力。
    • 将多块硬盘通过硬件或软件的方式串联在一起,成为一个大的卷集,将数据依次写入到各个硬盘中,这样性能会极大提升,但若任意一块硬盘故障则整个系统的数据都会受到破坏。
    • RAID1:需要至少两块(含)硬盘,可以有效的提高数据资料的安全性和可修复性,但成本却提高了。
    • 实现原来是在数据写入硬盘时也会在另外一块闲置的硬盘上生成镜像文件,在不影响性能的情况下最大限度保证数据资料的可靠性,只要在一对镜像盘中还有一块硬盘可以使用,那么数据也不会丢失,具有很好的硬盘冗余能力,虽然对数据来讲绝对的安全,但成本却明显增加,磁盘利用率仅为50%。
    • RAID5:需要至少三块(含)硬盘,兼顾存储性能、数据安全和储存成本。
    • 如上图所示"parity"块中保存的是其他硬盘数据的奇偶校验信息(并非其他硬盘的数据),以数据的奇偶校验信息来保证数据的安全,RAID5不以单独的硬盘来存放数据的奇偶校验信息,而是保存在各个磁盘上。
      这样当任何一个硬盘损坏都可以根据其他硬盘上的奇偶校验信息来尝试重建损坏的数据,性能也很高,兼顾了存储性能、数据安全和存储成本,可以看作是RAID0与RAID1的折中方案。
    • RAID10:需要至少四块(含)硬盘,兼具速度和安全性,但成本很高。
    • 继承了RAID0的快速与RAID1的安全,RAID1在这里提供了冗余备份的阵列,而RAID0则负责数据的读写阵列。
      因这种结构的成本高,一般用于存放要求速度与差错控制的数据。

常见的做软RAID的工具是mdadm。下面就简单写几个实用的小例子快速上手这个命令。

1.配置RAID10

  ①在虚拟机上给主机分配4块1G的磁盘(为了实验磁盘就不分配大的了)

  

  ②创建raid10

    mdadm -Cv /dev/md1 -n4 -l 10 -a yes /dev/sd{b..e}

    • -C是创建
      -v是显示过程
      /dev/md1 是做成的raid磁盘名
      -n 是使用磁盘数
      -l是raid级别
      -a 检查raid名称
      /dev/sd{b..e}是之前分配的四块盘

      mkfs.ext4 /dev/md1

       partprobe /dev/md1 #内核同步磁盘

  ③挂载raid磁盘

    mkdir /RAID

    mount /dev/md1 /RAID

    此时一个raid10的磁盘创建挂载已经完成

    

  ④开机自动挂载

    在这里不是很建议用设备名写入fstab表中,因为我之前使用的设备名md1结果开机md1在dev目录下没了,变成md127了,具体原因不明,因此可以使用UUID

    使用blkid获取UUID

    

    echo “UUID=d3986c95-11d9-4afa-935e-bd4e637f4754 /RAID  ext4  default  0 0” >> /etc/fstab

  ⑤查看RAID磁盘详细信息

    mdadm -D /dev/md1

    

  ⑥模拟一块硬盘损坏

    mdadm /dev/md1 -f /dev/sdb

    #-f将sdb移出阵列,此时sdb状态是被移除,通过mdadm -D /dev/md1查看sdb是失败状态

    此时硬盘状态是坏的,你需要将它从取出

    mdadm /dev/md1 -r /dev/sdb

    换上同样大小的硬盘后执行

    mdadm /dev/md1 -a /dev/sdb

    即可将sdb重新加入阵列(如果磁盘真有问题必须要先-r移除才能-a添加)

    重新挂载

    mount /dev/md1 /RAID

    

  ⑦停止阵列设备

    umount /RAID    #必须先卸载

    mdadm -S /dev/md1

    此时dev目录下没有md1了,若想恢复,目前我使用的方法是

    mdadm -A /dev/md1 /dev/sd{b..e}

最新文章

  1. Eclipse编程时的快捷键总结
  2. Pyhton 单行、多行注释符号使用方法及规范
  3. idea编辑器HttpServlet httpServlet = ServletActionContext.getServletContext().getRealPath();方法无法使用
  4. Nginx-server_name匹配规则
  5. c++ 时间格式化
  6. mysql 强制走索引
  7. Unix 基础IO
  8. webstorm卡、闪退以及win10中jdk配置
  9. net.sf.json的jar包:JSONArray
  10. windows平台 culture name 详细列表
  11. JAVA中MESSAGEBOX,静态类直接引用
  12. 201521123054 《Java程序设计》第7周学习总结
  13. JDK 常用命令
  14. 12.Django思维导图
  15. jquery easyui datagrid 如何第一次点击列标题时是降序排列
  16. gson 入门使用
  17. Perl基础速成
  18. Spring Boot入门一:在Eclipse中使用Spring boot
  19. centos6.5制作OpenStack云平台Windows7镜像
  20. C# Winform 中如何获取本机安装输入法,并设置为默认输出语言,如何打开搜狗输入法和手写板

热门文章

  1. Linux 下运行 C++ 程序出现 “段错误(核心已转储)”
  2. 【HDOJ5952】Counting Cliques(团,dfs)
  3. Xcode打包应用为ipa
  4. 自定义Navigation按钮及Title
  5. 航空售票系统设计分析(Markdownpad2图片服务器上传无法显示)
  6. java中的数据转换与前置,后置加加
  7. iOS数据持久化存储
  8. flask如何设置模板语言Jinjia?如何查看路由视图函数映射?
  9. 全卷积网络FCN详解
  10. 最新的hustoj搭建姿势