Linux——万字详解磁盘阵列(RAID的创建启动停止卸载)

Posted 何翰宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux——万字详解磁盘阵列(RAID的创建启动停止卸载)相关的知识,希望对你有一定的参考价值。

文章目录


一、RAID介绍

1. RAID概念

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度增大容量,提供容错功能,能够确保数据安全性易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响

2. 常见的RAID级别

RAID0

RAID0特点:

  • 至少需要两块磁盘
  • 数据条带化分布到磁盘,高的读写性能,100%高存储空间利用率
  • 数据没有冗余策略,一块磁盘故障,数据将无法恢复
  • 应用场景:
    • 对性能要求高但对数据安全性和可靠性要求不高的场景,比如音频、视频等的存储。

RAID1


RAID1特点:

  • 至少需要2块磁盘
  • 数据镜像备份写到磁盘上(工作盘和镜像盘),可靠性高,磁盘利用率为50%
  • 读性能可以,但写性能不佳
  • 一块磁盘故障,不会影响数据的读写
  • 应用场景:
    • 对数据安全可靠要求较高的场景,比如邮件系统、交易系统等。

RAID5


RAID5特点:

  • 至少需要3块磁盘
  • 数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
  • 以奇偶校验(分散)做数据冗余
  • 一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
  • 是目前综合性能最佳数据保护解决方案
  • 兼顾了存储性能、数据安全和存储成本等各方面因素(性价比高
  • 适用于大部分的应用场景

RAID6


RAID6特点:

  • 至少需要4块磁盘
  • 数据条带化存储在磁盘,读取性能好,容错能力强
  • 采用双重校验方式保证数据的安全性
  • 如果2块磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
  • 成本要比其他等级高,并且更复杂
  • 一般用于对数据安全性要求非常高的场合

RAID10


RAID10特点:

  • RAID10是raid1+raid0的组合
  • 至少需要4块磁盘
  • 两块硬盘为一组先做raid1,再将做好raid1的两组做raid0
  • 兼顾数据的冗余(raid1镜像)和读写性能(raid0数据条带化)
  • 磁盘利用率为50%,成本较高

汇总

类型读写性能可靠性磁盘利用率成本
RAID0最好最低100%较低
RAID1读正常;写两份数据50%
RAID5读:近似RAID0 写:多了校验RAID0<RAID5<RAID1(n-1)/nRAID0<RAID5<RAID1
RAID6读:近似RAID0 写:多了双重校验RAID6>RAID5RAID6<RAID5RAID6>RAID1
RAID10读:RAID10=RAID0 写:RAID10=RAID150%最高

3. 软硬RAID

1)软RAID

软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:

  • 占用内存空间
  • 占用CPU资源
  • 如果程序或者操作系统故障就无法运行

总结:基于以上缺陷,所以现在一般不用软raid

2)硬RAID

通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。RAID卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。不同的RAID卡支持的RAID功能不同。支持RAlD0、RAID1、RAID4、RAID5、RAID10不等。

二、软RAID创建

/proc/mdstat文件记录了所有raid信息

1. 环境准备

准备20G磁盘,分10个区

sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0    2G  0 part 
├─sdb3            8:19   0    2G  0 part 
├─sdb4            8:20   0    1K  0 part 
├─sdb5            8:21   0    2G  0 part 
├─sdb6            8:22   0    2G  0 part 
├─sdb7            8:23   0    2G  0 part 
├─sdb8            8:24   0    2G  0 part 
├─sdb9            8:25   0    2G  0 part 
└─sdb10           8:26   0    2G  0 part 

安装 mdadm工具:yum -y install mdadm

2. 创建RAID0

sdb1sdb2创建raid0

创建read

[root@lamp ~]# mdadm --create /dev/md0 --raid-devices=2 --level=0 /dev/sdb[12]

#  md0 raid的名称
# raid-devices=2  需要两个分区
# --level=0  reid级别,这里是raid0

或者使用这种方式也可以创建raid

# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2
-C:创建软raid
-l:指定raid级别
-n:指定raid中设备个数

/proc/mdstat文件记录了所有raid信息

[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] 
md0 : active raid0 sdb2[1] sdb1[0]
      4188160 blocks super 1.2 512k chunks
      
unused devices: <none>

1)查看指定的RAID信息

