Linux | RAID 从基础概念到实例配置
注:本文为“Linux | RAID”相关合辑。
略作重排,如有内容异常,请看原文。
How to Manage Software RAID’s in Linux with ‘Mdadm’ Tool
在 Linux 中使用 ‘Mdadm’ 工具管理软件 RAID
一:介绍 RAID 的级别和概念
RAID 早期定义为廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),现阶段统一命名为独立磁盘冗余阵列(Redundant Array of Independent Drives)。
早期单块磁盘存储容量小且硬件成本高昂,当前大容量物理磁盘的购置成本已大幅降低。RAID 是将多块物理磁盘整合为单一逻辑卷的磁盘组合架构。

在 Linux 中理解 RAID 设置
RAID 由若干物理磁盘组合构成磁盘阵列,至少将 2 块及以上物理磁盘接入 RAID 控制器,即可整合为逻辑卷;多块物理磁盘可划分至同一磁盘组,单个磁盘组仅能配置一种 RAID 级别。RAID 可优化服务器运行表现,不同级别 RAID 的运行表现存在差异化特征,同时依靠容错机制与高可用特性实现数据存储防护。
本节阐述 RAID 的基础定义与分级标准,相关理论为 Linux 平台部署 RAID 的前置认知内容。
软件 RAID 和硬件 RAID
软件 RAID 依托宿主机系统资源完成调度运算,运行过程需占用主机硬件资源。系统完成引导流程后,加载 RAID 管理程序方可读取软件 RAID 卷内数据。软件 RAID 无需专用物理硬件设备,部署无额外硬件投入成本。
硬件 RAID 整体运行表现更优,通过 PCI Express 扩展卡搭载专用 RAID 控制器,全程不占用宿主机系统资源。硬件 RAID 配置 NVRAM 芯片用于读写数据缓存,阵列重构过程中若出现断电工况,可依靠备用电池维持缓存数据留存,适用于大规模业务场景,但硬件购置投入成本较高。
硬件 RAID 卡结构示意如下:

硬件 RAID
基础 RAID 专业概念
- 校验:应用于 RAID 阵列重构流程,依托已存储的校验数据还原阵列中丢失的数据内容。RAID 5、RAID 6 架构均采用校验机制实现数据防护。
- 条带化:将数据按固定分片分散存储至多块物理磁盘,单块磁盘不完整存储全部数据内容。以 2 块磁盘组成的阵列为例,数据会拆分后分别存储于两块磁盘中。
- 镜像:主要应用于 RAID 1 与 RAID 10 架构,对数据生成完整副本备份。RAID 1 架构会在多块磁盘中同步写入相同数据内容。
- 热备份:部署于服务器中的备用物理磁盘,可自动替换阵列内故障磁盘。阵列中任意成员磁盘出现损坏时,热备份磁盘自动接入阵列并参与 RAID 重构流程。
- 块:RAID 控制器单次读写数据的最小调度单元,最小规格为 4 KB。合理配置块大小参数,可提升阵列 I/O 读写效率。
RAID 划分多种架构级别,下文选取实际生产环境应用频次较高的主流级别进行说明:
- RAID 0 = 条带化架构
- RAID 1 = 镜像架构
- RAID 5 = 单磁盘分布式奇偶校验架构
- RAID 6 = 双磁盘分布式奇偶校验架构
- RAID 10 = 镜像 + 条带 嵌套架构
Linux 各大发行版均通过 mdadm 软件包实现 RAID 阵列的管理操作,下文依次解析各类 RAID 级别的架构原理与工作特性。
RAID 0 / 条带化架构

条带化架构具备优异的读写表现。RAID 0 架构下,数据以分片形式分散写入阵列内各物理磁盘,数据内容拆分后分别存储至不同磁盘。
以 2 块物理磁盘组成的阵列为例,若向逻辑卷写入数据 TECMINT,系统按数据块分片规则交替向两块磁盘写入数据单元,循环完成全部数据存储。(LCTT 译注:实际存储按数据块分片执行,非字节级分片)
该架构下任意一块成员磁盘发生故障,会直接造成阵列数据遗失,单块磁盘仅存储部分分片数据,无法完成阵列重构。在读写速率与运行表现层面,RAID 0 具备突出优势,部署 RAID 0 至少需要 2 块物理磁盘。存储高价值业务数据时,不建议选用该架构。
- 具备高水平读写运行表现
- 阵列存储容量无额外损耗
- 不具备磁盘容错能力
- 读写速率均处于较高水平
RAID 1 / 镜像化架构

镜像架构可维持稳定的运行表现,对写入数据生成完整副本同步存储。以 2 块 2 TB 物理磁盘为例,单块磁盘物理容量合计 4 TB,经 RAID 控制器整合为单一逻辑卷后,对外可用存储容量仅为 2 TB。
数据写入逻辑卷时,会同步复制至两块物理磁盘。部署 RAID 1 至少需要 2 块物理磁盘,阵列内单块磁盘出现故障后,更换新磁盘即可完成阵列重构;依托另一块正常磁盘的副本数据,可实现数据无遗失。
- 整体运行表现稳定
- 阵列可用存储容量折损 50%
- 具备完整的单磁盘容错能力
- 阵列重构耗时较短
- 数据写入速率存在衰减
- 数据读取速率表现良好
- 适用于操作系统部署及小规模数据库存储场景
RAID 5 / 分布式奇偶校验架构

RAID 5 广泛应用于企业级业务场景,采用分布式奇偶校验机制运行,校验数据可作为阵列故障后的重构依据,依托阵列内正常运行的成员磁盘数据完成还原,实现单磁盘故障工况下的数据防护。
以 4 块物理磁盘组成的阵列为例,单块磁盘故障并完成硬件更换后,系统可依据分布式奇偶校验数据向新磁盘还原完整业务数据。奇偶校验信息分散存储于阵列全部磁盘内,以 4 块 1 TB 磁盘组成的阵列为例,单块磁盘划分 256 GB 空间存储校验数据,剩余 768 GB 空间供用户存储业务数据。RAID 5 可容忍任意 1 块成员磁盘故障并维持阵列正常运行,故障磁盘数量超过 1 块时,会引发阵列数据遗失。
- 综合运行表现优异
- 数据读取速率表现突出
- 无专用硬件 RAID 控制器时,数据写入速率处于中等水平且存在一定衰减
- 依托全阵列奇偶校验信息完成数据重构
- 具备完整的单磁盘容错能力
- 阵列等效损耗 1 块磁盘存储容量用于校验数据存储
- 适配文件服务器、Web 服务器及重要业务数据备份场景
RAID 6 / 双分布式奇偶校验架构

RAID 6 架构原理与 RAID 5 相近,配置两组分布式奇偶校验机制,多用于大容量磁盘阵列场景。部署 RAID 6 至少需要 4 块物理磁盘,可容忍阵列内同时 2 块磁盘故障,更换新磁盘后仍可依托双校验机制完成数据重构。
相较于 RAID 5,RAID 6 数据写入需同步向多块磁盘写入双份校验信息,整体运行表现有所降低;搭载专用硬件 RAID 控制器后,读写速率可恢复至中等标准。以 6 块 1 TB 物理磁盘组成的阵列为例,4 块磁盘用于业务数据存储,2 块磁盘对应承担双校验数据存储工作。
- 综合运行表现偏弱
- 数据读取速率维持良好水准
- 无专用硬件 RAID 控制器时,数据写入速率衰减明显
- 依托双组奇偶校验信息完成阵列数据重构
- 具备完整的双磁盘容错能力
- 阵列等效损耗 2 块磁盘存储容量用于校验数据存储
- 适配大容量磁盘阵列部署
- 可应用于大规模数据备份与视频流媒体业务场景
RAID 10 / 镜像 + 条带嵌套架构


