【mdadm】Linux系统软RAID的创建方法

专题:Linux应用服务配置

各类Linux软件安装配置

更多内容请点击 我的博客 查看,欢迎来访。

Raid定义

raid(独立冗余磁盘阵列)。raid技术通过把多个硬盘设备组合成一个容量更大的,安全性更好的磁盘阵列。把数据切割成许多区段后分别放在不同的物理磁盘上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理设备上,从而起到了非常好的数据冗余备份效果。缺点就是磁盘利用率低。

Raid级别比较

级别 硬盘数n 可用容量百分比 优点 缺点
raid0 至少2块 100% 提高读写性能 没有容错能力
raid1 至少2块 50% 镜像,硬件容错,读性能提升 写性能下降50%,利用率低
raid5 至少3块 (n-1)/n 允许1块盘出错,读写性能提升
raid6 至少4块 (n-2)/n 允许2块盘出错,读写性能提升
raid10 至少4块 50% 多组raid1组合成raid0接口,允许不同组内各坏1快盘,读写性能提升

RAID10和RAID5的比较

为了方便对比,这里拿同样多驱动器的磁盘来做对比。转载

RAID5选择3D+1P的RAID方案
RAID10选择2D+2D的RAID方案

安全性

其实在安全性方面,毋庸置疑,肯定是RAID10的安全性高于RAID5。我们也可以从简单的分析来得出。当盘1损坏时,对于RAID10,只有当盘1对应的镜象盘损坏,才导致RAID失效。但是对于RAID5,剩下的3块盘中,任何一块盘故障,都将导致RAID失效。
在恢复的时候,RAID10恢复的速度也快于RAID5。

空间利用率

用四块盘分别做RAID10和RAID5的情况下:
RAID10的利用率是50%
RAID5的利用率是75%
硬盘数量越多,RAID5的空间利用率越高

读写性能

主要分析分析如下三个过程:读,连续写,离散写。
在介绍这三个过程之前,先介绍一个特别重要的概念:cache
cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的raid卡,一般都包含有几十,甚至几百兆的raid cache。

cache的主要作用是什么呢?
体现在读与写两个不同的方面,如果作为写,一般存储阵列只要求写到cache就算完成了写操作,所以,阵列的写是非常快速的,在写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入,至于cache数据的保护,一般都依赖于镜像与电池(或者是UPS)。
cache的读一样不可忽视,因为如果读能在cache中命中的话,将减少磁盘的寻道,因为磁盘从寻道开始到找到数据,一般都在6ms以上,而这个时间,对于那些密集型io的应用可能不是太理想。但是,如果cache能命中,一般响应时间则可以在1ms以内。两者应该相差3个数量级(1000倍)。

  1. 读操作方面的性能差异
    RAID10可供读取有效数据的磁盘个数为4,RAID5可供读取有效数据的磁盘个数也为4个(校验信息分布在所有的盘上),所以两者的读的性能应该是基本一致的。
  2. 连续写方面的性能差异
    在连续写操作过程,如果有写cache存在,并且算法没有问题的话,RAID5比RAID10甚至会更好一些,虽然也许并没有太大的差别。(这里要假定存储有一定大小足够的写cache,而且计算校验的cpu不会出现瓶颈)。
    因为这个时候的RAID校验是在cache中完成,如4块盘的RAID5,可以先在内存中计算好校验,同时写入3个数据+1个校验。而RAID10只能同时写入2个数据+2个镜相。
    4块盘的RAID5可以在同时间写入1、2、3到cache,并且在cache计算好校验之后,这里假定是6,同时把三个数据写到磁盘。而4块盘的RAID10不管cache是否存在,写的时候,都是同时写2个数据与2个镜相。
    根据前面对缓存原理的介绍,写cache是可以缓存写操作的,等到缓存写数据积累到一定时期再写到磁盘。但是,写到磁盘阵列的过程是迟早也要发生的,所以RAID5与RAID10在连续写的情况下,从缓存到磁盘的写操作速度会有较小的区别。不过,如果不是连续性的强连续写,只要不达到磁盘的写极限,差别并不是太大。
  3. 离散写方面的性能差异
    例如oracle 数据库每次写一个数据块的数据,如8K;由于每次写入的量不是很大,而且写入的次数非常频繁,因此联机日志看起来会像是连续写。但是因为不保证能够添满RAID5的一个条带,比如32K(保证每张盘都能写入),所以很多时候更加偏向于离散写入(写入到已存在数据的条带中)。
    离散写的时候,RAID5与RAID10工作方式有什么不同?假定要把一个数字2变成数字4,那么对于RAID5,实际发生了4次io:先读出2与校验6,可能发生读命中然后在cache中计算新的校验写入新的数字4与新的校验8。
    对于RAID10,同样的单个操作,最终RAID10只需要2个io,而RAID5需要4个io。
    这里忽略了RAID5在那两个读操作的时候,可能会发生读命中操作的情况。也就是说,如果需要读取的数据已经在cache中,可能是不需要4个io的。这也证明了cache对RAID5 的重要性,不仅仅是计算校验需要,而且对性能的提升尤为重要。
    当然,并不是说cache对RAID10就不重要了,因为写缓冲,读命中等,都是提高速度的关键所在,只不过RAID10对cache的依赖性没有RAID5那么明显而已。
  4. 磁盘的IOPS对比
    假定一个case,业务的iops是10000,读cache命中率是30%,读iops为60%,写iops为40%,磁盘个数为120,那么分别计算在raid5与raid10的情况下,每个磁盘的iops为多少。
