一、RAID 核心基础

1.1 RAID 定义与实现

  • 定义:独立磁盘冗余阵列(Redundant Array of Independent Disks),将多块磁盘组合为逻辑阵列,提升性能或提供数据冗余。
  • 实现方式
    • 软 RAID:通过 mdadm 工具 + 操作系统实现,无硬件成本,占用少量 CPU 资源(文档重点);
    • 硬 RAID:依赖专用 RAID 卡,性能强但成本高;
    • 混合 RAID:介于软 / 硬之间,平衡性能与成本。

1.2 常用 RAID 级别对比(关键选型依据)

RAID 级别 最小磁盘数 核心特性 容错能力 磁盘空间开销 读写性能 适用场景
RAID0 2 条带化(无冗余) 无(单盘故障丢数据) 0% 读写均最高 视频编辑、非关键数据存储
RAID1 2 镜像(数据完全复制) 单盘故障 50%(仅用一半容量) 读高、写略低 关键数据、数据库服务器
RAID5 3 条带化 + 分布式奇偶校验 单盘故障 1/N(N 为磁盘数) 读高、写中等 文件服务器、小型企业环境
RAID10 4 RAID1 镜像 + RAID0 条带化 多盘故障(不同镜像组) 50% 读写均高 数据库、虚拟化、关键业务

1.3 核心术语解释

  • 条带化:数据分割为固定大小块,分散存储在多块磁盘,并行读写提升性能;
  • 镜像:数据完全复制到另一块磁盘,实现冗余备份;
  • 奇偶校验:通过算法计算校验信息,用于 RAID5/6 的数据恢复;
  • 热备盘:闲置磁盘,故障时自动顶替故障盘并同步数据。

二、mdadm 核心语法(操作基础)

mdadm 是 Linux 软 RAID 管理的核心工具,所有操作均通过其命令实现,以下是文档中高频使用的语法格式:

2.1 常用选项与语法格式

操作目标 语法格式 关键选项说明
创建 RAID 阵列 mdadm --create /dev/mdX --level 级别 --raid-devices 磁盘数 磁盘列表 --create:创建阵列;--level:指定 RAID 级别;--raid-devices:参与阵列的磁盘数
查看 RAID 详情 mdadm --detail /dev/mdX 查看阵列状态、磁盘成员、同步进度等
查看 RAID 概要 cat /proc/mdstat 快速查看所有阵列的运行状态
添加热备盘 mdadm /dev/mdX --add 磁盘 新增闲置磁盘作为热备(故障时自动激活)
标记磁盘故障 mdadm /dev/mdX --fail 磁盘 手动模拟磁盘故障(测试容错能力)
移除故障磁盘 mdadm /dev/mdX --remove 磁盘 从阵列中删除故障磁盘
停止 RAID 阵列 mdadm --stop /dev/mdX 销毁阵列(需先卸载)
清除磁盘 RAID 信息 mdadm --zero-superblock 磁盘 清除磁盘的超级块(用于重新创建阵列)
扩容 RAID 阵列 mdadm -G /dev/mdX --raid-devices 新磁盘数 -G(grow):扩展阵列成员数(仅 RAID5 支持)

2.2 关键说明

  • RAID 设备命名:默认从 /dev/md0 开始(md=multiple devices);
  • 超级块(superblock):存储 RAID 阵列配置信息,--zero-superblock 会清除该信息;
  • 同步 / 重构:创建阵列或替换故障盘后,数据会自动同步,期间性能略有下降。

三、实操模块 1:RAID0 管理(无冗余,高性能)

RAID0 核心是 “条带化”,无冗余但性能最强,文档中用 /dev/sdb 和 /dev/sdc 两块磁盘演示。

3.1 步骤 1:创建 RAID0 阵列

# 创建 RAID0 设备 /dev/md0,2 块磁盘(/dev/sdb、/dev/sdc)
[root@centos7 ~]# mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  • 语法解析:
    • --create /dev/md0:指定创建的 RAID 设备名;
    • --level 0:明确 RAID 级别为 0;
    • --raid-devices 2:参与阵列的磁盘数为 2;
    • /dev/sd{b,c}:简写,等价于 /dev/sdb /dev/sdc
  • 输出说明:默认使用 1.2 版本元数据,阵列创建成功并启动。