RAID 10 亦可记作 1+0 架构,与 0+1(RAID 01)架构存在流程差异:RAID 10 优先完成磁盘镜像分组,再执行条带化分片存储;RAID 01 优先执行条带化分片,再对分片磁盘组做镜像备份,实际应用中 RAID 10 工况稳定性优于 RAID 01。
以 4 块物理磁盘组成的阵列为例,向逻辑卷写入数据时,架构同步启用镜像与条带化机制完成数据存储。
以写入数据 TECMINT 为例,架构先将单个数据单元同步写入一组镜像磁盘,所有数据单元均生成磁盘副本;同时遵循 RAID 0 条带化规则,按分组交替向不同镜像磁盘组写入分片数据,完成整体存储流程。
- 读写双向运行表现均衡稳定
- 阵列可用存储容量折损 50%
- 具备多磁盘组合容错特性
- 依托副本数据实现快速阵列重构
- 适配高负载、高可用要求的数据库存储场景
结论
本文阐述 RAID 的基础定义、架构分类及各类主流级别的工作特性,梳理生产环境常用的 RAID 架构选型依据。掌握 RAID 基础理论,是完成 Linux 平台阵列部署的前置条件,本文内容可支撑 RAID 基础认知学习需求。
二:使用 mdadm 工具创建软件 RAID 0(条带化)
RAID 为廉价磁盘冗余阵列,该存储架构凭借自身的高可用性与运行稳定性,可部署于大规模业务环境。相较于单块磁盘独立运行的模式,RAID 架构可对业务数据提供防护机制。RAID 由多块物理磁盘聚合构成,可生成具备阵列属性的逻辑卷,多块物理驱动器可组合为阵列集合单元。
组建 RAID 架构至少需要接入 RAID 控制器的 2 块物理磁盘生成逻辑卷,也可依据选定的 RAID 级别向阵列内扩充物理驱动器。不依赖专用物理硬件构建的 RAID 架构,定义为软件 RAID,软件 RAID 也被称作平民级 RAID。

在 Linux 中创建 RAID0
部署 RAID 架构可规避单点硬件故障引发的数据丢失问题。单块物理磁盘存储数据时,磁盘损坏后数据无法恢复,借助多块磁盘组建 RAID 阵列,可构建数据容错防护机制。
在 RAID 0 中条带的定义
条带机制可将数据拆分并同步分发至多块物理磁盘存储。以 2 块物理磁盘为例,向对应逻辑卷写入数据时,数据会按规则分散存储至两块磁盘。
RAID 0 架构可提升磁盘读写吞吐性能,但阵列内任意一块驱动器出现故障时,整组阵列的数据均无法完整恢复。仅可通过在 RAID 0 逻辑卷中部署操作系统,提升业务文件的安全防护等级。
- RAID 0 具备较高读写吞吐性能
- RAID 0 阵列无存储空间冗余损耗
- 不具备故障容错能力,阵列内任意磁盘损坏均会造成数据无法恢复
- 顺序读写与随机读写表现均处于较高水平
部署要求
RAID 0 架构允许的最小磁盘数量为 2 块,扩容新增磁盘数量需遵循 2、4、6、8 等偶数规则。设备搭载物理 RAID 阵列卡且端口资源充足时,可按需扩充磁盘数量。
本次部署不采用硬件 RAID 架构,全程基于软件 RAID 完成配置。服务器搭载物理硬件 RAID 卡时,可通过配套功能管理界面进入配置;部分主板集成原生 RAID 功能,可按下 Ctrl + I 组合键调取配置界面。
服务器配置参数
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.225
单盘容量 : 20 GB
本文为系列教程第 2 篇,以 /dev/sdb、/dev/sdc 两块 20 GB 物理磁盘为例,讲解 Linux 系统下 RAID 0 条带化阵列的搭建与使用流程。
第 1 步:系统更新与 mdadm 管理工具安装
在 Linux 系统配置 RAID 0 前,执行系统更新操作,随后安装 mdadm 程序包。mdadm 为 Linux 平台下的专用工具,可实现 RAID 设备的配置与运维管理。
yum clean all && yum update
yum install mdadm -y

安装 mdadm 工具
第 2 步:识别 2 块 20 GB 物理磁盘
正式创建 RAID 0 阵列前,需确认物理磁盘已被系统识别,执行以下命令校验磁盘设备:
\# ls -l /dev | grep sd

检查硬盘
磁盘识别完成后,校验目标磁盘是否已被现有 RAID 阵列占用,执行以下 mdadm 检测命令:
\# mdadm --examine /dev/sd[b-c]

检查 RAID 设备
由命令输出结果可判定,/dev/sdb 与 /dev/sdc 未接入任何已有 RAID 阵列,可用于新建阵列。
第 3 步:创建 RAID 类型分区
通过 fdisk 工具在 /dev/sdb、/dev/sdc 磁盘中创建 RAID 专属分区,以下以 /dev/sdb 为例演示分区创建流程:
\# fdisk /dev/sdb
按照如下交互指令完成基础分区创建:
- 输入
n新建分区 - 输入
P选定主分区类型 - 指定分区编号为
1 - 连续两次回车,采用分区起止扇区默认参数
- 输入
p打印已创建分区信息

创建分区
修改分区类型为 Linux RAID 专属格式,操作流程如下:
- 输入
L列出系统支持的所有分区类型编码 - 输入
t执行分区类型修改操作 - 输入
fd设定为 Linux RAID 分区类型,回车确认 - 输入
p再次打印分区,校验类型修改结果 - 输入
w保存分区配置并退出工具

在 Linux 上创建 RAID 分区
注:参照上述完整流程,在 /dev/sdc 磁盘中同步创建同规格 RAID 分区。
分区配置完成后,校验两块磁盘的分区 RAID 属性,执行以下检测命令:
\# mdadm --examine /dev/sd[b-c]
\# mdadm --examine /dev/sd[b-c]1

验证 RAID 分区
第 4 步:生成 RAID md 虚拟设备
执行以下命令创建 /dev/md0 虚拟设备,并指定阵列级别为 RAID 0:
\# mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd[b-c]1
\# mdadm --create /dev/md0 --level=stripe --raid-devices=2 /dev/sd[b-c]1
参数释义:
-C:执行阵列创建动作-l:指定 RAID 阵列级别-n:指定阵列包含的物理设备数量
虚拟设备创建完成后,可通过多条命令查看阵列级别、成员设备与运行状态:
\# cat /proc/mdstat

查看 RAID 级别
\# mdadm -E /dev/sd[b-c]1

查看 RAID 设备
\# mdadm --detail /dev/md0

查看 RAID 阵列
第 5 步:为 RAID 设备配置文件系统与挂载
对 /dev/md0 设备格式化,部署 ext4 文件系统:
\# mkfs.ext4 /dev/md0

创建 ext4 文件系统
文件系统格式化完成后,创建挂载目录并执行设备挂载:
\# mkdir /mnt/raid0
\# mount /dev/md0 /mnt/raid0/
执行磁盘使用率命令,校验设备挂载状态:
\# df -h
在挂载目录 /mnt/raid0 内新建测试文件,写入内容并校验读写功能:
\# touch /mnt/raid0/tecmint.txt
\# echo "Hi everyone how you doing ?" > /mnt/raid0/tecmint.txt
\# cat /mnt/raid0/tecmint.txt
\# ls -l /mnt/raid0/

验证挂载的设备
挂载功能校验无误后,编辑 /etc/fstab 文件配置开机自动挂载:
\# vim /etc/fstab
在文件内追加以下挂载配置条目,可依据实际部署路径与文件系统类型调整参数:
/dev/md0 /mnt/raid0 ext4 defaults 0 0

添加设备到 fstab 文件中
执行挂载校验命令,检测 fstab 配置条目语法合法性:
\# mount -av

检查 fstab 文件是否有误
第 6 步:持久化保存 RAID 阵列配置
将当前 RAID 阵列配置写入配置文件,用于系统重启后自动加载阵列,执行以下命令:
\# mdadm -E -s -v >> /etc/mdadm.conf
\# mdadm --detail --scan --verbose >> /etc/mdadm.conf
\# cat /etc/mdadm.conf

保存 RAID 配置
本节完整演示了 Linux 环境下双磁盘搭建条带化 RAID 0 阵列的全流程。
三:用两块磁盘创建 RAID 1(镜像)
RAID 镜像 可将相同数据生成完整克隆副本,分别写入两块独立磁盘。组建 RAID 1 至少需要 2 块物理磁盘,该模式适用于读取性能、数据可靠优先级高于存储空间容量的应用场景。

