Linux RAID

  • RAID:Redundant Arrays of Inexpensive Disks/廉价冗余磁盘阵列
    • 后来改成:Redundant Arrays of Independent Disks/独立冗余磁盘阵列
  • Berkeley大学一位教授的一篇论文:A case for Redundant Arrays of Inexpensive Disks RAID
    • 提高IO能力:通过磁盘并行读写实现
    • 提高耐用性:通过磁盘冗余来实现
    • 级别:多块磁盘组织在一起的工作方式有所不同
    • RAID的实现方式:
      • 外接式磁盘阵列:通过扩展卡提供适配能力
      • 内接式RAID:主板集成RAID控制器
      • Software RAID:通过软件的方式提供RAID
  • 级别:Level
    • 级别没有好坏高低之分,仅仅表示磁盘组织形式上的不同
    • RAID-0:以0表示,又叫条带卷/strip

      • 读写性能提升
      • 可用空间:N*min(s1,s2...)
      • 无容错能力
      • 最少磁盘数:2
    • RAID-1:以1表示,又叫镜像卷/mirror

      • 读性能提升,写性能略有下降
      • 可用空间:1*min(s1,s2...)
      • 有容错能力
      • 最少磁盘数:2
    • RAID-2,3,4不常用
      • RAID-4:

      • 第三块盘存放校验码,一般为前两块盘数据的异或
      • 允许坏掉一块盘
      • 但是校验盘的IO容易成为系统瓶颈
    • RAID-5:

      • 与RAID-4类似,但是轮流做校验盘
      • 读写性能提升
      • 可用空间:(N-1)*min(s1,s2...)
      • 有容错能力:1块磁盘
      • 最少磁盘数:3
    • RAID-6:
      • 用两块磁盘做校验盘
      • 读写性能提升
      • 可用空间:(N-2)*min(s1,s2...)
      • 有容错能力:2块磁盘
      • 最少磁盘数:4

以下为混合类型的RAID:

    • RAID10

      • 先组织成RAID-1,再组织成RAID-0
      • 读写性能提升
      • 可用空间:N*min(s1,s2...)/2
      • 有容错能力:每组镜像最多只能坏一块
      • 最少磁盘数:4
    • RAID01

      • 先组织成RAID-0,再组织成RAID-1
      • RAID01不好,因为每组坏一块的概率还是比较大的,此时数据就损坏了;而RAID10中,只要不是一组中的两个磁盘同时坏了,数据就不会损坏
    • RAID50
      • 先组织成RAID5,再组织成RAID-0
    • RAID-7:某公司的产品,IO性能特别好,但是价格特别贵
    • JBOD:Just a Bunch Of Disks
      • 将多块磁盘的空间合并成一个大的连续空间使用
      • 可用空间:sum(s1,s2...)
    • 常用级别:RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
  • 实现方式
    • 硬件实现方式
    • 软件实现方式:在生产环境中,不会用软RAID
      • CentOS 6上的软件RAID的实现
        • 结合内核中的md模块(multi disks)
        • mdadm:模式化的工具
          • mdadm [mode] <raid device> [options] <component devices>
          • 支持的RAID级别:LINEAR(类似JBOD),RAID-0,RAID-1,RAID-4,RAID-5,RAID-6,RAID-10,等等
          • raid device:/dev/md#
            • 查看当前系统中是否存在md设备:
              • cat /proc/mdstat
              • ls /dev | grep "md"
          • component devices:任意块设备
          • 模式/mode:
            • 创建模式:-C
              • options
                • -n #:使用#个块设备来创建此RAID
                • -l #:指明要创建的RAID的级别
                • -a {yes | no}:是否自动创建目标RAID设备的设备文件
                • -c CHUNK-SIZE:指明块大小
                • -x #:指明冗余或空闲盘的个数
              • 例如:创建一个10G空间的RAID-5
                • mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{7,8,9,10}
                • 创建完以后,格式化:mke2fs -t ext4 /dev/md0
                • 格式化完以后,挂载:mount /dev/md0 /mydata
                • 往/mydata里写文件,就会按照RAID的模式工作了
            • 装配模式:-A
            • 监控模式:-F
            • 管理模式:-f,-r,-a
              • -f:标记损坏,例如:mdadm /dev/md0 -f /dev/sda7 (此时上面创建的RAID5就会利用空闲盘自动修复了,再坏一块磁盘也是没有问题的,降级使用,即两个磁盘工作,没有校验盘了)
              • -r:移除坏的磁盘,例如:mdadm /dev/md0 -r /dev/sda7
              • -a:添加一个磁盘,例如:mdadm /dev/md0 -a /dev/sda7
            • 查看详细信息:-D,例如:mdadm -D /dev/md0 
            • 停止md设备:-S,例如:mdadm -S /dev/md0
            • 补充:watch -n# COMMAND:每隔#秒刷新一下命令结果,例如:watch -n1 'ifconfig etho',再例如:watch -n1 'cat /proc/mdstat'

练习1:创建一个可用空间为10G的RAID1设备,要求其chunk大小为128k(默认为512k),文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

练习2:创建一个可用空间为10G的RAID10设备,要求其chunk大小为256k(默认为512k),文件系统为ext4,开机可自动挂载至/mydata目录

注:RAID不能代替备份策略,RAID可以保证磁盘损坏后不影响系统运行,但是无法阻止人为错误引起的数据丢失,比如不小心删除,所以备份数据依然是要有的

原文地址:https://www.cnblogs.com/jacky1982/p/7758421.html