20260409 Linux RAID 存储技术
Linux RAID存储技术摘要 RAID(独立磁盘冗余阵列)通过多块磁盘组合提供大容量、高性能和高可靠性存储。主要分为软RAID(依赖CPU)、硬RAID(专用芯片)和混合RAID三种实现方式。常见RAID级别包括: RAID 0:条带化存储,高性能但无冗余 创建:mdadm --create /dev/md0 --level=0 --raid-devices 2 /dev/sd{b,c} 查看
Linux RAID 存储技术
一、RAID 存储
1. RAID 概念
RAID,即廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)。
大容量磁盘价格高昂,RAID的核心思路是将多块容量小、成本低的磁盘组合成大容量、高性能和可靠性的大容量磁盘。
随着磁盘成本大幅下降,“廉价”概念失去意义,RAID咨询委员会(RAID Advisory Board, RAB)将“廉价(Inexpensive)”替换为“独立(Independent)”,RAID自此定义为独立磁盘冗余阵列(Redundant Array of Independent Disks)。
2. RAID 实现方式
从技术实现维度,RAID主要分为三类,核心差异在于是否依赖专用硬件芯片:
-
软 RAID:无独立的RAID控制/处理芯片和I/O处理芯片,所有RAID功能由操作系统和CPU完成,实现成本低但效率最差。
-
硬 RAID:配备专用RAID控制/处理芯片、I/O处理芯片及阵列缓冲,不占用主机CPU资源,性能优异但硬件成本高。
-
软硬混合 RAID:具备RAID控制/处理芯片,但无独立I/O处理芯片,需CPU和驱动程序辅助完成功能,性能与成本介于软RAID和硬RAID之间。
操作系统识别到的设备是raid卡提供的设备,而不是直接管理底层硬盘。
3. RAID 级别
RAID通过数据条带、镜像、数据校验三类核心技术实现高性能、高可靠性、容错能力和扩展性。不同技术的组合策略形成不同RAID级别,以适配不同数据应用场景。
D. A. Patterson等的论文最初定义了RAID1RAID5,1988年后扩展出RAID0和RAID6;后续厂商推出的RAID7、RAID10/01、RAID50等无统一标准,业界公认的核心级别为RAID0RAID5,实际应用中以RAID0、RAID1、RAID4、RAID5、RAID6、RAID10为主。
各RAID级别无高低之分,需结合业务对可用性、性能、成本的需求选择适配的级别和实现方式。
4. RAID 实践
实验环境需在虚拟机中添加6块20G硬盘,设备名分别为sdb、sdc、sdd、sde、sdf、sdg,用于后续各类RAID阵列的创建与测试。
Linux系统中通过mdadm工具实现软RAID的创建、配置、监控与维护,以下为核心RAID级别的实操流程。
4.1 管理 RAID 0
# 安装mdadm工具(CentOS系统)
[root@centos7 ~ 10:04:21]# yum install -y mdadm
# 创建RAID 0阵列:设备名/dev/md0,级别0,成员盘2块(sdb、sdc)
[root@centos7 ~ 10:26:08]# 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.
注释:–level指定RAID级别,–raid-devices指定成员盘数量,/dev/sd{b,c}为sdb和sdc的简写
4.1.1 查看 RAID 0 状态
# 查看RAID概要信息(内核态RAID状态)
[root@centos7 ~ 10:26:50]# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdc[1] sdb[0]
41908224 blocks super 1.2 512k chunks
unused devices: <none>
# 查看RAID设备详细信息
[root@centos7 ~ 10:27:03]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Apr 9 10:26:50 2026
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Apr 9 10:26:50 2026
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : centos7.jqz.cloud:0 (local to host centos7.jqz.cloud)
UUID : 6b282967:7e853b8a:5c7353b4:6c25d99c
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
注释:核心关注Raid Level(级别)、State(状态,clean为正常)、Chunk Size(条带块大小)、成员盘状态。
# 查看RAID设备与物理盘的映射关系
[root@centos7 ~ 10:27:20]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 40G 0 raid0
[root@centos7 ~ 10:27:39]# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md0 9:0 0 40G 0 raid0
sdc 8:32 0 20G 0 disk
└─md0 9:0 0 40G 0 raid0
4.1.2 格式化与挂载 RAID 0
# 1.格式化RAID设备为XFS文件系统
[root@centos7 ~ 10:28:07]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 2.创建挂载点
[root@centos7 ~ 10:28:22]# mkdir -p /raid/raid0
# 3.挂载RAID设备到挂载点
[root@centos7 ~ 10:28:40]# mount /dev/md0 /raid/raid0
# 4.验证挂载结果
[root@centos7 ~ 10:29:05]# df -h /raid/raid0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 40G 33M 40G 1% /raid/raid0
# 5.测试数据写入
[root@centos7 ~ 10:29:30]# cp /etc/ho* /raid/raid0
[root@centos7 ~ 10:29:43]# ls /raid/raid0
host.conf hostname hosts hosts.allow hosts.deny
4.1.3 删除 RAID 0
# 1.卸载挂载点
[root@centos7 ~ 10:30:12]# umount /dev/md0
# 2.停止RAID阵列(销毁阵列)
[root@centos7 ~ 10:31:07]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# 3.清除物理盘上的RAID超级块(恢复为普通磁盘)
[root@centos7 ~ 10:31:22]# mdadm --zero-superblock /dev/sd{b,c}
4.1.4 补充说明
-
RAID 0不支持新增成员盘扩展容量:
bash [root@centos7 ~]# mdadm --add /dev/md0 /dev/sdd mdadm: add new device failed for /dev/sdd as 2: Invalid argument -
RAID 0不支持标记单盘故障(无冗余,单盘故障即阵列失效):
bash [root@centos7 ~]# mdadm --fail /dev/md0 /dev/sdc mdadm: Cannot remove /dev/sdc from /dev/md0, array will be failed.
4.2 管理 RAID 1
4.2.1 创建 RAID 1
[root@centos7 ~ 10:56:18]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Thu Apr 9 10:56:18 2026
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Apr 9 10:56:37 2026
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Resync Status : 19% complete
Name : centos7.jqz.cloud:1 (local to host centos7.jqz.cloud)
UUID : 6c3d9d09:a5af857e:d0eca9e5:6f92b867
Events : 3
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
注释:resyncing表示镜像数据正在同步,需等待同步完成(100%)后再进行格式化操作。
# 查看RAID与物理盘映射
[root@centos7 ~ 10:56:37]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md1 9:1 0 20G 0 raid1
[root@centos7 ~ 10:56:51]# lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md1 9:1 0 20G 0 raid1
sdc 8:32 0 20G 0 disk
└─md1 9:1 0 20G 0 raid1
4.2.2 格式化与挂载 RAID 1
# 1.等待同步完成后,格式化RAID设备
[root@centos7 ~ 10:57:05]# mkfs.xfs /dev/md1
mkfs.xfs: /dev/md1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
# 2.创建挂载点
[root@centos7 ~ 10:57:22]# mkdir /raid/raid1
# 3.挂载设备
[root@centos7 ~ 10:57:54]# mount /dev/md1 /raid/raid1
# 4.验[root@centos7 ~ 11:00:46]# df -h /raid/raid1
Filesystem Size Used Avail Use% Mounted on
/dev/md1 20G 45M 19G 1% /raid/raid1证挂载
# 5.测试数据写入
[root@centos7 ~ 11:01:00]# cp /etc/ho* /raid/raid1
[root@centos7 ~ 11:02:19]# ls /raid/raid1/
host.conf hostname hosts hosts.allow hosts.deny lost+found
4.2.3 增加热备盘
# 为RAID 1添加热备盘sdd
[root@centos7 ~ 11:03:03]# mdadm --add /dev/md1 /dev/sdd
mdadm: added /dev/sdd
# 查看热备盘状态(spare为备用)
[root@centos7 ~ 11:03:35]# 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
4.2.4 模拟磁盘故障
# 1.手动标记sdc为故障盘
[root@centos7 ~ 11:03:52]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 2.查看故障后状态(sdd自动顶替并同步)
[root@centos7 ~ 11:05:42]# 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 ~ 11:08:00]# ls /raid/raid1
host.conf hostname hosts hosts.allow hosts.deny lost+found test.txt
4.2.5 删除故障磁盘
# 手动标记sdc为故障盘
[root@centos7 ~]# mdadm --fail /dev/md1 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看故障后状态(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 spare rebuilding /dev/sdd
1 8 32 - faulty /dev/sdc
# 验证数据可正常访问
[root@centos7 ~]# ls /raid/raid1/
host.conf hostname hosts hosts.allow hosts.deny
[root@centos7 ~]# cat /raid/raid1/hostname
centos7.laoma.cloud
4.2.6 删除故障磁盘
[root@centos7 ~ 11:07:38]# umount /raid/raid1
[root@centos7 ~ 11:07:45]# mount /dev/md1 /raid/raid1
[root@centos7 ~ 11:08:00]# ls /r
raid/ root/ run/
[root@centos7 ~ 11:08:00]# ls /raid/raid1
host.conf hostname hosts hosts.allow hosts.deny lost+found test.txt
总结:raid1阵列中任一成员故障,不影响数据的完整性。
4.2.7 删除 RAID 1
# 卸载挂载点
[root@centos7 ~ 11:08:09]# umount /dev/md1
# 停止RAID阵列
[root@centos7 ~ 11:08:27]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# 清除物理盘超级块
[root@centos7 ~ 11:08:37]# mdadm --zero-superblock /dev/sd{b..d}
4.2.8 使用dd工具填充更彻底。
[root@centos7 ~ 11:34:17]# dd if=/dev/zero of=/dev/sdb bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 5.35868 s, 200 MB/s
作用:使用0填充/dev/sdb硬盘。
- if:Input File,/dev/zero 全为0
- of:Output File
- bs:Block Size,每次添加多大数据流
- count:一共填充多少个Block
4.2.9 补充说明
RAID 1核心价值是数据冗余,而非扩容:即使新增磁盘,阵列总容量仍等于单盘容量(镜像机制),无法通过加盘提升可用空间。
4.3 管理 RAID 5
4.3.1 创建 RAID 5
[root@centos7 ~ 11:34:29]# 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.
注释:RAID 5最少需3块盘,此处用4块盘(1块用于分布式校验)。
4.3.2 查看 RAID 5 状态
[root@centos7 ~ 11:35:53]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Apr 9 11:35:53 2026
Raid Level : raid5
Array Size : 62862336 (59.95 GiB 64.37 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Apr 9 11:36:06 2026
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 12% complete
Name : centos7.jqz.cloud:5 (local to host centos7.jqz.cloud)
UUID : 920ee884:95b2483a:0392e011:d569106e
Events : 3
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
注释:recovering表示阵列正在构建/同步,需等待同步完成后再格式化。
# 查看RAID与物理盘映射
[root@centos7 ~ 11:36:06]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 60G 0 raid5
[root@centos7 ~ 11:36:28]# lsblk /dev/sd{b..e}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdc 8:32 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sdd 8:48 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
sde 8:64 0 20G 0 disk
└─md5 9:5 0 60G 0 raid5
4.3.3 格式化与挂载 RAID 5
# 1.等待阵列同步完成后,格式化设备
[root@centos7 ~ 11:36:40]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=982144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=15714304, imaxpct=25
= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=7680, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 2.创建挂载点
[root@centos7 ~ 11:36:54]# mkdir /raid/raid5
# 3.挂载设备
[root@centos7 ~ 11:37:07]# mount /dev/md5 /raid/raid5
# 4.验证挂载
[root@centos7 ~ 11:37:23]# df -h /raid/raid5
Filesystem Size Used Avail Use% Mounted on
/dev/md5 60G 33M 60G 1% /raid/raid5
# 5.测试数据写入
[root@centos7 ~ 11:37:30]# cp /etc/ho* /raid/raid5
[root@centos7 ~ 11:37:46]# ls /raid/raid5/
host.conf hostname hosts hosts.allow hosts.deny
4.3.4 增加热备盘
# 1.为RAID 5添加热备盘sdf
[root@centos7 ~ 11:39:31]# mdadm --add /dev/md5 /dev/sdf
mdadm: added /dev/sdf
# 2.查看热备盘状态
[root@centos7 ~ 11:39:48]# mdadm --detail /dev/md5 |tail -7
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
4.3.5 模拟磁盘故障
# 标记sdb为故障盘
[root@centos7 ~ 11:39:51]# mdadm --fail /dev/md5 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看故障后状态(sdf自动顶替并同步)
[root@centos7 ~ 11:40:15]# mdadm --detail /dev/md5 |tail -7
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
# 验证数据可正常访问
[root@centos7 ~ 11:40:35]# ls /raid/raid5/
host.conf hostname hosts hosts.allow hosts.deny
[root@centos7 ~ 11:40:49]# cat /raid/raid5/hostname
centos7.jqz.cloud
4.3.6 删除故障磁盘
# 移除故障盘sdb
[root@centos7 ~ 11:41:00]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
# 验证移除结果
[root@centos7 ~ 11:41:24]# 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
4.3.7 扩容 RAID 5
注释:RAID 5仅支持扩容(增加成员盘),不支持减容;扩容仅在阵列“clean”正常状态下可执行,降级/重构时禁止。
# 新增2块盘(sdb、sdg)到RAID 5
[root@centos7 ~ 11:41:41]# mdadm --add /dev/md5 /dev/sdb /dev/sdg
mdadm: added /dev/sdb
mdadm: added /dev/sdg
# 查看新增盘状态(spare为备用)
[root@centos7 ~ 11:42:46]# mdadm --detail /dev/md5 |tail -8
Number Major Minor RaidDevice State
5 8 80 0 active sync /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
6 8 16 - spare /dev/sdb
7 8 96 - spare /dev/sdg
# 扩展阵列成员数为5(--grow为扩容参数)
[root@centos7 ~ 11:43:05]# mdadm --grow /dev/md5 --raid-devices 5
# 等待阵列重构完成(查看进度)
[root@centos7 ~ 11:46:13]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Apr 9 11:35:53 2026
Raid Level : raid5
Array Size : 83816448 (79.93 GiB 85.83 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 5
Total Devices : 6
Persistence : Superblock is persistent
Update Time : Thu Apr 9 11:45:54 2026
State : clean
Active Devices : 5
Working Devices : 6
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : centos7.jqz.cloud:5 (local to host centos7.jqz.cloud)
UUID : 920ee884:95b2483a:0392e011:d569106e
Events : 91
Number Major Minor RaidDevice State
5 8 80 0 active sync /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
7 8 96 4 active sync /dev/sdg
6 8 16 - spare /dev/sdb
# 验证RAID容量(从60G扩容至80G)
[root@centos7 ~ 11:46:28]# lsblk /dev/md5
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md5 9:5 0 80G 0 raid5 /raid/raid5
# 扩展文件系统(XFS文件系统用xfs_growfs)
[root@centos7 ~ 11:44:08]# xfs_growfs /raid/raid5
meta-data=/dev/md5 isize=512 agcount=16, agsize=982144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=15714304, imaxpct=25
= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=7680, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 15714304 to 15715584
4.3.8 再次模拟磁盘故障
[root@centos7 ~ 13:35:42]# mdadm --remove /dev/md5 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@centos7 ~ 13:44:21]# mdadm --fail /dev/md5 /dev/sdg
[root@centos7 ~ 13:47:58]# mdadm -D /dev/md5 |tail -5
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
- 0 0 4 removed
7 8 96 - faulty /dev/sdg
[root@centos7 ~ 13:50:50]# ls /raid/raid5
host.conf hostname hosts hosts.allow hosts.deny
[root@centos7 ~ 13:51:03]# echo hello raid5 > /raid/raid5/test.txt
[root@centos7 ~ 13:52:33]# umount /raid/raid5
[root@centos7 ~ 13:52:51]# mount /dev/md5 /raid/raid5
[root@centos7 ~ 13:53:20]# ls /raid/raid5
host.conf hostname hosts hosts.allow hosts.deny test.txt
4.3.9 删除 RAID 5
# 卸载挂载点
[root@centos7 ~ 13:53:31]# umount /dev/md5
# 停止RAID阵列
[root@centos7 ~ 13:53:44]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 清除物理盘超级块
[root@centos7 ~ 13:53:54]# mdadm --zero-superblock /dev/sd{b..g}
也可以使用dd彻底擦除:
for device in /dev/sd{b..g}
do
dd if=/dev/zero of=$device bs=1M count=1024
done
更多推荐


所有评论(0)