在 Linux 中设置 RAID 1
组建磁盘镜像可规避单块硬盘物理故障引发的数据丢失问题。镜像阵列内每块磁盘均存储完整数据副本,单块磁盘出现故障时,系统可从其余正常磁盘读取对应数据。故障磁盘可在服务器运行状态下直接更换,业务运行过程无需中断。
RAID 1 的特点
- 阵列读写表现表现平稳。
- 磁盘空间利用率为 50 % 50\% 50%。若配置 2 块容量为 500 GB 500\ \text{GB} 500 GB 的磁盘,物理总容量为 1 TB 1\ \text{TB} 1 TB,阵列可用容量仅为 500 GB 500\ \text{GB} 500 GB。
- 阵列内单块磁盘故障不会造成数据遗失,阵列内磁盘存储内容完全一致。
- 阵列读取速率优于写入速率。
配置要求
组建 RAID 1 基础配置为 2 块磁盘,亦可扩展至 4、6、8 等偶数块磁盘。扩展磁盘数量时,服务器需搭载 RAID 硬件适配卡。
本文采用软件 RAID 模式,不依赖硬件 RAID 设备。若服务器内置硬件 RAID 卡,可通过设备管理界面或 Ctrl + I 快捷键进入配置界面。
服务器环境参数
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.226
主机名 : rd1.tecmintlocal.com
磁盘 1 [20GB] : /dev/sdb
磁盘 2 [20GB] : /dev/sdc
本文基于 Linux 平台,使用 mdadm 工具完成软件 RAID 1 阵列的分步部署,该部署流程同样适配 RedHat、CentOS、Fedora 等 Linux 发行版本。
第 1 步:安装工具并检测磁盘
- Linux 环境下通过 mdadm 工具实现 RAID 阵列的创建与管理,可通过系统包管理工具完成软件安装。
\# yum install mdadm [RedHat 系列系统]
\# apt-get install mdadm [Debian 系列系统]
- 完成 mdadm 软件包安装后,执行以下命令检测磁盘初始化状态。
\# mdadm -E /dev/sd[b-c]

检查 RAID 的磁盘
由图示输出信息可知,磁盘未检测到超级块标识,代表当前未配置任何 RAID 阵列。
第 2 步:划分 RAID 专用分区
- 选取
/dev/sdb与/dev/sdc两块磁盘分区组建 RAID 1,通过fdisk工具新建分区并修改分区类型为 RAID 模式。
\# fdisk /dev/sdb
分区操作流程如下:
- 输入
n新建分区 - 输入
P选定主分区类型 - 指定分区编号为
1 - 连续按下回车键,将磁盘全部容量分配至该分区
- 输入
P查看已创建分区信息 - 输入
L列出系统支持的所有分区类型编码 - 输入
t执行分区类型修改操作 - 输入
fd设定为 Linux RAID 分区类型,回车确认配置 - 再次输入
p核验分区配置修改结果 - 输入
w保存分区表配置并退出工具

创建磁盘分区
完成 /dev/sdb 分区配置后,按照相同流程对 /dev/sdc 执行分区操作。
\# fdisk /dev/sdc

创建第二个分区
- 两块磁盘分区创建完成后,执行磁盘检测命令,核验分区类型配置状态。
\# mdadm -E /dev/sd[b-c]

验证分区变化

检查 RAID 类型
注意:图示输出结果显示,sdb1 与 sdc1 分区暂无 RAID 阵列相关定义,亦是系统未识别到超级块的原因。
第 3 步:创建 RAID 1 阵列设备
- 执行下述命令,创建
/dev/md0镜像模式 RAID 1 设备,并查看阵列运行状态。
\# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[b-c]1
\# cat /proc/mdstat

创建 RAID 设备
- 执行命令查看磁盘分区阵列标识与 RAID 阵列详细参数。
\# mdadm -E /dev/sd[b-c]1
\# mdadm --detail /dev/md0

检查 RAID 设备类型

检查 RAID 设备阵列
由图示信息可确认,RAID 1 阵列已完成部署,阵列搭载 /dev/sdb1 与 /dev/sdc1 分区,阵列当前处于 resyncing 同步进程中。
第 4 步:为 RAID 设备部署文件系统
- 为
/dev/md0阵列设备格式化ext4文件系统。
\# mkfs.ext4 /dev/md0

创建 RAID 设备文件系统
- 新建挂载目录并挂载 RAID 设备,写入测试文件校验挂载可用性。
\# mkdir /mnt/raid1
\# mount /dev/md0 /mnt/raid1/
\# touch /mnt/raid1/tecmint.txt
\# echo "tecmint raid setups" > /mnt/raid1/tecmint.txt

挂载 RAID 设备
- 配置系统开机自动挂载 RAID 1 阵列,编辑
/etc/fstab文件,追加以下挂载配置条目。
/dev/md0 /mnt/raid1 ext4 defaults 0 0

自动挂载 Raid 设备
- 执行挂载校验命令,检测
/etc/fstab配置条目语法与路径有效性。
\# mount -av

检查 fstab 中的错误
- 将当前 RAID 阵列参数写入配置文件,用于系统重启后自动加载阵列配置。
\# mdadm --detail --scan --verbose >> /etc/mdadm.conf

保存 Raid 的配置
系统重启流程会读取该配置文件,完成 RAID 阵列设备的自动加载。
第 5 步:磁盘故障场景下的数据校验
- RAID 1 阵列可在单块磁盘故障或离线状态下保障数据正常访问,以下模拟磁盘离线场景并校验数据完整性。
\# mdadm --detail /dev/md0

验证 RAID 设备
图示信息显示阵列当前在线设备数量为 2,将模拟移除 /dev/sdc 磁盘,观测阵列状态变化。
## ls -l /dev | grep sd
## mdadm --detail /dev/md0

测试 RAID 设备
由输出结果可见,单块磁盘离线后,阵列仍维持运行状态。进入挂载目录校验测试文件完整性。
## cd /mnt/raid1/
## cat tecmint.txt

验证 RAID 数据
磁盘离线后阵列内数据仍可正常读取,可直观体现 RAID 1 镜像模式的运行优势。后续内容将讲解 RAID 5 分布式奇偶校验阵列的部署方式,
本文可用于参考学习 RAID 1 镜像阵列的配置流程与运行机制。
四、创建 RAID 5(条带化与分布式奇偶校验)
RAID 5 架构下,数据经条带化处理后分布存储于多块物理磁盘,并采用分布式奇偶校验机制。该机制将奇偶校验信息与条带化数据均匀分散至各磁盘,可实现数据冗余存储。

在 Linux 中配置 RAID 5
RAID 5 阵列的磁盘数量下限为 3 块。该阵列模式常部署于规模化生产环境,通过适度增加硬件投入,实现数据冗余存储能力的提升。
4.1 什么是奇偶校验
奇偶校验是数据存储领域常用的基础检错机制。奇偶校验信息分散存储于阵列内每块磁盘中;以 4 块磁盘组成的阵列为例,阵列中会划分出等效单块磁盘容量的存储空间,统一存储整组磁盘的奇偶校验数据。
当阵列内任意单块磁盘出现硬件故障时,可更换故障磁盘,依托已存储的奇偶校验信息,完成原始业务数据的重构恢复。
4.2 RAID 5 的优点和缺点
- 磁盘读写性能可得到提升。
- 具备数据冗余与硬件容错能力。
- 支持热备份磁盘接入机制。
- 阵列会占用单块磁盘的等效容量,用于存放奇偶校验数据。
- 阵列中单块磁盘故障时,不会造成业务数据丢失,更换故障磁盘后可通过奇偶校验信息重构数据。
- 适配事务处理型业务场景,阵列读请求响应速率更优。
- 奇偶校验运算会占用系统资源,阵列写请求响应速率会有所降低。
- 阵列故障后的数据重构流程耗时较长。
4.3 部署要求
RAID 5 阵列构建至少需配备 3 块物理磁盘,可根据业务需求扩容接入更多磁盘,扩容场景需配置多端口专用硬件 RAID 控制器。
本文采用 mdadm 工具包部署软件 RAID 5 阵列。
mdadm 为 Linux 平台下用于配置与管理 RAID 设备的工具程序。系统默认不会生成 RAID 配置文件,阵列搭建与参数配置完成后,需将配置信息独立保存至 mdadm.conf 配置文件。
4.4 服务器基础环境配置
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.227
主机名 : rd5.tecmintlocal.com
磁盘 1 [20GB] : /dev/sdb
磁盘 2 [20GB] : /dev/sdc
磁盘 3 [20GB] : /dev/sdd
本次部署基于 Linux 服务器,采用 3 块容量为 20GB 的磁盘,设备名分别为 /dev/sdb、/dev/sdc、/dev/sdd,搭建具备分布式奇偶校验特性的软件 RAID 5 阵列。
4.5 第 1 步:安装 mdadm 工具并检测磁盘设备
1、 本次部署基于 CentOS 6.5 Final 操作系统,同类配置流程可适配其余 Linux 发行版本。
lsb_release -a
ifconfig | grep inet

CentOS 6.5 摘要
2、 若未预先部署 mdadm 工具包,可根据 Linux 发行版本执行对应安装命令。
\# RedHat 系列系统
yum install mdadm
\# Debain 系列系统
apt-get install mdadm
3、 mdadm 工具安装完成后,执行 fdisk 命令,查看系统已接入的 3 块 20GB 磁盘设备。
fdisk -l | grep sd