[root@lamp ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Mon Jul 25 21:52:30 2022
        Raid Level : raid0
        Array Size : 4188160 (3.99 GiB 4.29 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jul 25 21:52:30 2022
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

Consistency Policy : none

              Name : lamp:0  (local to host lamp)
              UUID : dde3ce68:24834468:fe11bdff:8e177bda
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2

2)格式化挂载使用

[root@lamp ~]# mkfs.xfs /dev/md0

[root@lamp ~]# mount /dev/md0 /u01
[root@lamp ~]# df -h
/dev/md0                 4.0G   33M  4.0G   1% /u01

3)测试

root@lamp ~]# dd if=/dev/zero of=/u01/file bs=1M count=1024

[root@lamp ~]# iostat -m -d /dev/sdb[12] 2
Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sdb1             61.69         0.00        30.85          0         62
sdb2             61.69         0.00        30.85          0         62

3. 创建RAID1

sdb5sdb6来创建RAID1
watch命令监控该文件变化情况,1秒钟显示一次

# watch -n 1 cat /proc/mdstat
[=====>...............]  resync = 25.2% (267520/1059200) finish=0.3min speed=38217K/sec
     # 以上信息说明两块盘在进行同步,100%说明同步完成
[root@lamp ~]# mdadm -C /dev/md1 -l 1 -n 2 /dev/sdc[56]

1)查看RAID信息

[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb6[1] sdb5[0]
      2094080 blocks super 1.2 [2/2] [UU]  # 两个UU说明状态ok,一个盘故障则显示_U
      
md0 : active raid0 sdb2[1] sdb1[0]
      4188160 blocks super 1.2 512k chunks
[root@lamp ~]# mdadm -D /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Mon Jul 25 22:13:39 2022
        Raid Level : raid1
        Array Size : 2094080 (2045.00 MiB 2144.34 MB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Mon Jul 25 22:13:45 2022
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : lamp:1  (local to host lamp)
              UUID : 7a023bc5:8c62d860:f8dcd0b3:2c8d3484
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6

2)格式化挂载使用

[root@lamp ~]# mkfs.xfs /dev/md1
[root@lamp ~]# mount /dev/md1 /u02
[root@lamp ~]# df -h
/dev/md1                 2.0G   33M  2.0G   2% /u02

3)验证热插拔

模拟sdb5盘故障

[root@lamp ~]# mdadm /dev/md1 -f /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md1
# -f or --fail  表示失效

查看md1状态

[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb6[1] sdb5[0](F) # F表示失效失败
      2094080 blocks super 1.2 [2/1] [_U] # _表示有一块盘失效
[root@lamp ~]# mdadm -D /dev/md1 

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       22        1      active sync   /dev/sdb6

       0       8       21        -      faulty   /dev/sdb5 # faulty   表示盘已经失效 

移除故障或者失效硬盘(热拔)

[root@lamp ~]# mdadm /dev/md1 -r /dev/sdb5
mdadm: hot removed /dev/sdb5 from /dev/md1

[root@lamp ~]# mdadm /dev/md1
# 只剩 sdb6,sdb5已被拔出
    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       1       8       22        1      active sync   /dev/sdb6

加入新的磁盘到raid1中(热插)

[root@lamp ~]# mdadm /dev/md1 -a /dev/sdb5
mdadm: added /dev/sdb5

# -a or --add 表示增加

[root@lamp ~]# watch -n 1 cat /proc/mdstat
1059200 blocks super 1.2 [2/1] [_U]
      [====>................]  recovery = 21.4% (227392/1059200) finish=0.0min speed=227392K/sec

查看信息

[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb5[2] sdb6[1]
      2094080 blocks super 1.2 [2/2] [UU]

4. 创建RAID5

sdb[7,8,9,10]创建RAID5

[root@lamp ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdb7,8,9,10
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

使用watch -n 1 cat /proc/mdstat命令实时监控/proc/mdstat目录

Every 2.0s: cat /proc/mdstat                                      Mon Jul 25 22:49:32 202
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdb9[4] sdb10[3](S) sdb8[1] sdb7[0]
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [==================>..]  recovery = 94.8% (1986176/2094080) finish=0.0min speed=2206
86K/sec

1)查看信息

[root@lamp ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md5 : active raid5 sdb9[4] sdb10[3](S) sdb8[1]  # S表示spare备份盘sdb7[0]
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]



查看详细信息

[root@lamp ~]# mdadm -D /dev/md5
/dev/md5:
           Version : 1.2
     Creation Time : Mon Jul 25 22:48:59 2022
        Raid Level : raid5
        Array Size : 4188160 (3.99 GiB 4.29 GB)
     Used Dev Size : 2094080 (2045.00 MiB 2144.34 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Mon Jul 25 22:49:09 2022
             State : clean 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : lamp:5  (local to host lamp)
              UUID : 9c2d91cf:a0356eb5:749a31c5:58ed72e4
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       23        0      active sync   /dev/sdb7
       1       8       24        1      active sync   /dev/sdb8
       4       8       25        2      active sync   /dev/sdb9

       3       8       26        -      spare   /dev/sdb10

说明:热备盘表示当其中一块盘故障后,热备盘会立马顶上去,而不需要人为手动干预。

2)格式化挂载

[root@lamp ~]# mkfs.xfs /dev/md5

[root@lamp ~]# mount /dev/md5 /u03

3) 查看空间使用情况

[root@lamp ~]# df -h

ilesystem               Size  Used Avail Use% Mounted on
/dev/md0                 4.0G  1.1G  3.0G  26% /u01 # 利用率100% (1.1*1024/4*1024)
/dev/md1                 2.0G   33M  2.0G   2% /u02 # 利用率50% (33/(2*1024))
/dev/md5                 4.0G   33M  4.0G   1% /u03 # 利用率(n-1)/n , (3-1)/3*3 ,n为磁盘数

4)此时热设备磁盘作用

