一、概念

  • 廉价磁盘冗余阵。是一些列放在一起,成为一个逻辑卷的磁盘集合。

    二、分类

    1. raid0是条带化(将切片数据随机存储到多个磁盘。至少要用两块磁盘。)
  • image.png
    • 好处是读写速度快。
    • 坏处是零容错。
    1. raid1是镜像化(镜像用来自动备份数据。保存相同的内容到其他磁盘。)
  • image.png
    • 好处是当一个坏掉可以完全恢复。
    • 坏处是磁盘利用率变为原来的1/2,写性能也会变慢
    1. raid4是奇偶校验(一块磁盘做校验)
    • 好处是如果坏了一块磁盘的话可以恢复数据,利用率为n-1/n。
    • 坏处是每次存储数据都要访问校验磁盘
    1. raid5是分布式奇偶校验
  • image.png
    • 校验码分布在不同磁盘块。
    • 好处是如果坏了一块磁盘的话可以恢复数据,利用率为n-1/n。
    • 但坏两块就不行了
    1. raid0+1(先组成RAID0,然后组成RAID1)
  • image.png
    1. RAID10
    • 先组成RAID1,然后组成RAID0
  • image.png
    • 先镜像再条带或先条带再镜像。
    • 1/2利用率,可重建。可用于数据库存储
  • 来自 [https://blog.csdn.net/u012749168/article/details/52798711](https://blog.csdn.net/u012749168/article/details/52798711)

    三、操作过程(raid0为例)3

    1. 准备好磁盘并进行分区
  • image.png
  • image.png
    1. 修改磁盘分区类型
  • image.png
    1. 建立磁盘阵列
  • image.png
    • -C :创建一个阵列,后跟阵列名称
    • -l :指定阵列的级别;
    • -n :指定阵列中活动devices的数目
    1. 查看阵列状态
  • image.png
    • 在第一行中首先是MD的设备名md0
    • active和inactive选项表示阵列是否能读/写
    • 接着是阵列的RAID级别raid0,
    • 后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号
    1. 将软raid信息写入到配置文件中去
  • image.png
    1. 创建文件系统
  • image.png
    1. 创建挂载点
  • image.png
    1. 挂载设备
  • image.png
    1. 查看详细信息
  • image.png
    1. 写入配置文件
  • image.png

    四、其他操作

    1. 制作raid1(方法同上,不再赘述)
  • image.png
  • image.png
    1. 模拟磁盘故障(sdc出现故障,使用sdd进行替换)
  • image.png
    1. 热移除故障的硬盘:
  • image.png
    1. 给raid-1新增一个sdd盘
  • image.png
    1. 查看状态
  • image.png
  • image.png
    1. 给raid-5新增一个spare盘:
  • [root@bogon ~]# mdadm -a /dev/md0 /dev/sda5
  • mdadm: added /dev/sda5
  • 此时查看状态:
  • [root@bogon ~]# cat /proc/mdstat
  • Personalities : [raid6] [raid5] [raid4]
  • md0 : active raid5 sda53 sdd1[2] sdc1[1] sdb1[0]
  • 9783296 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
  • unused devices:
    1. 模拟硬盘故障:
  • [root@bogon ~]# mdadm -f /dev/md0 /dev/sdd1
  • mdadm: set /dev/sdd1 faulty in /dev/md0
  • 此时查看状态,发现概念刚才的热备盘已经顶替了故障盘的位置,

  • 并且进度条显示数据重建过程:

  • [root@bogon ~]# cat /proc/mdstat
  • Personalities : [raid6] [raid5] [raid4]
  • md0 : active raid5 sda5[3] sdd14 sdc1[1] sdb1[0]
  • 9783296 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
  • [>………………..] recovery = 1.3% (66912/4891648) finish=6.0min speed=13382K/sec
  • unused devices:
    1. 热移除故障的硬盘:
  • [root@bogon ~]# mdadm -r /dev/md0 /dev/sdd1
  • mdadm: hot removed /dev/sdd1
  • [root@bogon ~]# cat /proc/mdstat
  • Personalities : [raid6] [raid5] [raid4]
  • md0 : active raid5 sda5[3] sdc1[1] sdb1[0]
  • 9783296 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
  • [===>……………..] recovery = 16.1% (792136/4891648) finish=4.6min speed=14828K/sec
  • unused devices:
  • 对于有冗余的raid形式,在单一磁盘故障时一般能在一段时间内重建数据;但是数据量非常大时,重建会非常缓慢,且重建过程系统压力比较大,此时需要多关注系统负载,防止重建过程出现错误;在热移除故障盘一户,也需要尽快的换上新硬盘,并且添加spare盘;在故障修复,重建重建之后,需要重新生成配置文件,防止在下次开启时,按照最初的定义模式开启;
    1. 停止RAID:
  • 指定停止某个阵列

  • [root@bogon ~]# mdadm -S /dev/md0
  • 停止配置文件中定义的所有阵列

  • [root@bogon ~]# mdadm -Ss
  • mdadm: stopped /dev/md0
  • -s –scan去查询配置文件或没有配置文件时查询mdstat中的所有阵列

    1. 开启RAID:
  • [root@bogon ~]# mdadm -As
  • mdadm: /dev/md0 has been started with 2 drives (out of 3).
  • -s –scan:根据配置文件开启所有的阵列,此时由于故障恢复过,

  • 但是由于未重建配置文件,阵列我不能加载上新添加的硬盘;(需要停掉,重新手动指定)

  • [root@bogon ~]# cat /proc/mdstat
  • Personalities : [raid6] [raid5] [raid4]
  • md0 : active raid5 sdb1[0] sdc1[1]
  • 9783296 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
  • unused devices:
  • 若此时没有配置文件,就需要手动指定设备名称:
  • [root@bogon ~]# mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sda5
  • mdadm: /dev/md0 has been started with 3 drives.
  • 注:将一个raid设备添加入md阵列后,md的信息会写入到该设备分区的superblock中;

  • 在手动装配时;mdadm工具会自动验证阵列配置是否合法,并且做出相应的动作;

  • 若新接手一个raid,没有配置文件,或忘记设备的准确组成,就需要按分区逐个检查是否是raid设备及其他信息,然后根据信息装配阵列:
  • [root@bogon ~]# mdadm -E /dev/sdb1
  • /dev/sdb1:
  • Magic : a92b4efc
  • Version : 0.90.00
  • UUID : e0d929d1:69d7aacd:5ffcdf9b:c1aaf02d
  • Creation Time : Tue Mar 15 08:17:52 2011
  • Raid Level : raid5
  • Used Dev Size : 4891648 (4.67 GiB 5.01 GB)
  • Array Size : 9783296 (9.33 GiB 10.02 GB)
  • Raid Devices : 3
  • Total Devices : 3
  • Preferred Minor : 0
  • Update Time : Tue Mar 15 09:25:10 2011
  • State : clean
  • Active Devices : 3
  • Working Devices : 3
  • Failed Devices : 0
  • Spare Devices : 0
  • Checksum : b0cd088f - correct
  • Events : 8
  • Layout : left-symmetric
  • Chunk Size : 64K
  • Number Major Minor RaidDevice State
  • this 0 8 17 0 active sync /dev/sdb1
  • 0 0 8 17 0 active sync /dev/sdb1
  • 1 1 8 33 1 active sync /dev/sdc1
  • 2 2 8 5 2 active sync /dev/sda5
  • 该处显示出的是该分区superblock中包含的md信息;没有配置文件时,可以依据该信息装配md;

    1. 删除阵列:
  • 若需要彻底清除这个阵列:
  • [root@bogon ~]# umount /dev/md0
  • mdadm -Ss /dev/md0
  • [root@bogon ~]# mdadm —zero-superblock /dev/sd{b,c,d}1
  • —zero-superblock 加上该选项时,会判断如果该阵列是否包

  • 含一个有效的阵列超级快,若有则将该超级块中阵列信息抹除。

  • [root@bogon ~]# rm /etc/mdadm.conf
  • RAID优化:
  • (1) 设置stride值
  • The stride is the software RAID device’s chunk-size in filesystem blocks.For example,with an ext3 filesystem that will have an 4KB block size on a RAID device with a chunk-size of 64KB, the stride should be set to 16:(翻译的很纠结,就贴上教材原文了。)
  • mk2fs -j -b 4096 -E stride=16 /dev/md0
  • 设置时,需要用-E选项进行扩展

  • 设定良好的stride值,可以在后期使用时,减少写入数据时对数据块计算的负担,从而提高RAID性能;
  • 附:RAID 1-0双层架构的方法:
  • 首先创建两个底层RAID-1
  • [root@bogon ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sd[bc]1
  • mdadm: array /dev/md0 started.
  • [root@bogon ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sd[bc]2
  • mdadm: array /dev/md1 started.
  • 用两个RAID-1实现上层RAID-0:
  • [root@bogon ~]# mdadm -C /dev/md2 -a yes -l 0 -n 2 /dev/md[01]
  • mdadm: array /dev/md2 started.
  • 查看阵列状态:
  • [root@bogon ~]# cat /proc/mdstat
  • Personalities : [raid6] [raid5] [raid4] [raid0] [raid1]
  • md2 : active raid0 md0[0] md1[1]
  • 9783232 blocks 64k chunks
  • md1 : active raid1 sdb2[0] sdc2[1]
  • 4891712 blocks [2/2] [UU]
  • md0 : active raid1 sdb1[0] sdc1[1]
  • 4891648 blocks [2/2] [UU]
  • unused devices:
  • 创建配置文件:
  • [root@bogon ~]# mdadm -Ds > /etc/mdadm.conf
    1. 停止与开启阵列:
  • [root@bogon ~]# mdadm -Ss
  • mdadm: stopped /dev/md2
  • mdadm: stopped /dev/md1
  • mdadm: stopped /dev/md0
  • [root@bogon ~]# mdadm -As
  • mdadm: /dev/md0 has been started with 2 drives.
  • mdadm: /dev/md1 has been started with 2 drives.
  • mdadm: /dev/md2 has been started with 2 drives.
  • 上述关闭与开启过程,系统能只能识别层级,关闭先关闭上层,

  • 后开启上层;防止了冲突;