软Raid基础实现流程

时间:2022-07-28
本文章向大家介绍软Raid基础实现流程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

[TOC]

0x00 前言

RAID是英文Redundant Array of Independent Disks的缩写,中文简称为独立冗余磁盘阵列。RAID是把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术组成磁盘阵列的不同方式称为RAID级别(RAID Levels),常用的RAID级别有以下几种: RAIDO,RAID1,RAID5,RAID6,RAID10等

我们知道实现RAID技术有两种,一是采用硬件设备支持,二是采用采用软件系统支持;

软raid比较依赖操作系统,所以他的劣势也显而易见,需要占用系统资源(主要是CPU资源)。 目前在Linux和windows下软raid都比较常见了:

  • Linux 是通过mdadm实现
  • windows则在win2003之后通过磁盘管理来实现

P.S: 需要强调的是生产环境下两块组raid的硬盘必须是同品牌同型号同容量的,否则极容易出现软raid失效的情况。


0x01 软Raid实践流程

1.基于CentOS7实现

环境准备:

OS:CentOS7 (可以采用虚拟机实现)
Disk:三个以上并且大小相同的硬盘(xvdb xvdc xvdd)

实践流程:

#0.磁盘做好raid分区
$ lsblk #查看磁盘信息 (分别对三块盘进行)
$ fdisk /dev/xvdb
n  #创建分区
p  #构建主分区
1  #分区号
... #设置扇区起始位置
l #列出分区类型代码 找到 Raid hex为fd
t #修改分区类型
fd #修改分区类型为Linux Raid autodetect;
p #打印分区表信息
w #同步写入对磁盘的操作

#1.并且检查是否安装了mdadm安装包
$rpm -q mdadm
mdadm-3.3.2-7.el7.x86_64

#2.创建磁盘阵列
mdadm -C -v /dev/md0 -l5 -n3 /dev/xvd[b,c,d]1 -x1 /dev/sde1
# -C,--create  创建阵列;
# -a,--auto   同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;
# -l,--level   阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;
# -n, --raid-devices 阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
# /dev/md0 阵列的设备名称,如果还有其他阵列组可以以此类推;


#3.查看同步进程(完成后不显示resync同步进度)
ct /proc/mdstat

#4.查看阵列组的状态.
mdadm -D /dev/md0

#5.创建md0的配置文件(mdadm运行时会自动检查/etc/mdadm.conf  文件并尝试自动装配,因此第一次配置raid后可以将信息导入到/etc/mdadm.conf中。)
echo DEVICE /dev/sd{a,b,c}1 >> /etc/mdadm.conf
mdadm -Evs >> /etc/mdadm.conf

#5.卸掉磁盘来模拟一块磁盘损坏 -f(--fail)
mdadm -f /dev/md0 /dev/xvdb1

#6.从阵列中移除/dev/sdb1 故障磁盘 -r(--remove)
mdadm /dev/md0 / -r /dev/xvdb1

#7.添加一块热备盘 /dev/sde1 -a(--add)
mdadm /dev/md0 --add /dev/xvde1

#8.格式化,挂载即可
mkfs.ext4 /dev/md0
mkfs.ext4  -E stride=16 -b 4096 /dev/md0 

#9.停止阵列
mdadm -S /dev/md1

注意事项:

  • 如果硬盘容量大于2TB以上请使用parted工具进行分区设置,但是需要将磁盘格式由MBR改成GPT类型然后再使用mkpart命令进行分区,分区完成之后使用set设置分区flag为raid即可;
  • 软raid不能当启动设备这就是软raid比较鸡肋的地方了。
  • 在格式化时可以指定-E选项下的stride参数指定条带是块大小的多少倍,有在一定程度上提高软RAID性能,如块默认大小为4k,而条带大小默认为64k,则stride为16,这样就避免了RAID每次存取数据时都去计算条带大小