安装 mdadm 工具
4、 检测 3 块目标磁盘是否已存在 RAID 阵列标识块,执行以下校验命令。
mdadm -E /dev/sd[b-d]
mdadm --examine /dev/sdb /dev/sdc /dev/sdd

检查 Raid 磁盘
说明:图示检测结果无超级块标识,表明 3 块磁盘暂未配置任何 RAID 阵列,可开始后续阵列搭建操作。
4.6 第 2 步:磁盘创建 RAID 类型分区
5、 构建 RAID 阵列前,需为 /dev/sdb、/dev/sdc、/dev/sdd 三块磁盘创建分区,通过 fdisk 工具完成分区配置。
fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
4.6.1 创建 /dev/sdb 分区
按以下流程完成 /dev/sdb 磁盘分区配置:
- 输入
n新建分区 - 输入
P选定主分区类型 - 分区序号选用默认序号 1
- 柱面范围采用默认配置,将磁盘全部容量分配至该分区
- 输入
P查看当前分区配置信息 - 输入
L查看系统支持的所有分区类型编码 - 输入
t执行分区类型修改操作 - 输入
fd将分区类型设定为 RAID 专用格式 - 输入
p再次核验分区参数修改结果 - 输入
w保存分区配置并退出工具

创建 sdb 分区
说明:/dev/sdc 与 /dev/sdd 磁盘需遵循完全一致的分区配置流程。
4.6.2 创建 /dev/sdc 分区
fdisk /dev/sdc

创建 sdc 分区
4.6.3 创建 /dev/sdd 分区
fdisk /dev/sdd

创建 sdd 分区
6、 三块磁盘分区配置完成后,校验分区参数变更状态。
mdadm --examine /dev/sdb /dev/sdc /dev/sdd
mdadm -E /dev/sd[b-c]

检查磁盘变化
说明:图示结果显示磁盘分区类型已变更为 fd,符合 RAID 分区格式要求。
7、 校验新建分区内是否存在 RAID 阵列标识块,无超级块标识即可继续配置 RAID 5 阵列。

在分区中检查 RAID
4.7 第 3 步:创建 md 设备 md0
8、 基于已完成配置的分区 /dev/sdb1、/dev/sdc1、/dev/sdd1,创建 RAID 设备 /dev/md0,执行以下任意一条命令即可。
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
## 等效简写命令
mdadm -C /dev/md0 -l=5 -n=3 /dev/sd[b-d]1
9、 RAID 设备创建完成后,读取系统内核阵列状态文件,核验阵列级别与关联磁盘设备。
cat /proc/mdstat

验证 Raid 设备
可借助 watch 工具实时监控阵列初始化进度,设置刷新间隔为 1 秒。
watch -n1 cat /proc/mdstat

监控 RAID 5 构建过程

Raid 5 过程概要
10、 阵列初始化完成后,校验各分区的 RAID 阵列属性。
mdadm -E /dev/sd[b-d]1

验证 Raid 级别
说明:该命令会输出三块磁盘分区的完整阵列信息,返回内容篇幅较长。
11、 查看 RAID 阵列详细参数,确认阵列运行状态与同步进程。
mdadm --detail /dev/md0

验证 RAID 阵列
4.8 第 4 步:为 md0 设备创建文件系统
12、 设备挂载前,为 /dev/md0 阵列格式化创建 ext4 文件系统。
mkfs.ext4 /dev/md0

创建 md0 文件系统
13、 在 /mnt 目录下新建 raid5 挂载目录,将 /dev/md0 挂载至该目录,查看挂载目录默认生成的系统文件。
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5/
ls -l /mnt/raid5/
14、 在挂载目录内新建测试文件,并写入测试内容,核验阵列读写功能可用性。
touch /mnt/raid5/raid5_tecmint_{1..5}
ls -l /mnt/raid5/
echo "tecmint raid setups" > /mnt/raid5/raid5_tecmint_1
cat /mnt/raid5/raid5_tecmint_1
cat /proc/mdstat

挂载 RAID 设备
15、 将阵列挂载配置写入 /etc/fstab 文件,实现系统开机自动挂载,在配置文件末尾追加如下配置项。
vim /etc/fstab
配置写入内容:
/dev/md0 /mnt/raid5 ext4 defaults 0 0

自动挂载 RAID 5
16、 执行挂载校验命令,检测 /etc/fstab 配置项语法与路径合法性。
mount -av

检查 Fstab 错误
4.9 第 5 步:保存 RAID 5 阵列配置
系统不会自动生成 RAID 阵列配置文件,阵列部署完成后需手动保存配置信息。若未执行配置保存操作,系统重启后阵列设备标识可能发生变更。
配置信息保存后,系统重启时内核可自动加载阵列参数,完成 RAID 5 阵列的自动初始化。
mdadm --detail --scan --verbose >> /etc/mdadm.conf

保存 RAID 5 配置
说明:配置持久化可固定 /dev/md0 设备的阵列级别与磁盘关联关系,避免系统重启后阵列参数异常。
4.10 第 6 步:添加备用磁盘
备用磁盘可接入现有 RAID 5 阵列作为冗余热备设备。当阵列内任意业务磁盘发生故障时,备用磁盘可自动激活,同步阵列内其余磁盘数据,重构完整阵列结构,持续维持数据冗余机制。
备用磁盘扩容配置与 RAID 5 阵列容错检测流程,可参考相关教程对应步骤完成操作。
4.11 结论
本文基于 3 块物理磁盘,完成 Linux 环境下软件 RAID 5 阵列的完整部署配置。
五:安装 RAID 6(条带化双分布式奇偶校验)
RAID 6 为 RAID 5 的迭代架构,配备两组分布式奇偶校验机制,阵列内同时存在 2 块磁盘故障时,架构仍具备容错能力。双磁盘并发故障场景下,系统业务可维持正常运行。该架构工作机制与 RAID 5 相近,整体架构稳定性更强,额外占用 1 块磁盘用于奇偶校验数据存储。
前文已对 RAID 5 分布式奇偶校验机制进行说明,本文针对 RAID 6 双分布式奇偶校验架构展开部署讲解。无专用 RAID 控制器硬件加持时,RAID 6 综合性能不会优于其他 RAID 级别。阵列内损坏 2 块磁盘后,可更换故障磁盘,依托奇偶校验数据完成阵列数据重构,恢复完整业务数据。

在 Linux 中安装 RAID 6
构建 RAID 6 阵列,单组阵列磁盘数量最低配置为 4 块。阵列可扩展接入更多物理磁盘,多磁盘聚合后,数据读取阶段可并行从所有磁盘调取数据,读取速率得到提升;数据写入阶段需将条带化数据同步分发至多块磁盘存储,写入性能会出现衰减。
行业应用场景中,对于 RAID 6 的选型争议普遍集中于性能表现。阵列选型可依据容错等级判定,高容错需求场景适配 RAID 6 架构。数据库高可用部署、视频流媒体业务部署场景,均适配采用 RAID 6 架构,可实现业务数据的安全防护。
RAID 6 的优点和缺点
- 读取性能表现良好。
- 部署成本偏高,架构需独立占用 2 块磁盘承载奇偶校验数据。
- 阵列会占用 2 块磁盘的存储空间,用于存储双奇偶校验校验位信息。
- 阵列内同时损坏 2 块磁盘,业务数据仍可完整保留;更换故障磁盘后,可依托校验数据完成阵列重构。
- 读取性能优于 RAID 5,源于多磁盘并行读取机制;无专用 RAID 控制器硬件时,阵列写入性能衰减幅度明显。
部署要求
构建 RAID 6 阵列,磁盘数量最低配置为 4 块。阵列支持扩容新增物理磁盘,扩容及高性能运行需配备专用 RAID 控制器。纯软件模式部署的 RAID 6 阵列,无法达到硬件控制器加持下的性能标准,生产环境建议配置物理 RAID 控制器。
服务器基础配置
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.228
主机名 : rd6.tecmintlocal.com
磁盘 1 [20GB] : /dev/sdb
磁盘 2 [20GB] : /dev/sdc
磁盘 3 [20GB] : /dev/sdd
磁盘 4 [20GB] : /dev/sde
本文为系列教程第 5 部分,讲解在 Linux 系统及服务器环境中,使用 4 块 20GB 磁盘(设备名 /dev/sdb、/dev/sdc、/dev/sdd、/dev/sde)完成软件 RAID 6(条带化双分布式奇偶校验)阵列的搭建与配置流程。
第 1 步:安装 mdadm 工具并检测物理磁盘
1、 系列教程第 2 篇、第 3 篇已介绍 mdadm 工具安装流程。若直接阅读本文,可依据 Linux 发行版适配对应命令,完成 mdadm 工具安装,该工具用于 Linux 环境 RAID 阵列的创建与运维管理。
\# RedHat 系列系统
yum install mdadm
\# Debain 系列系统
apt-get install mdadm
2、 工具安装完成后,校验部署所用 4 块物理磁盘,通过 fdisk 命令筛查可用于构建 RAID 阵列的磁盘设备。
fdisk -l | grep sd