3.2 步骤 2:查看 RAID0 状态

方式 1:快速查看(/proc/mdstat
[root@centos7 ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] 
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks  # 阵列总容量~40G,条带大小512K

unused devices: <none>
  • 关键信息:
    • active raid0:阵列状态正常,级别为 RAID0;
    • sdc[1] sdb[0]:磁盘成员及编号;
    • 512k chunks:条带大小(默认 512K,可通过 --chunk 自定义)。
方式 2:详细查看(mdadm --detail
[root@centos7 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2                  # 元数据版本
Creation Time : Fri Aug 2 17:03:58 2024  # 创建时间
Raid Level : raid0             # RAID 级别
Array Size : 41908224 (39.97 GiB)  # 阵列总容量(2块20G磁盘,无开销→40G)
Raid Devices : 2               # 成员磁盘数
Active Devices : 2             # 活跃磁盘数
Failed Devices : 0             # 故障磁盘数
Spare Devices : 0              # 热备盘数
Chunk Size : 512K              # 条带大小
Name : centos7.linux.fun:0     # 阵列名称(主机名+编号)
UUID : afe03287:7cfb8b2e:82844a2e:8f721e04  # 唯一标识(用于持久化)
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb  # 磁盘1:活跃同步
1       8    32        1      active sync   /dev/sdc  # 磁盘2:活跃同步

3.3 步骤 3:格式化与挂载

# 1. 格式化 RAID0 为 xfs 文件系统(CentOS7 默认)
[root@centos7 ~]# mkfs.xfs /dev/md0

# 2. 创建挂载点目录
[root@centos7 ~]# mkdir /data/raid0

# 3. 临时挂载(重启失效)
[root@centos7 ~]# mount /dev/md0 /data/raid0

# 4. 验证挂载结果(查看容量和使用情况)
[root@centos7 ~]# df -h /data/raid0
Filesystem  Size  Used Avail Use% Mounted on
/dev/md0     40G  319M   40G   1% /data/raid0

# 5. 测试:复制文件到 RAID0
[root@centos7 ~]# cp /etc/ho* /data/raid0  # 复制/etc目录下以ho开头的文件
[root@centos7 ~]# ls /data/raid0/
host.conf  hostname  hosts  # 验证文件存在
  • 解析:RAID0 容量 = 磁盘总容量(20G+20G=40G),无空间开销,适合存储临时高并发数据。

3.4 步骤 4:删除 RAID0 阵列

# 1. 先卸载挂载点(必须先卸载,否则无法停止阵列)
[root@centos7 ~]# umount /dev/md0

# 2. 停止 RAID0 阵列(销毁阵列)
[root@centos7 ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0

# 3. 清除磁盘上的 RAID 超级块(避免影响后续使用)
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b,c}

3.5 RAID0 特殊说明(文档补充)

  • 无法添加新成员盘:RAID0 条带化结构固定,不能扩容;
  • 无法强制故障盘:RAID0 无冗余,单盘故障即阵列失效,mdadm --fail 会提示错误。

四、实操模块 2:RAID1 管理(镜像冗余,高可靠)

RAID1 核心是 “镜像”,数据完全复制到另一块磁盘,文档用 /dev/sdb/dev/sdc 演示基础操作,/dev/sdd 作为热备盘。

4.1 步骤 1:创建 RAID1 阵列

# 创建 RAID1 设备 /dev/md1,2 块磁盘(/dev/sdb、/dev/sdc)
[root@centos7 ~]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
mdadm: Note: this array has metadata at the start and may not be suitable as a boot device.
Continue creating array? yes  # 提示元数据位置,按yes确认
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
  • 提示说明:RAID1 元数据存储在磁盘开头,不适合作为 boot 设备(若需引导,需用 --metadata=0.90 参数)。

4.2 步骤 2:查看 RAID1 同步状态

[root@centos7 ~]# mdadm --detail /dev/md1
/dev/md1:
Raid Level : raid1
Array Size : 20954112 (19.98 GiB)  # 容量=单盘容量(20G),50%空间开销
State : clean, resyncing  # clean=正常,resyncing=数据同步中
Resync Status : 33% complete  # 同步进度(需等待100%完成)
Active Devices : 2
Failed Devices : 0
Spare Devices : 0
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
1       8    32        1      active sync   /dev/sdc
  • 关键:同步期间阵列可正常使用,但写入性能会下降,建议等待同步完成后再部署业务。

4.3 步骤 3:格式化、挂载与测试

# 1. 同步完成后格式化(xfs 文件系统)
[root@centos7 ~]# mkfs.xfs /dev/md1

# 2. 创建挂载点并挂载
[root@centos7 ~]# mkdir /data/raid1
[root@centos7 ~]# mount /dev/md1 /data/raid1

# 3. 验证容量(仅20G,因镜像开销)
[root@centos7 ~]# df -h /data/raid1
Filesystem  Size  Used Avail Use% Mounted on
/dev/md1     20G  175M   20G   1% /data/raid1

# 4. 复制文件测试
[root@centos7 ~]# cp /etc/ho* /data/raid1
[root@centos7 ~]# ls /data/raid1/
host.conf  hostname  hosts

4.4 步骤 4:添加热备盘(关键容错配置)

# 给 /dev/md1 添加热备盘 /dev/sdd
[root@centos7 ~]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd

# 验证热备盘状态
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
1       8    32        1      active sync   /dev/sdc
2       8    48        -      spare         /dev/sdd  # 状态为spare(备用)

4.5 步骤 5:模拟磁盘故障与恢复

# 1. 手动标记 /dev/sdc 为故障盘
[root@centos7 ~]# mdadm /dev/md1 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1

# 2. 查看状态:热备盘自动激活并同步
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
2       8    48        1      spare rebuilding   /dev/sdd  # 正在重构(同步数据)
1       8    32        -      faulty            /dev/sdc  # 故障状态

# 3. 验证数据完整性(故障期间数据正常访问)
[root@centos7 ~]# cat /data/raid1/hostname
centos7.linux.fun  # 数据未丢失

# 4. 移除故障盘(更换新磁盘后执行)
[root@centos7 ~]# mdadm /dev/md1 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1

# 5. 验证最终状态(/dev/sdd 变为活跃盘)
[root@centos7 ~]# mdadm --detail /dev/md1 | tail -5
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
2       8    48        1      active sync   /dev/sdd

4.6 步骤 6:删除 RAID1 阵列

# 1. 卸载挂载点
[root@centos7 ~]# umount /dev/md1

# 2. 停止阵列
[root@centos7 ~]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1

# 3. 清除所有相关磁盘的超级块
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..d}  # 简写:b到d的所有磁盘

4.7 RAID1 特殊说明

  • 容量不随磁盘数量增加:即使添加多块磁盘,RAID1 仅用单盘容量(镜像特性);
  • 热备盘自动顶替:故障时无需手动干预,提升系统可用性。

五、实操模块 3:RAID5 管理(性能 + 冗余兼顾)

RAID5 是 “条带化 + 分布式奇偶校验”,兼顾性能与冗余,用 /dev/sdb-/dev/sde 4 块磁盘演示,支持扩容。

5.1 步骤 1:创建 RAID5 阵列

# 创建 RAID5 设备 /dev/md5,4 块磁盘(/dev/sdb-/dev/sde)
[root@centos7 ~]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
  • 容量计算:总容量 =(磁盘数 - 1)× 单盘容量 = 3×20G=60G(1 块磁盘用于存储奇偶校验)。

5.2 步骤 2:查看 RAID5 重构状态

[root@centos7 ~]# mdadm --detail /dev/md5
/dev/md5:
Raid Level : raid5
Array Size : 62862336 (59.95 GiB)  # 约60G,符合预期
State : clean, degraded, recovering  # 重构中
Active Devices : 3
Working Devices : 4
Spare Devices : 1
Rebuild Status : 17% complete  # 重构进度
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
1       8    32        1      active sync   /dev/sdc
2       8    48        2      active sync   /dev/sdd
4       8    64        3      spare rebuilding   /dev/sde

5.3 步骤 3:格式化、挂载与测试

# 1. 等待重构完成后格式化
[root@centos7 ~]# mkfs.xfs /dev/md5

# 2. 创建挂载点并挂载
[root@centos7 ~]# mkdir /data/raid5
[root@centos7 ~]# mount /dev/md5 /data/raid5

# 3. 验证容量
[root@centos7 ~]# df -h /data/raid5
Filesystem  Size  Used Avail Use% Mounted on
/dev/md5     60G  461M   60G   1% /data/raid5

# 4. 复制文件测试
[root@centos7 ~]# cp /etc/ho* /data/raid5
[root@centos7 ~]# ls /data/raid5/
host.conf  hostname  hosts

5.4 步骤 4:添加热备盘

# 给 /dev/md5 添加热备盘 /dev/sdf
[root@centos7 ~]# mdadm /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf

# 验证热备盘状态
[root@centos7 ~]# mdadm --detail /dev/md5 | tail -5
Number  Major Minor RaidDevice State
0       8    16        0      active sync   /dev/sdb
1       8    32        1      active sync   /dev/sdc
2       8    48        2      active sync   /dev/sdd
4       8    64        3      active sync   /dev/sde
5       8    80        -      spare         /dev/sdf  # 热备盘

5.5 步骤 5:模拟故障与自动恢复

# 1. 标记 /dev/sdb 为故障盘
[root@centos7 ~]# mdadm /dev/md5 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5

# 2. 查看状态:热备盘 /dev/sdf 自动重构
[root@centos7 ~]# mdadm --detail /dev/md5 | tail -5
Number  Major Minor RaidDevice State
5       8    80        0      spare rebuilding   /dev/sdf
1       8    32        1      active sync   /dev/sdc
2       8    48        2      active sync   /dev/sdd
4       8    64        3      active sync   /dev/sde
0       8    16        -      faulty            /dev/sdb

# 3. 验证数据完整性
[root@centos7 ~]# cat /data/raid5/hostname
centos7.linux.fun  # 数据正常

# 4. 移除故障盘
[root@centos7 ~]# mdadm /dev/md5 --remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5

5.6 步骤 6:RAID5 扩容(文档重点特性)

RAID5 支持扩容(仅增不减),需阵列处于正常状态(非降级 / 重构中):

# 1. 添加新磁盘 /dev/sdb(更换的新盘)和 /dev/sdg 到阵列
[root@centos7 ~]# mdadm /dev/md5 --add /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg

# 2. 扩展阵列成员数为 5 块(原 4 块,新增 1 块)
[root@centos7 ~]# mdadm -G /dev/md5 --raid-devices 5
# -G:grow(扩展),--raid-devices 5:新的成员数

# 3. 等待阵列重组完成(查看进度)
[root@centos7 ~]# mdadm --detail /dev/md5
Reshape Status : 16% complete  # 重组进度

# 4. 重组完成后,验证阵列容量(新增 20G,总容量 80G)
[root@centos7 ~]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5   9:5    0  80G 0 raid5 /data/raid5

# 5. 扩展文件系统(使扩容后的容量可用)
[root@centos7 ~]# xfs_growfs /data/raid5  # xfs 文件系统扩容命令
meta-data=/dev/md5               isize=512    agcount=16, agsize=3928896 blks
...
data     =                       bsize=4096   blocks=62862336, imaxpct=25
         =                       sunit=128    swidth=512 blks
...

# 6. 验证文件系统容量
[root@centos7 ~]# df -h /data/raid5
Filesystem  Size  Used Avail Use% Mounted on
/dev/md5     80G  604M   80G   1% /data/raid5  # 容量已扩展到80G

5.7 步骤 7:删除 RAID5 阵列

# 1. 卸载挂载点
[root@centos7 ~]# umount /dev/md5

# 2. 停止阵列
[root@centos7 ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5

# 3. 清除所有磁盘的超级块
[root@centos7 ~]# mdadm --zero-superblock /dev/sd{b..g}  # b到g的所有磁盘

六、命令速查表

操作场景 核心命令
创建 RAID 阵列 mdadm --create /dev/mdX --level 级别 --raid-devices 数 磁盘
查看 RAID 详情 mdadm --detail /dev/mdX
快速查看 RAID 状态 cat /proc/mdstat
添加热备盘 mdadm /dev/mdX --add 磁盘
模拟磁盘故障 mdadm /dev/mdX --fail 磁盘
移除故障磁盘 mdadm /dev/mdX --remove 磁盘
RAID5 扩容 mdadm -G /dev/mdX --raid-devices 新数
扩展 xfs 文件系统 xfs_growfs 挂载点
删除 RAID 阵列 umount /dev/mdX && mdadm --stop /dev/mdX && mdadm --zero-superblock 磁盘
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