raid5

单块盘的iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120
= (4200 + 16000)/120
= 168
这里的10000*(1-0.3)*0.6表示是读的iops,比例是0.6,除掉cache命中,实际只有4200个iops。4 * (10000*0.4) 表示写的iops,因为每一个写,在raid5中,实际发生了4个io,所以写的iops为16000个
为了考虑raid5在写操作的时候,那2个读操作也可能发生命中,所以更精确的计算为:
单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120
= (4200 + 5600 + 8000)/120
= 148
计算出来单个盘的iops为148个,基本达到磁盘极限

raid10

单块盘的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120
= (4200 + 8000)/120
= 102

可以看到,因为raid10对于一个写操作,只发生2次io,所以,同样的压力,同样的磁盘,每个盘的iops只有102个,还远远低于磁盘的极限iops。

小结

所以要求较高的空间利用率,对安全性要求不是特别高、大文件存储的系统采用RAID5比较好。
相反,安全性要求很高,不计成本,数据频繁写入的系统采用RAID10的方式比较好。

Raid搭建方法

系统为CentOS7

查看当前磁盘信息

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root  8.0G  1.5G  6.6G   19% /
/dev/sda1               1014M  163M  852M   16% /boot
tmpfs                     98M     0   98M    0% /run/user/0

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000acd25

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

磁盘 /dev/mapper/centos-root:8585 MB, 8585740288 字节,16769024 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

添加磁盘

试验环境添加5块1G硬盘

【mdadm】Linux系统软RAID的创建方法_第1张图片
BLOG_20200304_150117_78

此时在系统中是没有读出的,可以通过重新扫描 SCSI 总线,在不重启虚拟机的情况下添加 SCSI 设备。或者重启虚拟机。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host[按Tab]
host0/ host1/ host2/ 
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan 
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host1/scan 
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan 
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root  8.0G  1.5G  6.6G   19% /
/dev/sda1               1014M  163M  852M   16% /boot
tmpfs                     98M     0   98M    0% /run/user/0
[root@localhost ~]# fdisk -l

磁盘 /dev/sda:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000acd25

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

磁盘 /dev/mapper/centos-root:8585 MB, 8585740288 字节,16769024 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdc:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdd:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sde:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdf:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

使用fdisk -l可以看到新添加的5块硬盘,从sdbsdf

初始化磁盘设置