在 Linux 中检查磁盘
3、 RAID 阵列创建前,检测目标磁盘是否已存在 RAID 分区标识。
mdadm -E /dev/sd[b-e]
## 等效命令
mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde

在磁盘上检查 RAID 分区
注意:上图检测结果显示,4 块物理磁盘均无超级块标识,不存在已有 RAID 阵列配置,可开始新建 RAID 6 阵列。
第 2 步:为 RAID 6 创建磁盘分区
4、 依次在 /dev/sdb、/dev/sdc、/dev/sdd、/dev/sde 磁盘中创建 RAID 类型分区。下文以 /dev/sdb 为例演示分区创建流程,其余磁盘可参照相同步骤配置。
创建 /dev/sdb 分区
fdisk /dev/sdb
按照下述操作指令完成分区配置:
- 输入
n新建分区 - 输入
P选定主分区类型 - 指定分区编号为
1 - 两次回车确认分区起始与结束扇区默认参数
- 输入
P查看已创建分区信息 - 输入
L列出系统所有分区类型编码 - 输入
t执行分区类型修改操作 - 输入
fd设定分区为 Linux RAID 专属类型,回车确认 - 再次输入
p核验分区配置修改结果 - 输入
w保存分区配置并退出工具

创建 /dev/sdb 分区
创建 /dev/sdc 分区
fdisk /dev/sdc

创建 /dev/sdc 分区
创建 /dev/sdd 分区
fdisk /dev/sdd

创建 /dev/sdd 分区
创建 /dev/sde 分区
fdisk /dev/sde

创建 /dev/sde 分区
5、 全部磁盘分区配置完成后,建议检测分区超级块信息。无原有超级块标识时,可正常新建 RAID 阵列。
mdadm -E /dev/sd[b-e]1
\# 等效命令
mdadm --examine /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

在新分区中检查 RAID
第 3 步:创建 md 阵列设备
6、 执行下述命令创建 RAID 设备 /dev/md0,指定阵列级别为 6、阵列磁盘数量为 4,并读取阵列运行状态信息。
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
cat /proc/mdstat

创建 Raid 6 设备
7、 可通过 watch 命令实时监控 RAID 阵列初始化进度。
watch -n1 cat /proc/mdstat

检查 RAID 6 创建过程
8、 执行命令校验各磁盘分区的 RAID 配置信息。
mdadm -E /dev/sd[b-e]1
注意:该命令会输出 4 块磁盘的完整配置信息,内容篇幅较长,文中未截取全部输出内容。
9、 核验 RAID 阵列详细参数,确认阵列重同步流程已启动。
mdadm --detail /dev/md0

检查 Raid 6 阵列
第 4 步:在 RAID 设备上部署文件系统
10、 为 /dev/md0 阵列设备格式化 ext4 文件系统,并规划挂载路径为 /mnt/raid6。部署可按需选用适配的文件系统类型。
mkfs.ext4 /dev/md0

在 RAID 6 上创建文件系统
11、 新建挂载目录并完成设备挂载,查看挂载目录默认生成的 lost+found 目录,核验挂载有效性。
mkdir /mnt/raid6
mount /dev/md0 /mnt/raid6/
ls -l /mnt/raid6/
12、 在挂载目录内新建测试文件,写入自定义内容并核验文件读写有效性。
touch /mnt/raid6/raid6_test.txt
ls -l /mnt/raid6/
echo "tecmint raid setups" > /mnt/raid6/raid6_test.txt
cat /mnt/raid6/raid6_test.txt

验证 RAID 内容
13、 编辑 /etc/fstab 文件写入挂载配置,实现操作系统开机自动挂载 RAID 设备,不同系统环境可按需调整挂载路径。
vim /etc/fstab
配置写入内容:
/dev/md0 /mnt/raid6 ext4 defaults 0 0

自动挂载 RAID 6 设备
14、 执行挂载校验命令,检测 /etc/fstab 配置条目语法及路径有效性。
mount -av

验证 RAID 是否自动挂载
第 5 步:保存 RAID 6 阵列配置
15、 Linux 系统无默认 RAID 配置文件,需手动导出阵列配置至配置文件,并查看 /dev/md0 阵列运行状态。
mdadm --detail --scan --verbose >> /etc/mdadm.conf
cat /etc/mdadm.conf
mdadm --detail /dev/md0

保存 RAID 6 配置

检查 RAID 6 状态
第 6 步:为阵列添加备用磁盘
16、 本次阵列基础配置为 4 块业务磁盘,其中 2 块磁盘承担奇偶校验数据存储任务。RAID 6 双奇偶校验机制可承载单块、双块磁盘故障,双磁盘故障场景下,可在第三块磁盘损坏前接入新磁盘完成阵列修复。
备用磁盘可在阵列创建阶段预先配置,也可在阵列运行过程中动态添加。本次阵列已完成基础搭建,下述演示运行状态下新增备用磁盘的配置流程。
演示环境热插拔新增一块物理磁盘 /dev/sdf,执行命令识别新增磁盘设备。
ls -l /dev/ | grep sd

检查新磁盘
17、 校验新增磁盘无历史 RAID 阵列配置。
mdadm --examine /dev/sdf

在新磁盘中检查 RAID
注意:参照前文磁盘分区配置方式,通过 fdisk 工具为 /dev/sdf 新建 RAID 类型分区。
fdisk /dev/sdf

为 /dev/sdf 创建分区
18、 完成 /dev/sdf 分区创建后,校验分区无原有 RAID 配置,将分区加入 /dev/md0 阵列作为备用磁盘,并核验阵列配置变更结果。
mdadm --examine /dev/sdf
mdadm --examine /dev/sdf1
mdadm --add /dev/md0 /dev/sdf1
mdadm --detail /dev/md0

在 sdf 分区上验证 Raid

添加 sdf 分区到 RAID

验证 sdf 分区信息
第 7 步:校验 RAID 6 阵列容错机制
19、 模拟阵列单块磁盘故障,验证备用磁盘自动激活及阵列重构能力。本次手动标记 /dev/sdd1 为故障磁盘。
mdadm --manage --fail /dev/md0 /dev/sdd1

检查 RAID 6 容错
20、 查看阵列详细参数,确认备用磁盘是否启动数据同步重构流程。
mdadm --detail /dev/md0

检查 RAID 自动同步
备用磁盘可自动响应磁盘故障场景,触发阵列数据重构流程,故障磁盘 dev/sdd1 会被标识为 faulty 状态。可通过下述命令实时查看重构进度。
cat /proc/mdstat

RAID 6 自动同步
结语
本文完整演示基于 4 块物理磁盘的 RAID 6 阵列搭建全流程,该阵列架构具备高数据冗余特性,部署成本相对偏高。
六:设置 RAID 10 或 1 + 0(嵌套)
RAID 10 由 RAID 1 与 RAID 0 组合构成,部署 RAID 10 至少需要 4 个 磁盘。前文已阐述使用最少 2 个磁盘部署 RAID 1 与 RAID 0 的操作方式。
本节采用最低配置的 4 个 磁盘,通过组合 RAID 1 与 RAID 0 完成 RAID 10 部署。假设基于 RAID 10 构建的逻辑卷已存入数据,以字符数据 TECMINT 为例,该数据会按照既定规则分散存储至 4 个磁盘当中。