标记一块盘失效

md5 : active raid5 sdb9[4] sdb10[3](S) sdb8[1] sdb7[0] # S表示spare备份盘

标记sdb7失效

[root@lamp ~]# mdadm /dev/md5 -f /dev/sdb7
mdadm: set /dev/sdb7 faulty in /dev/md5

通过watch命令监控目录

sdb7(F)失效后,原来的sdb10(S)热备盘立马顶上去同步数据

Every 3.0s: cat /proc/mdstat                                      Mon Jul 25 23:29:45 2022

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md5 : active raid5 sdb9[4] sdb10[3] sdb8[1] sdb7[0](F)
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [==========>..........]  recovery = 53.7% (1125120/2094080) finish=0.0min speed=2812
80K/sec

[root@lamp ~]# mdadm -D /dev/md5
/dev/md5:

    Number   Major   Minor   RaidDevice State
       3       8       26        0      active sync   /dev/sdb10
       1       8       24        1      active sync   /dev/sdb8
       4       8       25        2      active sync   /dev/sdb9

       0       8       23        -      faulty   /dev/sdb7

移除失效的盘

[root@lamp ~]# mdadm /dev/md5 -r /dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/md5

# sdb7已经被移除
[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md5 : active raid5 sdb9[4] sdb10[3] sdb8[1]
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]


再次添加一个热备盘到raid5中

mdadm /dev/md5 -a /dev/sdc7

三、RAID管理

1. 保存RAID信息

为什么要保存RAID信息?
如果不做信息的保存,重启系统后raid不能被自动识别

1)创建配置文件

vim /etc/mdadm.conf
编写配置文件,写入已经做过RAID 的分区
注意:该配置文件默认没有,手动创建,里面写上做了raid的所有硬盘设备。

DEVICES /dev/sdb[1256789] /dev/sdb10

一下标有md的就是已经做过RAID的,也就是除了3和4

sdb               8:16   0   20G  0 disk  
├─sdb1            8:17   0    2G  0 part  
│ └─md0           9:0    0    4G  0 raid0 
├─sdb2            8:18   0    2G  0 part  
│ └─md0           9:0    0    4G  0 raid0 
├─sdb3            8:19   0    2G  0 part  
├─sdb4            8:20   0    1K  0 part  
├─sdb5            8:21   0    2G  0 part  
│ └─md1           9:1    0    2G  0 raid1 
├─sdb6            8:22   0    2G  0 part  
│ └─md1           9:1    0    2G  0 raid1 
├─sdb7            8:23   0    2G  0 part  
│ └─md5           9:5    0    4G  0 raid5 
├─sdb8            8:24   0    2G  0 part  
│ └─md5           9:5    0    4G  0 raid5 
├─sdb9            8:25   0    2G  0 part  
│ └─md5           9:5    0    4G  0 raid5 
└─sdb10           8:26   0    2G  0 part  
  └─md5           9:5    0    4G  0 raid5