[root@localhost ~]# fdisk /dev/sd
sda   sda1  sda2  sdb   sdc   sdd   sde   sdf   
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x155d620b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag  # 切换可启动标志
   b   edit bsd disklabel  # 编辑bsd磁盘标签
   c   toggle the dos compatibility flag  # 切换dos兼容性标识
   d   delete a partition  # 删除分区
   g   create a new empty GPT partition table  # 创建一个新的GPT分区表
   G   create an IRIX (SGI) partition table  # 创建一个IRIX(SGI)分区表
   l   list known partition types  # 列出已知的分区类型
   m   print this menu  # 打印此菜单
   n   add a new partition  # 添加一个新分区
   o   create a new empty DOS partition table  # 创建一个新的DOS分区表
   p   print the partition table  # 打印分区表
   q   quit without saving changes  # 退出而不保存更改
   s   create a new empty Sun disklabel  # 创建一个新的空Sun磁盘标签
   t   change a partition`s system id  # 更改分区的系统ID
   u   change display/entry units  # 更改显示/输入单位
   v   verify the partition table  # 验证分区表
   w   write table to disk and exit  # 将分区表写入磁盘并退出
   x   extra functionality (experts only)  # 额外功能(专家模式)

命令(输入 m 获取帮助):n  # 新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p  # p是主分区,e是扩展分区
分区号 (1-4,默认 1):  # 保持默认
起始 扇区 (2048-2097151,默认为 2048):  # 起始位置,默认
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):  # raid5要用到整块磁盘,默认为整块
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):L  # 列出所有的分区类型,及菜单m中的l

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       
Hex 代码(输入 L 列出所有代码):fd  # 选择代码,即Linux raid 自动
已将分区“Linux”的类型更改为“Linux raid autodetect”
    
命令(输入 m 获取帮助):w  # 保存退出即可
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。


[root@localhost ~]# fdisk -l sdb  # 列出指定磁盘分区表
fdisk: 打不开 sdb: 没有那个文件或目录
[root@localhost ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x155d620b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   fd  Linux raid autodetect
# 即可看到硬盘被分为一个主分区,类型为raid

同样对sdcsdf剩下的磁盘进行一样的操作。

简版步骤

fdisk /dev/sd[编号]-->n(新建分区)-->p(主分区)-->回车(分区号默认1)-->回车(起始扇区默认2028)-->回车(大小默认)-->t(更改分区系统ID)-->fd(Linux raid 自动)-->w保存退出。

修改完分区表信息

修改完后,sdbsdf信息如下。

[root@localhost ~]# fdisk -l /dev/sd[b-f]

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x155d620b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2097151     1047552   fd  Linux raid autodetect

磁盘 /dev/sdc:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4efd7c63

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2097151     1047552   fd  Linux raid autodetect

磁盘 /dev/sdd:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6320f4f2

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048     2097151     1047552   fd  Linux raid autodetect

磁盘 /dev/sde:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9f1031c0

   设备 Boot      Start         End      Blocks   Id  System
/dev/sde1            2048     2097151     1047552   fd  Linux raid autodetect

磁盘 /dev/sdf:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x88fb5cf3

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdf1            2048     2097151     1047552   fd  Linux raid autodetect

安装mdadm

madam是Linux下的raid管理工具

[root@localhost ~]# yum install mdadm -y

mdadm帮助

[root@localhost ~]# mdadm --help
mdadm is used for building, managing, and monitoring
Linux md devices (aka RAID arrays)
Usage: mdadm --create device options...
            Create a new array from unused devices.  # 使用空闲的设备创建一个新阵列
       mdadm --assemble device options...
            Assemble a previously created array.  # 组装之前创建的阵列
       mdadm --build device options...
            Create or assemble an array without metadata.  # 创建或组装一个没有元数据的阵列
       mdadm --manage device options...
            make changes to an existing array.  # 对现有阵列进行更改,比如增加热备磁盘或者设置某个磁盘失效,然后从阵列中删除这个磁盘
       mdadm --misc options... devices
            report on or modify various md related devices.  # 报告或修改各种md相关设备,比如查询阵列或者设备的状态信息
       mdadm --grow options device
            resize/reshape an active array  # 调整/重塑一个活动阵列,改变阵列中每个设备被使用的容量或阵列中的设备的数目
       mdadm --incremental device
            add/remove a device to/from an array as appropriate  # 根据需要在阵列中添加/删除一个设备
       mdadm --monitor options...
            Monitor one or more array for significant changes.  # 监视一个或多个阵列,查看是否有重大更改。
       mdadm device options...
            Shorthand for --manage.
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device.  Subsequent
names are often names of component devices.

 For detailed help on the above major modes use --help after the mode
 e.g.
         mdadm --assemble --help
 For general help on options use
         mdadm --help-options
[root@localhost ~]# mdadm --help-options
Any parameter that does not start with '-' is treated as a device name
or, for --examine-bitmap, a file name.
The first such name is often the name of an md device.  Subsequent
names are often names of component devices.

Some common options are:
  --help        -h   : General help message or, after above option,
                       mode specific help message
  --help-options     : This help message
  --version     -V   : Print version information for mdadm
  --verbose     -v   : Be more verbose about what is happening
  --quiet       -q   : Don`t print un-necessary messages
  --brief       -b   : Be less verbose, more brief
  --export      -Y   : With --detail, --detail-platform or --examine use
                       key=value format for easy import into environment
  --force       -f   : Override normal checks and be more forceful

  --assemble    -A   : Assemble an array
  --build       -B   : Build an array without metadata
  --create      -C   : Create a new array
  --detail      -D   : Display details of an array
  --examine     -E   : Examine superblock on an array component
  --examine-bitmap -X: Display the detail of a bitmap file
  --examine-badblocks: Display list of known bad blocks on device
  --monitor     -F   : monitor (follow) some arrays
  --grow        -G   : resize/ reshape and array
  --incremental -I   : add/remove a single device to/from an array as appropriate
  --query       -Q   : Display general information about how a
                       device relates to the md driver
  --auto-detect      : Start arrays auto-detected by the kernel