在 Linux 中创建 Raid 10(LCTT 译注:原图有误,已修正)
RAID 10 的构建逻辑为先执行镜像机制,再执行条带化机制。在 RAID 1 镜像规则下,相同数据会同步写入两块磁盘,字符 T 会同时写入第 1 块、第 2 块磁盘;后续数据按条带化规则分配至另外两块磁盘,字符 E 会同时写入第 3 块、第 4 块磁盘。整套流程循环执行,字符 C 继续同步写入第 1 块、第 2 块磁盘,其余字符遵循相同逻辑分布存储。
(LCTT 译注:原文中此处描述混淆有误,已经根据实际情况进行修改。)
RAID 10 的组合工作逻辑可通过上述流程明确。若配置 4 块 20 GB 容量的磁盘,物理总容量为 80 GB,阵列可用容量仅为 40 GB,剩余容量会在 RAID 10 阵列构建过程中占用。
RAID 10 的优点和缺点
- 阵列读写表现具备优势
- 阵列部署后会占用半数磁盘物理容量
- 读写两端运行表现均处于较高水平,阵列可同步执行读写调度
- 可适配数据库场景下高 I/O 磁盘写入调度需求
部署要求
RAID 10 部署最低硬件规格为 4 个 磁盘,其中前 2 块磁盘组建 RAID 1 阵列,剩余 2 块磁盘参与 RAID 0 条带组合。RAID 10 为 RAID 0 与 RAID 1 的嵌套组合结构,若需扩容 RAID 阵列组,单次扩容最低新增磁盘数量为 4 块。
服务器配置参数
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.229
主机名 : rd10.tecmintlocal.com
磁盘 1 [20 GB] : /dev/sdd
磁盘 2 [20 GB] : /dev/sdc
磁盘 3 [20 GB] : /dev/sdd
磁盘 4 [20 GB] : /dev/sde
Linux 环境下存在两种 RAID 10 部署方式,下文对两种方式逐一演示,第一种部署流程操作更为简便。
方法 1:设置 RAID 10
- 执行下述命令,校验新增 4 块磁盘的挂载状态与占用情况。
ls -l /dev | grep sd
- 磁盘硬件识别完成后,检测磁盘分区内是否存在原有 RAID 超级块分区信息。
mdadm -E /dev/sd[b-e]
\# 或
mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde

验证添加的 4 块磁盘
注意:若终端输出未检索到 super-block 信息,代表 4 块磁盘未配置过任何 RAID 阵列。
第 1 步:划分 RAID 专用分区
- 采用
fdisk工具,为/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde四块磁盘依次新建分区。
fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
为 /dev/sdb 创建分区
以 /dev/sdb 磁盘为例演示 fdisk 分区流程,其余三块磁盘可复用相同操作步骤。
fdisk /dev/sdb
按照下述操作指令完成分区配置:
- 输入
n新建分区 - 输入
P选定主分区类 - 指定分区编号为
1 - 连续两次回车,沿用分区起止扇区默认参数
- 输入
P打印当前分区配置信息 - 输入
L列出系统所有分区类型编码 - 输入
t执行分区类型修改操作 - 输入
fd设定分区为 Linux RAID 类型,回车确认配置 - 再次输入
p核验分区修改结果 - 输入
w保存分区配置并退出工具

为磁盘 sdb 分区
注意:sdc、sdd、sde 磁盘均参照上述指令完成分区配置。
- 四块磁盘分区创建完成后,执行下述命令再次检测分区内 RAID 超级块信息。
mdadm -E /dev/sd[b-e]
mdadm --examine /dev/sdb /dev/sdc /dev/sdd /dev/sde
\# 或
mdadm -E /dev/sd[b-e]
\# 或
mdadm --examine /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

检查磁盘
注意:终端输出显示新建四个分区均无 super-block 信息,可基于当前磁盘环境继续部署 RAID 10 阵列。
第 2 步:创建 RAID 设备 md
- 借助
mdadm阵列管理工具创建/dev/md0阵列设备,操作前需确认系统已预装mdadm工具,未安装则执行对应系统版本安装命令。
\# RedHat 系列系统
yum install mdadm
\# Debain 系列系统
apt-get install mdadm
工具部署完成后,执行阵列创建设置命令:
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]1
- 执行
cat命令,核验新建 RAID 阵列运行状态。
cat /proc/mdstat

创建 md RAID 设备
- 执行下述命令,查看 4 块磁盘的阵列关联详情,命令终端会输出完整硬件参数信息。
mdadm --examine /dev/sd[b-e]1
- 执行下述命令,查看 RAID 阵列完整配置参数。
mdadm --detail /dev/md0

查看 RAID 阵列详细信息
注意:终端输出可查看阵列处于 active 运行状态与 re-syncing 同步状态。
第 3 步:创建文件系统
- 为
/dev/md0设备格式化ext4文件系统,并挂载至/mnt/raid10目录,可根据业务需求更换其他文件系统类型。
mkfs.ext4 /dev/md0

创建 md 文件系统
- 文件系统格式化完成后,创建挂载目录并执行挂载操作,通过
ls -l查看挂载目录初始内容。
mkdir /mnt/raid10
mount /dev/md0 /mnt/raid10/
ls -l /mnt/raid10/
在挂载目录内新建测试文件并写入内容,核验阵列读写可用性。
touch /mnt/raid10/raid10_files.txt
ls -l /mnt/raid10/
echo "raid 10 setup with 4 disks" > /mnt/raid10/raid10_files.txt
cat /mnt/raid10/raid10_files.txt

挂载 md 设备
- 配置开机自动挂载,编辑
/etc/fstab文件写入挂载配置条目,保存并退出编辑器。
vim /etc/fstab
\# 文件内添加下述内容
/dev/md0 /mnt/raid10 ext4 defaults 0 0

挂载 md 设备
- 系统重启前,执行挂载校验命令,检测
/etc/fstab配置文件语法与路径异常。
mount -av

检查 Fstab 中的错误
第 4 步:保存 RAID 配置
- Linux 系统无默认 RAID 配置文件,阵列部署完成后需手动导出配置至配置文件。
mdadm --detail --scan --verbose >> /etc/mdadm.conf

保存 RAID10 的配置
至此,方法 1 的 RAID 10 阵列部署流程完成。下文采用方法 2 继续完成阵列部署演示。
方法 2:创建 RAID 10
- 本方式需先构建两组独立 RAID 1 镜像阵列,再基于两组 RAID 1 阵列组合构建 RAID 0 条带阵列。流程逻辑为先完成两组磁盘镜像配置,再对镜像阵列执行条带化组合。
先执行命令列出可用于阵列部署的磁盘设备。
ls -l /dev | grep sd

列出了 4 个设备
- 采用
fdisk工具对 4 块磁盘执行分区操作,分区流程复用方法 1 第一步操作规范。
fdisk /dev/sdb
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
- 四块磁盘分区划分完毕后,检测分区内原有 RAID 块设备信息。
mdadm --examine /dev/sd[b-e]
mdadm --examine /dev/sd[b-e]1

检查 4 个磁盘
第 1 步:创建 RAID 1 阵列
- 基于 4 块磁盘组建两组 RAID 1 阵列,第一组由
sdb1与sdc1构成,第二组由sdd1与sde1构成。
mdadm --create /dev/md1 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[b-c]1
mdadm --create /dev/md2 --metadata=1.2 --level=1 --raid-devices=2 /dev/sd[d-e]1
cat /proc/mdstat

创建 RAID 1

查看 RAID 1 的详细信息
第 2 步:创建 RAID 0 阵列
- 以
/dev/md1与/dev/md2为基础设备,嵌套组建 RAID 0 条带阵列。
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/md1 /dev/md2
cat /proc/mdstat

创建 RAID 0
第 3 步:保存 RAID 配置
- 将阵列配置写入
/etc/mdadm.conf文件,保证系统重启后可自动加载 RAID 阵列设备。
mdadm --detail --scan --verbose >> /etc/mdadm.conf
配置保存完成后,参照方法 1 第三步流程,完成文件系统格式化与目录挂载操作即可。
至此,方法 2 的 RAID 1+0 阵列部署流程完成。阵列运行后同样占用半数磁盘物理容量,相较于其他阵列类型,整体运行表现具备优势。
结论
本文采用两种实现方式完成 RAID 10 阵列部署,RAID 10 同时具备运行表现优势与数据冗余特性。本文可用于指导 RAID 10 嵌套阵列的基础部署操作。
七:在 RAID 中扩展现有的 RAID 阵列和删除故障的磁盘
初学者易对 阵列(array) 术语定义产生认知模糊。阵列可定义为多块磁盘的聚合载体,亦可等效表述为集合(set)或分组(group)。以包含 6 6 6 枚鸡蛋的组合作为类比,RAID 阵列内部可容纳多块物理磁盘,常见数量包含 2 , 4 , 6 , 8 , 12 , 16 2,4,6,8,12,16 2,4,6,8,12,16 等规格。
本章介绍现有 RAID 阵列与 RAID 分组的扩容操作方式。以由 2 2 2 块磁盘组建的 RAID 1 阵列为例,当存储空间无法满足业务需求时,可通过 mdadm -grow 指令向已有阵列新增磁盘,完成阵列容量扩容。完成阵列扩容配置说明后,进一步阐述阵列内故障磁盘的移除操作流程。

