RAID(Redundant Array of Independent Disk独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能,能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。
一、raid基础
磁盘阵列是由很多磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。
1.RAID机制
通过使用多硬盘并行工作的方式来提高硬盘的IO性能。
RAID有三个关键技术:镜像:提供了数据的安全性;条带(块大小也可以说是条带的粒度),它的存在的就是为了提高I/O性,提供了数据并发性;数据的校验:提供了数据的安全。
2.RAID级别
RIAD分为多种,称之为RAID level,RAID共有7级:RAID0~RIAD6
常用的RAID级别有:RAID0、RAID1、RAID5、RAID6、RAID10
类型 | 读写性能 | 可靠性 | 磁盘利用率 | 成本 |
RAID0 | 最好 | 最低 | 100% | 较低 |
RAID1 | 读正常;写2份数据 | 高 | 50% | 高 |
RAID5 | 读:近似RAID0 写:多了校验 | RAID0<RAID5<RAID1 | (n-1)/n | RAID0<RAID5<RAID1 |
RAID6 | 读:近似RAID0 写:多了双重校验 | RAID6>RAID5 | RAID6<RAID5 | RAID6>RAID1 |
RAID10 | 读:RAID10=RAID0 写:RAID10=RAID1 | 高 | 50% | 最高 |
- 每种操作系统都有软件RAID的实现
- 在Linux中软件RAID通过mdadm这个命令(程序包)实现
- mdadm支持的RAID级别有:RAID0、RAID1、RAID4、RAID5、RAID6
- mdadm可以基于多块硬盘、分区或逻辑卷创建软件RIAD
- 创建好的软件RAID对应/dev/mdn,n为第几个RAID,如第一个创建的RAID为/dev/md0,第二个为/dev/md1
- RAlD的信息保存在/proc/mdstat文件中;通过mdadm命令也可查看
3.RAID实现
a.硬件RIAD
通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。
RAID卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。不同的RAID卡支持的RAID功能不同。支持RAlD0、RAID1、RAID4、RAID5、RAID10不等。不同品牌的RAID卡会有不同的功能与操作方法。我们不作分析评价。
b.软件RAID
软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:
- 占用内存空间
- 占用CPU资源
- 如果程序或者操作系统故障就无法运行
由于利用系统资源管理操作RAID,会占用宝贵的资源,软RAID逐渐被硬RIAD取代。学习软RAID原理与操作,深刻理解硬RIAD的底层逻辑,有助于提高硬RIAD应用水平。
本文主要讨论软RAID。在学习与训练之前,需要安装mdadm(不同版本安装命令有变化)、查看mdadm版本(mdadm -V)和浏览帮助(man mdadm)。
二、mdadm命令
mdadm命令来自于英文词组“ultiple devices admin”的缩写,其功能是用于管理RAID磁盘阵列组。作为Linux系统下软RAID设备的管理神器,mdadm命令可以进行创建、调整、监控、删除等全套管理操作。
1.帮助信息
在终端命令行录入mdadm –help,查看一下命令帮助
命令行录入man mdadm,查看一下命令mdadm的帮助文档
NAME
mdadm - manage MD devices aka Linux Software RAID
SYNOPSIS
mdadm [mode] <raiddevice> [options] <component-devices>
DESCRIPTION
RAID devices are virtual devices created from two or more real block devices. This allows multiple devices……
版本查看与升级
2.语法格式
mdadm命令的格式是:mdadm 【模式】【磁盘阵列】【参数】设备名
SYNOPSIS
mdadm [mode] <raiddevice> [options] <component-devices>
3.常用模式
mdadm has several major modes of operation:
模式 | 功能 |
Assemble | 激活预先配置的磁盘阵列 |
Build | 创建一个没有超级快的RAID设备 |
Create | 创建一个新的阵列组 |
Follow or Monitor | 选择监控模式 |
Grow | 改变RAID设备的大小或形态 |
4.基本参数
mdadm的参数较多,常用的列表如下。
参数 | 相同参数表达 | 主要功能 |
-A | --assemble | 激活预先配置的磁盘阵列 |
-B | --build | 创建一个没有超级快的RAID设备 |
-C | --create | 创建一个新的阵列组 |
-F | --follow | 选择监控模式 |
-G | --grow | 改变RAID设备的大小或形态 |
-s | --scan | 扫描配置文件或/proc/mdstat得到阵列缺失部分 |
-D | --detail | 显示/打印磁盘阵列设备的详细信息 |
-f | --fail | 将设备状态定为故障,以便移除该成员 |
-a | --add | 添加新的设备到阵列组 |
-r | --remove | 移除设备 |
-l | --level= | 设定磁盘阵列的级别 |
-n | --raid-devices= | 指定阵列成员(分区/磁盘)的数量 |
-x | --spare-devices= | 指定阵列中备用盘的数量 |
-c | --chunk= | 设定阵列的块大小,单位为kb |
-S | --stop | 停止阵列组 |
-h | --help | 帮助 |
-V | --version | 查看版本 |
-v | --verbose | 对于正在发生的,显示详细信息 |
-f | --force | 强制操作(非特定模式下) |
5.重要操作
创建raid、查看状态、停用、重启、标记某盘失效、移除失效盘、添加备用盘、格式化、挂载、卸载。
三、应用案例
我们创建三个磁盘阵列:RAID0、RAID1和RAID5。
需要提前添加一块20G硬盘,用fdisk分区,每个区2G。我们用二个分区创建RAID0,二个分区创建RAID1。重点讨论创建RAID5:共使用四个分区,其中一个是备用分区。
1.创建RAID
创建RAID0
mdadm -Cv /dev/md1 -l1 -n2 /dev/sdb[12]
创建RAID1
mdadm -Cv /dev/md0 -l0 -n2 /dev/sdb[35]
创建RAID5
mdadm -Cv /dev/md5 -l5 -n3 -x1 /dev/sdb[6789]
-C 创建一个新的RAID
-v 显示创建过程信息
-l 指定要创建的RAID级别
-n 指定硬盘的数量
-x 指定备用盘
创建raid需要的分区是/dev/sdb6等,可以分开写,也可以用正则表示。
/dev/sdb[6789]也可以写作/dev/sdb{6..9},或者/dev/sdb{6,7,8,9}
2.查看状态及信息
/proc/mdstat文件记录了所有raid信息:
查看指定RAID的详细信息
mdadm -D /dev/md5
3.创建配置文件
创建好RAID之后,我们需要创建一个配置文件,下次开机启用后创建的raid信息不丢失,启动RAID设备也方便(没有配置文件,停用RAID后再次启动很复杂)。
默认情况下,没有RAID设备配置文件,我们可以在/etc目录下创建一个,名称为mdadm.conf
mdadm -D --scan –verbose >> /etc/mdadm.conf
也可以简写命令:
mdadm -Dsv >> /etc/mdadm.conf
-D 显示详细信息(只包括raid信息)
-s 扫描所有raid设备
-v 列出所有详细信息(包括物理磁盘/分区信息)
查看配置文件
创建配置文件后,执行mdadm命令时会出现提示:
(在centos7、centos8和ubuntu22.04中都不出现该提示,仅此版本存在)
我们修改配置文件,把name的值更改一下:“guo:*”(guo是服务器主机名)改为仅保留后面的数字
修改后再重新执行命令,就不再出现提示了。
4.创建文件系统
与正常用磁盘/分区,或者逻辑卷相同,格式化执行同样命令:
mkfs.xfs /dev/md5
(ubuntu22.04不支持该命令,需要安装新的软件包。支持命令格式:mkfs –t xfs /dev/md5)
5. 挂载
创建文件系统之后就可以挂载使用了:
mount /dev/md5 /mnt/md5
6.管理操作
a.停用
不再使用raid,可以停用。
mdadm –S /dev/md5
b.重启
停用的raid,可以重新启用。
mdadm -A /dev/md5
使用配置文件启动阵列时,mdadm会查询配置文件中的设备和阵列内容,然后启动运行所有能运行RAID阵列。如果指定阵列的设备名字,则只启动对应的阵列。
没有配置文件,要在命令中添加上阵列的设备名字或阵列的UUID。
mdadm -A /dev/md5 /dev/sdb[6789]
mdadm -A /dev/md5 –uuid=71d152a0:bf55ac0f:1f43aa07:576c73be
c.模拟失效
查看/dev/md5信息
mdadm -D /dev/md5
可以看到三个分区正在使用,而/dev/sdb9备用。
我们可以模拟/dev/sdb6失效:
mdadm /dev/md5 -f /dev/sdb6
命令执行后,再次查看
备用盘正在使用,/dev/sdb6失效。
d.观察raid内部变化
linux中有一个命令watch可以查看文件的变化:
watch -n 2 ‘cat /proc/mdstat’
-n 2指定观察的间隔时间2秒
我们打开两个终端,分开执行。
在watch命令窗口,查看信息:
我们模拟/dev/sdb6失效,可观察中间的变化:
可以看到数据正在重写。完成后的效果:
e.移走失效盘
失效盘需要更换,就先移走
mdadm /dev/md5 -r /dev/sdb6
观察一下/proc/mdstat文件的变化:
没有了备用盘,需要再添加一个盘
mdadm -a /dev/md5 /dev/sdb10
再次查看
备用盘已在线。
f.卸载
一个raid设备不需要了,可以卸载。主要步骤:
备份数据;取消挂载;标记所有成员盘失效;移除失效盘;停用raid设备;擦除磁盘信息;删除配置文件相关内容;删除/etc/fstab文件中相关内容。
标记所有成员盘失效
移除失效盘
停用raid设备
擦除磁盘信息
可以训练直接停用raid,一次删除多个磁盘信息。
小结
1.保存RAID信息很重要。如果不做信息的保存,重启系统后raid不能被自动识别。
2.低版本mdadm,需要在配置文件录入设备列表,如DEVICE /dev/sdb /dev/sdc /dev/sdd[123]等,而4.2版本的mdadm不再需要添加此项内容。如果希望有详细设备信息,可以执行命令生成配置文件:
mdadm -Dsv >> /etc/mdadm.conf
3.在centos stream9版本中,不能标记所有活动盘失效,会提示某些盘在使用。可以停止raid后,直接擦除盘中信息,再进行另外的训练与使用。