2)扫描RAID信息保存到配置文件

[root@lamp ~]# mdadm -D --scan >> /etc/mdadm.conf
[root@lamp ~]# cat /etc/mdadm.conf
DEVICES /dev/sdb[1256789] /dev/sdb10
ARRAY /dev/md/0 metadata=1.2 name=lamp:0 UUID=dde3ce68:24834468:fe11bdff:8e177bda
ARRAY /dev/md/5 metadata=1.2 spares=1 name=lamp:5 UUID=1cafb52d:6f6cf691:1bc3f0c8:abeb60fc
ARRAY /dev/md/1 metadata=1.2 name=lamp:1 UUID=7a023bc5:8c62d860:f8dcd0b3:2c8d3484

2. RAID停止与启动

以RAID5为例

1)停止RAID

卸载 RAID

[root@lamp ~]# umount /u03

使用命令停止RAID

[root@lamp ~]# mdadm --stop /dev/md5

2)启动RAID

1.如果存在/etc/mdadm.conf就用以下方式启动

[root@lamp ~]# mdadm -A /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

2.如果不存在/etc/mdadm.conf配置文件,就用这个方式启动

[root@lamp ~]# mdadm -A /dev/md5 /dev/sdb7 /dev/sdb8 /dev/sdb9 /dev/sdb10
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

3.如果连设备名都不知道,可以去查看每个设备的raid信息,使用uuid把raid设备重新组合
注意:同一个raid里每个磁盘查看的UUID都是这个值

[root@lamp ~]# mdadm -E /dev/sdb7
/dev/sdb7:
     Array UUID : 1cafb52d:6f6cf691:1bc3f0c8:abeb60fc
     
[root@lamp ~]# mdadm -E /dev/sdb8
/dev/sdb8:
     Array UUID : 1cafb52d:6f6cf691:1bc3f0c8:abeb60fc

通过以上方法找到后进行重新组合,如下:

[root@lamp ~]# mdadm -A --uuid=1cafb52d:6f6cf691:1bc3f0c8:abeb60fc /dev/md5
mdadm: /dev/md5 has been started with 3 drives and 1 spare.

3. 删除RAID

以RAID5为例子

1)卸载设备

[root@lamp ~]# umount /u03

2)移除所有磁盘

1.先让RAID5的磁盘都标记失效

[root@lamp ~]# mdadm /dev/md5 -f /dev/sdb7,8,9,10
mdadm: set /dev/sdb7 faulty in /dev/md5
mdadm: set /dev/sdb8 faulty in /dev/md5
mdadm: set /dev/sdb9 faulty in /dev/md5
mdadm: set /dev/sdb10 faulty in /dev/md5

[root@lamp ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md5 : active raid5 sdb10[3](F) sdb7[5](F) sdb9[4](F) sdb8[1](F)
      4188160 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/0] [___]

2.再移除所有磁盘

[root@lamp ~]# mdadm /dev/md5 -r /dev/sdb7,8,9,10
mdadm: hot removed /dev/sdb7 from /dev/md5
mdadm: hot removed /dev/sdb8 from /dev/md5
mdadm: hot removed /dev/sdb9 from /dev/md5
mdadm: hot removed /dev/sdb10 from /dev/md


├─sdb7            8:23   0    2G  0 part  
├─sdb8            8:24   0    2G  0 part  
├─sdb9            8:25   0    2G  0 part  
└─sdb10           8:26   0    2G  0 part 

3)停止RAID

[root@lamp ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5

4)擦出超级块(superblock)清除相关信息

[root@lamp ~]# clear
[root@lamp ~]# mdadm --misc --zero-superblock /dev/sdb7,8,9,10

完成卸载

以上是关于Linux——万字详解磁盘阵列(RAID的创建启动停止卸载)的主要内容,如果未能解决你的问题,请参考以下文章

Linux之磁盘阵列技术详解--raid0创建

Linux中配置RAID及详解

linux基础-磁盘阵列(RAID)实例详解

Linux磁盘阵列技术详解--raid 5和raid 10的创建

#yyds干货盘点# linux动态磁盘(raid5)的创建扩容缩容等操作以及各个名词参数的解释,命令详解

Raid5阵列的创建及其管理