扩展 RAID 阵列和删除故障的磁盘
若阵列内某块磁盘出现硬件异常,需执行移除操作;数据安全层面需提前接入备用磁盘完成镜像扩容,保障数据完整性。本章将完整讲解磁盘故障判定与故障磁盘移除的标准化操作流程。
扩展 RAID 的特性
- 支持对任意规格 RAID 聚合组执行容量扩容操作。
- 接入新磁盘完成阵列扩容后,可同步执行故障磁盘移除操作。
- RAID 阵列扩容过程支持在线执行,无需设备停机。
配置前置要求
- 操作环境需存在已部署完成的 RAID 分组阵列。
- 需准备空闲物理磁盘,作为阵列扩容新增载体。
- 本文采用单块空闲磁盘,完成现有阵列的扩容配置。
开展阵列扩容与故障恢复操作前,需掌握 RAID 级别划分及基础配置相关理论知识。
服务器基础环境
操作系统 : CentOS 6.5 Final
IP 地址 : 192.168.0.230
主机名 : grow.tecmintlocal.com
2 块现有磁盘 : 1 GB 单块规格
额外扩容磁盘 : 1 GB 规格
当前环境已部署由 2 2 2 块 1 GB 磁盘组建的 RAID 阵列,后续新增 1 1 1 块 1 GB 磁盘接入现有阵列,完成扩容配置。
扩展现有的 RAID 阵列
- 阵列扩容前,执行下述指令查看当前已部署的 RAID 阵列信息。
### mdadm --detail /dev/md0

检查现有的 RAID 阵列
说明:指令输出结果表明,当前阵列包含 2 2 2 块物理磁盘,阵列级别为 RAID 1,后续向该阵列新增一块物理磁盘。
- 新增物理磁盘
sdd,通过fdisk指令完成磁盘分区创建。
### fdisk /dev/sdd
按照下述步骤完成 /dev/sdd 分区配置:
- 按下
n新建分区 - 按下
P选定主分区类型 - 指定分区编号为 1 1 1
- 连续两次回车,采用分区起始与结束位置默认参数
- 按下
P预览已创建分区信息。 - 按下
L列出系统所有可用分区类型编码 - 按下
t执行分区类型修改操作 - 输入
fd设定分区类型为 Linux RAID 格式,回车确认配置 - 再次按下
p核查分区配置修改结果 - 按下
w保存分区配置并退出工具

为 sdd 创建新的分区
- 完成
/dev/sdd分区创建后,执行下述指令校验分区生成状态。
\# ls -l /dev/ | grep sd

确认 sdd 分区
- 磁盘接入阵列前,校验分区内部是否存在 RAID 超级块标识。
\# mdadm --examine /dev/sdd1

在 sdd 分区中检查 RAID
说明:指令输出未检索到磁盘超级块标识,该分区可正常接入现有 RAID 阵列。
- 将新建分区
/dev/sdd1接入/dev/md0阵列,执行如下配置指令。
\# mdadm --manage /dev/md0 --add /dev/sdd1

添加磁盘到 RAID 阵列
- 完成磁盘接入后,查看阵列内磁盘成员状态。
\# mdadm --detail /dev/md0

确认将新磁盘添加到 RAID 中
说明:输出信息显示新增磁盘初始为备用成员状态,当前阵列实际有效磁盘数量为 2 2 2,需执行阵列扩容指令设定阵列成员总数为 3 3 3。
- 执行阵列扩容指令,修改阵列磁盘成员数量规格。
\# mdadm --grow --raid-devices=3 /dev/md0

扩展 Raid 阵列
配置完成后,sdd1 正式纳入阵列成员,新增磁盘自动同步原有两块磁盘的阵列数据。
\# mdadm --detail /dev/md0

确认 Raid 阵列
说明:大容量物理磁盘的数据同步耗时可达数小时;本文采用 1 GB 虚拟磁盘环境,数据同步可在数秒内完成。
从阵列中删除磁盘
- 完成阵列数据同步后,三块磁盘内部镜像数据保持一致。
模拟业务场景:设定磁盘 sdc1 出现硬件异常,需从阵列中执行移除操作。磁盘移除前需先标记为故障状态,再执行删除指令。
\# mdadm --fail /dev/md0 /dev/sdc1
\# mdadm --detail /dev/md0

在 RAID 阵列中模拟磁盘故障
指令输出可观测到指定磁盘已标记为故障状态,阵列成员总数仍为 3 3 3,单块磁盘故障使阵列处于降级运行模式。
执行故障磁盘移除指令,阵列将保留 2 2 2 块正常磁盘维持运行。
\# mdadm --remove /dev/md0 /dev/sdc1

在 Raid 阵列中删除磁盘
- 故障磁盘移除完毕后,重新设定阵列有效磁盘成员数量为 2 2 2。
\# mdadm --grow --raid-devices=2 /dev/md0
\# mdadm --detail /dev/md0

在 RAID 阵列扩展磁盘
指令输出显示阵列当前仅保留 2 2 2 块有效磁盘。后续如需再次扩容,可重复前文配置步骤;亦可新增磁盘设定为永久备用成员,阵列检测到磁盘故障时,备用磁盘自动启动数据重建流程。
结论
本文完整演示了现有 RAID 阵列的扩容配置流程,以及阵列数据同步完成后故障磁盘的移除方法。整套配置流程均支持在线执行,无需业务设备停机。数据同步阶段,系统用户访问、文件读写及应用程序运行均不受配置操作影响。
八:当软件 RAID 故障时如何恢复和重建数据
本系列前文已对各类软件 RAID 配置方式进行完整阐释,场景选型可依据实际部署环境进行适配。
恢复并重建故障的软件 RAID - 第 8 部分
本文将阐述单块磁盘异常时,软件 RAID 阵列的重建流程与无损数据恢复方式。下文以 RAID 1 架构为实操范例,对应的流程逻辑可通用于其余 RAID 架构。
RAID 测试方案
开展实操流程前,需预先完成 RAID 1 阵列部署,可参照本系列第 3 部分给出的配置步骤执行。
本次测试环境相较于前文仅存在两处变动:
- 搭载 CentOS 7 版本系统,非前文所用 CentOS 6.5 版本。
- 调整磁盘存储规格,选用
/dev/sdb与/dev/sdc设备,单块磁盘容量为 8 GB。
若系统 SELinux 运行于 enforcing 模式,需为 RAID 设备挂载目录配置对应安全标签。未配置时执行挂载操作,系统将弹出异常警告提示。

启用 SELinux 时 RAID 挂载错误
执行以下命令可完成修复配置:
restorecon -R /mnt/raid1
配置 RAID 监控
物理存储设备存在损坏概率,固态硬盘可降低该类故障的发生概率。故障可在任意时段触发,运维环节需提前准备替换硬件,保障阵列数据的可用性与完整性。
可通过读取 /proc/mdstat 文件查看 RAID 阵列运行状态,也可采用更高效的方式,以监控扫描模式运行 mdadm 程序,程序可将故障告警信息推送至预设邮箱地址。
在 /etc/mdadm.conf 配置文件中新增以下配置项:
MAILADDR user@<domain or localhost>
本机配置示例如下:
MAILADDR gacanepa@localhost

监控 RAID 并使用电子邮件进行报警
以 root 身份编辑定时任务 crontab,添加条目使 mdadm 开机自动进入监控扫描模式:
@reboot /sbin/mdadm --monitor --scan --oneshot
程序默认每 60 秒执行一次 RAID 阵列巡检,检测到异常后自动触发告警。可在定时任务中追加 --delay 参数并配置秒数,自定义巡检间隔周期。例如配置 --delay 1800 时,巡检周期设定为 30 分钟。
系统需预先安装邮件用户代理程序,如 mutt、mailx 等工具,否则无法正常接收邮件告警通知。配置完成后 1 分钟内,即可接收 mdadm 推送的测试告警信息。
模拟和更换发生故障的 RAID 存储设备
借助 --manage 与 --set-faulty 参数,人为模拟 RAID 阵列内单块磁盘故障,执行命令如下:
mdadm --manage --set-faulty /dev/md0 /dev/sdc1
执行后 /dev/sdc1 会被标记为故障状态,可通过 /proc/mdstat 文件查看阵列状态变化。

在 RAID 存储设备上模拟问题
同时可查验邮箱,确认故障告警邮件可正常接收。