创建阵列

创建阵列帮助

[root@localhost ~]# mdadm -C --help
Usage:  mdadm --create device --chunk=X --level=Y --raid-devices=Z devices

Options that are valid with --create (-C) are:
  --bitmap=          -b : Create a bitmap for the array with the given filename
                        : or an internal bitmap if 'internal' is given
  --chunk=           -c : chunk size in kibibytes
  --rounding=           : rounding factor for linear array (==chunk size)
  --level=           -l : raid level: 0,1,4,5,6,10,linear,multipath and synonyms
  --parity=          -p : raid5/6 parity algorithm: {left,right}-{,a}symmetric
  --layout=             : same as --parity, for RAID10: [fno]NN 
  --raid-devices=    -n : number of active devices in array
  --spare-devices=   -x : number of spare (eXtra) devices in initial array
  --size=            -z : Size (in K) of each drive in RAID1/4/5/6/10 - optional
  --data-offset=        : Space to leave between start of device and start
                        : of array data.
  --force            -f : Honour devices as listed on command line.  Don`t
                        : insert a missing drive for RAID5.
  --run              -R : insist of running the array even if not all
                        : devices are present or some look odd.
  --readonly         -o : start the array readonly - not supported yet.
  --name=            -N : Textual name for array - max 32 characters
  --bitmap-chunk=       : bitmap chunksize in Kilobytes.
  --delay=           -d : bitmap update delay in seconds.
  --write-journal=      : Specify journal device for RAID-4/5/6 array
  --consistency-policy= : Specify the policy that determines how the array
                     -k : maintains consistency in case of unexpected shutdown.

创建raid5

mdadm -C /dev/md0 -l5 -n4 -x1 /dev/sd[b-f]1

[root@localhost ~]# mdadm --create /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

# 简写
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n4 -x1 /dev/sd[b-f]1

查看阵列详情

mdadm -D /dev/md0

[root@localhost ~]# fdisk -l /dev/md0

磁盘 /dev/md0:3211 MB, 3211788288 字节,6273024 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):524288 字节 / 1572864 字节


# 查看阵列详情
[root@localhost ~]# mdadm --detail /dev/md0
[root@localhost ~]# mdadm -D /dev/md0  # 简写
/dev/md0:  # raid设备文件名
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020  # 创建时间
        Raid Level : raid5  # raid等级
        Array Size : 3136512 (2.99 GiB 3.21 GB)  # raid可用磁盘大小
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)  # 每个磁盘可用容量
      Raid Devices : 4  # 用做raid的磁盘数量
     Total Devices : 5  # 全部磁盘数量
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 09:18:26 2020
             State : clean 
    Active Devices : 4  # 激活raid磁盘数量
   Working Devices : 5  # 可工作磁盘数量
    Failed Devices : 0  # 故障磁盘数量
     Spare Devices : 1  # 热备磁盘数量

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b  # 此设备(raid)的标识符
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1  # 阵列磁盘
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       5       8       65        3      active sync   /dev/sde1

       4       8       81        -      spare   /dev/sdf1  # 热备磁盘

# 还可以通过下面的文件来查看系统软件磁盘阵列的情况
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sde1[5] sdf1[4](S) sdd1[2] sdc1[1] sdb1[0]  
# md0使用了raid5,S为热备盘,其他表示阵列硬盘
      3136512 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
      # 3136512个block(每个block单位为1k),所以总容量约为3.21GB。
      # 使用raid5等级,写入磁盘的小区块(chunk)大小为512k,使用algorithm 2磁盘阵列算法。
      # [m/n]代表此数组需要m个设备,且n个设备是正常运行的。因此本md0需要4个设备且这4个设备正常运行。
      # 后面的[UUUU]代表的是四个所需的设备启动情况。U代表正常运作。若为_则代表不正常。
      
unused devices: 

格式化与挂载使用raid

mkfs -t ext3 /dev/md0

[root@localhost ~]# mkfs
用法:
 mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]

选项:
 -t, --type=<类型>  文件系统类型;若不指定,将使用 ext2
     fs-options     实际文件系统构建程序的参数
     <设备>         要使用设备的路径
     <大小>         要使用设备上的块数
 -V, --verbose      解释正在进行的操作;
                      多次指定 -V 将导致空运行(dry-run)
 -V, --version      显示版本信息并退出
                      将 -V 作为 --version 选项时必须是惟一选项
 -h, --help         显示此帮助并退出

更多信息请参阅 mkfs(8)。

使用mkfs格式化md0

[root@localhost ~]# mkfs -t ext3 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=384 blocks
196224 inodes, 784128 blocks
39206 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

创建挂载点,并将md0挂载

[root@localhost ~]# mkdir /mnt/raid5
# 挂载
[root@localhost ~]# mount /dev/md0 /mnt/raid5/
# 查看分区信息
[root@localhost ~]# df -h /mnt/raid5/
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0        2.9G  4.6M  2.8G    1% /mnt/raid5

开机启动raid并自动挂载

设置开机启动raid

# 获取设备md0的UUID
[root@localhost ~]# mdadm -D /dev/md0 | grep -i uuid
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
[root@localhost ~]# vim /etc/mdadm.conf
# 修改mdadm默认的配置文件,没有就新增;新建配置文件,写入下面的内容
[root@localhost ~]# cat /etc/mdadm.conf
ARRAY   /dev/md0    UUID=9e591745:7b4f4aa8:94168959:fc32ba2b

设置自动挂载

[root@localhost ~]# vim /etc/fstab 
# 编辑fstab文件,添加下面的行
[root@localhost ~]# cat /etc/fstab | grep md0
/dev/md0    /mnt/raid5  ext3    defaults    0 0

测试reboot后挂载请况

# 重启后查看
[root@localhost ~]# df -h /dev/md0
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0        2.9G  4.6M  2.8G    1% /mnt/raid5

模拟raid错误

在raid分区中随意添加一些文件

[root@localhost ~]# cd /mnt/raid5/
[root@localhost raid5]# touch a.sh
[root@localhost raid5]# touch b.py
[root@localhost raid5]# mkdir d
[root@localhost raid5]# ll
总用量 20
-rw-r--r--. 1 root root     0 3月   4 10:29 a.sh
-rw-r--r--. 1 root root     0 3月   4 10:29 b.py
drwxr-xr-x. 2 root root  4096 3月   4 10:29 d
drwx------. 2 root root 16384 3月   4 09:47 lost+found

管理阵列帮助

[root@localhost ~]# mdadm --manage --help

Options that are valid with management mode are:
  --add         -a   : hotadd subsequent devices to the array  # 向阵列中添加参数指定的设备
  --re-add           : subsequent devices are re-added if there were
                     : recent members of the array
  --remove      -r   : remove subsequent devices, which must not be active  # 将参数指定的空闲设备从阵列中移出去
  --fail        -f   : mark subsequent devices a faulty  # 将参数指定的设备标记为出错状态
  --set-faulty       : same as --fail
  --replace          : mark device(s) to be replaced by spares.  Once
                     : replacement completes, device will be marked faulty
  --with             : Indicate which spare a previous '--replace' should
                     : prefer to use
  --run         -R   : start a partially built array
  --stop        -S   : deactivate array, releasing all resources
  --readonly    -o   : mark array as readonly
  --readwrite   -w   : mark array as readwrite

模拟标记错误硬盘

mdadm --manage /dev/md0 --fail /dev/sdd1

# 当前阵列状态
[root@localhost ~]# mdadm --detail /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 10:29:50 2020
             State : clean 
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       5       8       65        3      active sync   /dev/sde1

       4       8       81        -      spare   /dev/sdf1

# 标记错误磁盘
[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md0

# 查看状态
[root@localhost ~]# mdadm --detail /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 10:41:38 2020
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 39

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1

       2       8       49        -      faulty   /dev/sdd1

标记错误磁盘后

    Active Devices : 4 -> 4
   Working Devices : 5 -> 4
    Failed Devices : 0 -> 1
     Spare Devices : 1 -> 0

说明某一块磁盘失效后,不会影响raid5的功能,并且spare的磁盘会自动加入到raid中,然后失效磁盘会被标记为faulty。并且资料无损是。

[root@localhost ~]# ls -l /mnt/raid5/
总用量 20
-rw-r--r--. 1 root root     0 3月   4 10:29 a.sh
-rw-r--r--. 1 root root     0 3月   4 10:29 b.py
drwxr-xr-x. 2 root root  4096 3月   4 10:29 d
drwx------. 2 root root 16384 3月   4 09:47 lost+found

移除错误硬盘

mdadm --manage /dev/md0 --remove /dev/sdd1
移除已损坏的磁盘,添加一块新硬盘作为热备盘

# 模拟移除故障盘
[root@localhost ~]# mdadm --manage /dev/md0 --remove /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 10:50:09 2020
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 40

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1
# 可以看到故障盘已被移除

添加新硬盘

mdadm --manage /dev/md0 --add /dev/sdd1
为了方便,不在新增磁盘或者分区,直接使用移除的分区重新添加。在实际环境中sdd1已经是另一块完好的硬盘了

# 更换一块硬盘并加入到阵列热备盘中
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdd1
mdadm: added /dev/sdd1
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 10:54:08 2020
             State : clean 
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 41

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1

       6       8       49        -      spare   /dev/sdd1

测试阵列添加多块热备

添加磁盘sdg1

[root@localhost ~]# fdisk /dev/sd
sda   sda1  sda2  sdb   sdb1  sdc   sdc1  sdd   sdd1  sde   sde1  sdf   sdf1  sdg   
[root@localhost ~]# fdisk /dev/sdg 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x8a6fb4d2 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):fd
已将分区“Linux”的类型更改为“Linux raid autodetect”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

sdg1添加到阵列(2块热备)

[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdg1
mdadm: added /dev/sdg1
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:28:20 2020
             State : clean 
    Active Devices : 4
   Working Devices : 6
    Failed Devices : 0
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 42

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1

       6       8       49        -      spare   /dev/sdd1
       7       8       97        -      spare   /dev/sdg1

sdc1标记错误(降级恢复,剩1块热备)

[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdc1
mdadm: set /dev/sdc1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:29:34 2020
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 5
    Failed Devices : 1
     Spare Devices : 2

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 90% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 58

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       7       8       97        1      spare rebuilding   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1

       1       8       33        -      faulty   /dev/sdc1
       6       8       49        -      spare   /dev/sdd1
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:29:35 2020
             State : clean 
    Active Devices : 4
   Working Devices : 5
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 61

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       5       8       65        3      active sync   /dev/sde1

       1       8       33        -      faulty   /dev/sdc1
       6       8       49        -      spare   /dev/sdd1

sde1标记错误(降级恢复,剩0块热备)

[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:31:33 2020
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 2
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 57% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 72

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      spare rebuilding   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1

[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:31:36 2020
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 2
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 80

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1

sdb1标记错误(降级,无热备不恢复)

[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:32:08 2020
             State : clean, degraded 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 3
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 82

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      active sync   /dev/sdd1

       0       8       17        -      faulty   /dev/sdb1
       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1
[root@localhost ~]# ls -l /mnt/raid5/
总用量 20
-rw-r--r--. 1 root root     0 3月   4 10:29 a.sh
-rw-r--r--. 1 root root     0 3月   4 10:29 b.py
drwxr-xr-x. 2 root root  4096 3月   4 10:29 d
drwx------. 2 root root 16384 3月   4 09:47 lost+found

sdb1恢复硬盘后添加(添加磁盘,恢复)

[root@localhost ~]# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
[root@localhost ~]# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
[root@localhost ~]# ls -l /mnt/raid5/
总用量 20
-rw-r--r--. 1 root root     0 3月   4 10:29 a.sh
-rw-r--r--. 1 root root     0 3月   4 10:29 b.py
drwxr-xr-x. 2 root root  4096 3月   4 10:29 d
drwx------. 2 root root 16384 3月   4 09:47 lost+found
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:34:06 2020
             State : clean 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 2
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 102

    Number   Major   Minor   RaidDevice State
       8       8       17        0      active sync   /dev/sdb1
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1

sdb1、sdg1标记错误(阵列失败)

[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:35:13 2020
             State : clean, degraded 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 3
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 104

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       7       8       97        1      active sync   /dev/sdg1
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1
       8       8       17        -      faulty   /dev/sdb1
[root@localhost ~]# mdadm --manage /dev/md0 --fail /dev/sdg1
mdadm: set /dev/sdg1 faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar  4 09:18:20 2020
        Raid Level : raid5
        Array Size : 3136512 (2.99 GiB 3.21 GB)
     Used Dev Size : 1045504 (1021.00 MiB 1070.60 MB)
      Raid Devices : 4
     Total Devices : 6
       Persistence : Superblock is persistent

       Update Time : Wed Mar  4 11:35:22 2020
             State : clean, FAILED 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 4
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 9e591745:7b4f4aa8:94168959:fc32ba2b
            Events : 106

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       -       0        0        1      removed
       4       8       81        2      active sync   /dev/sdf1
       6       8       49        3      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
       5       8       65        -      faulty   /dev/sde1
       7       8       97        -      faulty   /dev/sdg1
       8       8       17        -      faulty   /dev/sdb1

总结

  • 阵列设置好阵列盘后,再添加硬盘会自动设置为热备盘;
  • 当阵列盘故障时,如果有热备盘,阵列会降级并自动恢复;
  • 当阵列盘故障时,如果没有热备盘,阵列处于降级状态,不会自动恢复;
  • 如果新添加盘后,自动添加到阵列盘中进行恢复;
  • 如果阵列中同一时间段故障两块及以上,而没有热备盘,就会导致阵列不可用。

关闭raid的方法

  1. 取消挂载umount /dev/md0
  2. 编辑/etc/fstab,删除/dev/md0所在的行;
  3. 使用mdadm --stop /dev/md0关闭md0;
  4. 查看cat /proc/mdstat,如果没有raid数据表示关闭成功;
  5. 修改/etc/mdadm.conf,删除/dev/md0所在的行。

Raid不是备份,重要数据需要做好多设备备份!!!

你可能感兴趣的:(【mdadm】Linux系统软RAID的创建方法)