RAID 设备故障时发送邮件警报
确认磁盘故障后,执行命令将故障设备从软件 RAID 阵列中移除:
mdadm /dev/md0 --remove /dev/sdc1
移除物理磁盘后,接入备用存储设备,选用已预先划分 fd 类型分区的 /dev/sdd 设备,将其加入阵列完成替换:
mdadm --manage /dev/md0 --add /dev/sdd1
系统会自动依托新增磁盘完成阵列重建。可重复模拟故障流程,将 /dev/sdb1 标记为故障并移除,校验挂载目录内文件的可访问性,执行批量查验命令:
mdadm --detail /dev/md0
mount | grep raid1
ls -l /mnt/raid1 | grep tecmint
cat /mnt/raid1/tecmint.txt

确认 RAID 重建
图示可直观体现,新增 /dev/sdd1 替换故障的 /dev/sdc1 后,阵列数据重建由系统自动完成,无需人工介入操作。
运维场景中配置备用磁盘可简化故障替换流程,缩短业务中断时长。可执行以下命令,将原有磁盘重新加入阵列:
mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdc1

取代故障的 Raid 设备
从冗余丢失中恢复数据
单块磁盘异常场景下,mdadm 程序可自主完成阵列数据重建。若 RAID 1 阵列内两块磁盘同时出现故障,阵列冗余机制失效。下文模拟双磁盘故障场景,依次将 /dev/sdb1、/dev/sdd1 标记为故障状态:
umount /mnt/raid1
mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm --stop /dev/md0
mdadm --manage --set-faulty /dev/md0 /dev/sdd1
该场景下直接重建阵列,或使用 --assume-clean 参数强制重构,存在数据丢失风险,非必要场景不建议采用该操作方式。
可借助 ddrescue 工具迁移磁盘数据,以 /dev/sdb1 为数据源,向同规格且已创建 fd 分区的 /dev/sde1 设备进行数据拷贝,执行命令:
ddrescue -r 2 /dev/sdb1 /dev/sde1

恢复 Raid 阵列
数据迁移阶段保留 /dev/sdb 与 /dev/sdd 原有分区结构,不做格式化及改写操作。
数据拷贝完成后,依托 /dev/sde1 与 /dev/sdf1 重建镜像阵列,执行创建命令:
mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sde1 /dev/sdf1
实际生产环境中,重建阵列需沿用原有设备命名规则,替换磁盘需匹配原故障设备的盘符与分区格式。
本次实操选用额外存储设备新建阵列,规避与原有故障磁盘产生标识混淆。
程序弹出阵列写入确认提示时,输入 Y 并回车确认,阵列随即启动。可通过定时刷新命令查看阵列重建进度:
watch -n 1 cat /proc/mdstat
重建流程结束后,即可正常访问 RAID 阵列内存储数据。

确认 Raid 数据
总结
本文梳理了软件 RAID 单盘故障、阵列冗余失效两类场景下的数据恢复与阵列重建流程。RAID 阵列仅作为存储容错架构,无法替代常规数据备份机制。
本文所述实操流程适配各类 RAID 架构部署,相关理论内容将在本系列 RAID 管理专题章节中进一步展开。
九:如何使用 ‘Mdadm’ 工具管理软件 RAID
无论以前有没有使用 RAID 阵列的经验,以及是否完成了 此 RAID 系列 的所有教程,一旦在 Linux 中熟悉了 mdadm --manage 命令的使用,管理软件 RAID 将不是很复杂的任务。
在本教程中,会再介绍此工具提供的功能,这样当需要它,就可以派上用场。
RAID 测试方案
在本系列的最后一篇文章中,将使用一个简单的 RAID 1(镜像)阵列,它由两个 8GB 的磁盘(/dev/sdb 和 /dev/sdc)和一个备用设备(/dev/sdd)来演示,但在此使用的方法也适用于其他类型的配置。也就是说,放心去用吧,把这个页面添加到浏览器的书签,然后开始吧。
了解 mdadm 的选项和使用方法
mdadm 有一个内建的 --help 参数来对每个主要的选项提供说明文档。
开始输入:
\# mdadm --manage --help
就会使看到 mdadm --manage 能够执行哪些任务:

使用 mdadm 工具来管理 RAID
正如在上面的图片看到,管理一个 RAID 阵列可以在任意时间执行以下任务:
- (重新)将设备添加到阵列中
- 把设备标记为故障
- 从阵列中删除故障设备
- 使用备用设备更换故障设备
- 先创建部分阵列
- 停止阵列
- 标记阵列为 ro(只读)或 rw(读写)
使用 mdadm 工具管理 RAID 设备
需要注意的是,如果用户忽略 --manage 选项,mdadm 默认使用管理模式。请记住这一点,以避免出现最坏的情况。
上图中的高亮文本显示了管理 RAID 的基本语法:
\# mdadm --manage RAID options devices
来演示几个例子。
例 1:为 RAID 阵列添加设备
通常会添加新设备来更换故障的设备,或者使用空闲的分区以便在出现故障时能及时替换:
\# mdadm --manage /dev/md0 --add /dev/sdd1

添加设备到 Raid 阵列
例 2:把一个 RAID 设备标记为故障并从阵列中移除
在从逻辑阵列中删除该设备前,这是强制性的步骤,然后才能从机器中取出它 - 注意顺序(如果弄错了这些步骤,最终可能会造成实际设备的损害):
\# mdadm --manage /dev/md0 --fail /dev/sdb1
请注意在前面的例子中,知道如何添加备用设备来自动更换出现故障的磁盘。在此之后,恢复和重建 raid 数据 就开始了:

恢复和重建 raid 数据
一旦设备已被手动标记为故障,就可以安全地从阵列中删除它:
\# mdadm --manage /dev/md0 --remove /dev/sdb1
例 3:重新添加设备,来替代阵列中已经移除的设备
到现在为止,有一个工作的 RAID 1 阵列,它包含了 2 个活动的设备:/dev/sdc1 和 /dev/sdd1。现在试试重新添加 /dev/sdb1 到 /dev/md0:
\# mdadm --manage /dev/md0 --re-add /dev/sdb1
会碰到一个错误:
\# mdadm: --re-add for /dev/sdb1 to /dev/md0 is not possible
因为阵列中的磁盘已经达到了最大的数量。因此,有两个选择:a)将 /dev/sdb1 添加为备用的,如例 1;或 b)从阵列中删除 /dev/sdd1 然后重新添加 /dev/sdb1。
选择选项 b),先停止阵列然后重新启动:
\# mdadm --stop /dev/md0
\# mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1
如果上面的命令不能成功添加 /dev/sdb1 到阵列中,使用例 1 中的命令来完成。
mdadm 能检测到新添加的设备并将其作为备用设备,当添加完成后它会开始重建数据,它也被认为是 RAID 中的活动设备:

重建 Raid 的状态
例 4:使用特定磁盘更换 RAID 设备
在阵列中使用备用磁盘更换磁盘很简单:
\# mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/sdd1

更换 Raid 设备
这会导致 --replace 指定的设备被标记为故障,而 --with 指定的设备添加到 RAID 中来替代它:

检查 Raid 重建状态
例 5:标记 RAID 阵列为 ro 或 rw
创建阵列后,必须在它上面创建一个文件系统并将其挂载到一个目录下才能使用它。可能不知道,RAID 也可以被设置为 ro,使其只读;或者设置为 rw,就可以同时写入了。
要标记该设备为 ro,首先需要将其卸载:
\# umount /mnt/raid1
\# mdadm --manage /dev/md0 --readonly
\# mount /mnt/raid1
\# touch /mnt/raid1/test1

在 RAID 阵列上设置权限
要配置阵列允许写入操作需要使用 --readwrite 选项。请注意,在设置 rw 标志前,需要先卸载设备并停止它:
\# umount /mnt/raid1
\# mdadm --manage /dev/md0 --stop
\# mdadm --assemble /dev/md0 /dev/sdc1 /dev/sdd1
\# mdadm --manage /dev/md0 --readwrite## touch /mnt/raid1/test2

配置 Raid 允许读写操作
总结
在本系列中,已经解释了如何建立一个在企业环境中使用的软件 RAID 阵列。如果按照这些文章所提供的例子进行配置,在 Linux 中会充分领会到软件 RAID 的价值。
reference:
- Introduction to RAID, Concepts of RAID and RAID Levels - -
https://www.tecmint.com/understanding-raid-setup-in-linux/
作者: Babin Lonston 译者: LCTT struggling | 2015-08-26 09:33
……
作者: GABRIEL CÁNEPA 译者: LCTT struggling | 2015-10-24 10:15
……
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)