磁盘阵列(RAID)概述
磁盘阵列(Redundant Array of Independent Disks,RAID)是通过将多个物理磁盘组合成一个逻辑单元,以提高性能、冗余性或两者兼顾的技术。常见的RAID级别包括RAID 0、RAID 1、RAID 5、RAID 6等,每种级别有不同的特点和适用场景。
RAID存储提供了不同的级别,每个级别具有不同的冗余和性能特性。
-
RAID 0:条带化(数据分块)但没有冗余,提供较高的读写性能。
-
RAID 1:镜像,数据完全复制到另一个驱动器,提供容错能力。
-
RAID 5:条带化加分布式奇偶校验,提供数据冗余和读取性能。
-
RAID 6:类似于RAID 5,但提供更高级别的容错能力。
-
RAID 10:RAID 1+0,将RAID 1镜像组合成RAID 0条带化,提供较高的容错能力和读写性能。
-
RAID 50:RAID 5组合成RAID 0,提供较高的性能和容错能力。
-
RAID 60:RAID 6组合成RAID 0,提供更高级别的性能和容错能力。
常见的RAID级别
RAID 0
RAID 0使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,而不进行冗余备份。
数据被分成固定大小的块,并依次存储在每个磁盘上。例如,如果有两个驱动器(驱动器A和驱动器B),一块数据的第一个部分存储在驱动器A上,第二个部分存储在驱动器B上,以此类推。
这种条带化的方式可以同时从多个驱动器读取或写入数据,从而提高系统的性能。
AID 0特点:
-
至少需要两块磁盘
-
数据条带化分布到磁盘,拥有高读写性能,100%的存储空间利用率
-
数据没有冗余策略,一块磁盘故障,数据将无法恢复
RAID 0适用于需要高性能而不关心数据冗余的场景。
视频编辑和处理:在视频编辑中,需要快速读取和写入大量数据。RAID 0可以通过并行读写操作提高数据传输速度,加快视频编辑和处理的速度。
实时流媒体:对于需要实时传输和处理大量数据的流媒体应用,RAID 0可以提供足够的带宽和吞吐量,确保流媒体内容的平滑播放。
RAID 0也存在一些缺点:
缺乏冗余:由于RAID 0不提供数据冗余,如果任何一个驱动器发生故障,所有数据都可能丢失。因此,RAID 0不适合存储关键数据。
可靠性降低:由于没有冗余备份,RAID 0的可靠性相对较低。如果任何一个驱动器发生故障,整个阵列的可用性将受到影响。
RAID 1
RAID 1使用数据镜像(mirroring)的方式将数据完全复制到两个或多个磁盘驱动器上。
当写入数据时,数据同时写入所有驱动器。这样,每个驱动器都具有相同的数据副本,从而实现数据的冗余备份。
如果其中一个驱动器发生故障,系统可以继续从剩余的驱动器中读取数据,确保数据的可用性和完整性。
RAID1特点:
-
至少需要2块磁盘
-
数据镜像备份写到磁盘上(工作盘和镜像盘),可靠性高,磁盘利用率为50%
-
读性能可以,但写性能不佳
-
一块磁盘故障,不会影响数据的读写
RAID 1适用于对数据冗余和高可用性要求较高的场景。
关键数据存储:对于关键数据的存储,如企业的财务数据、客户信息等,RAID 1可以提供数据冗余备份,以防止数据丢失。
数据库服务器:对于需要高可用性和容错性的数据库服务器,RAID 1可以确保数据的持久性和可用性,即使一个驱动器发生故障,也可以从其他驱动器中读取数据。
文件服务器:对于共享文件的服务器,RAID 1可以提供冗余备份,确保文件的可靠性和高可用性。
RAID 1也存在一些缺点:
成本增加:由于需要额外的磁盘用于数据冗余备份,RAID 1的成本相对较高。需要考虑额外的硬件成本。
写入性能略低:由于数据需要同时写入多个驱动器,相对于单个驱动器的写入性能,RAID 1的写入性能可能略低。
RAID 5
RAID 5使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验实现数据的冗余备份。
数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上。
当写入数据时,奇偶校验信息也会被更新。如果其中一个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。
这种方式可以同时提供性能增强和数据冗余。
RAID 5特点:
-
至少需要3块磁盘
-
数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
-
以奇偶校验(分散)做数据冗余
-
一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
-
是目前综合性能最佳的数据保护解决方案
-
兼顾了存储性能、数据安全和存储成本等各方面因素(性价比高)
-
适用于大部分的应用场景
RAID 5适用于需要性能增强和数据冗余的场景。以下是几种适合使用RAID 5的场景:
文件服务器:对于文件服务器,RAID 5可以提供高性能的数据访问和数据冗余备份,确保文件的安全性和可用性。
数据库服务器:对于需要高性能和数据冗余的数据库服务器,RAID 5可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
小型企业环境:对于小型企业,RAID 5提供了经济实惠的解决方案,同时提供了性能和数据冗余的好处。
RAID 5具有以下优点:
-
性能增强:通过数据条带化和并行读写操作,RAID 5可以提供较高的数据传输速度和系统性能。
-
数据冗余备份:通过分布式奇偶校验,RAID 5可以提供数据的冗余备份,保护数据免受驱动器故障的影响。
-
成本效益:相对于其他RAID级别(如RAID 1),RAID 5只需要额外一个驱动器用于奇偶校验信息,从而在成本上更具竞争力。
RAID 5也存在一些缺点:
写入性能受限:由于写入数据时需要重新计算奇偶校验信息,相对于读取操作,RAID 5的写入性能较低。
驱动器故障期间的数据完整性:如果一个驱动器发生故障,系统在恢复数据时需要进行计算,这可能导致数据访问速度较慢,并且在此期间可能会有数据完整性的风险。
RAID 6
RAID 6使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验和双重奇偶校验实现数据的冗余备份。
数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被分布式存储在不同的驱动器上,并通过双重奇偶校验提供更高的数据冗余性。
当写入数据时,奇偶校验信息也会被更新。如果其中两个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。
这种方式可以同时提供性能增强和更高级别的数据冗余。
RAID6特点:
-
至少需要4块磁盘
-
数据条带化存储在磁盘,读取性能好,容错能力强
-
采用双重校验方式保证数据的安全性
-
如果2块磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
-
成本要比其他等级高,并且更复杂
-
一般用于对数据安全性要求非常高的场合
RAID 6适用于需要更高级别的数据冗余和性能增强的场景。以下是几种适合使用RAID 6的场景:
大容量存储系统:对于需要大容量存储和数据冗余备份的系统,如大型文件服务器或存档系统,RAID 6可以提供更高级别的数据冗余性。
长时间运行的应用程序:对于需要长时间运行的关键应用程序,如数据库服务器,RAID 6可以提供更高级别的数据冗余和故障容忍性。
虚拟化环境:在虚拟化环境中,需要高性能和更高级别的数据冗余来支持多个虚拟机的运行。RAID 6可以满足这些要求。
RAID 6具有以下优点:
更高级别的数据冗余:通过分布式奇偶校验和双重奇偶校验,RAID 6可以提供更高级别的数据冗余性,即使同时发生两个驱动器故障,仍能恢复丢失的数据。
性能增强:通过数据条带化和并行读写操作,RAID 6可以提供较高的数据传输速度和系统性能。
RAID 6也存在一些缺点:
写入性能略低:由于数据需要同时写入多个驱动器,并进行双重奇偶校验计算,相对于读取操作,RAID 6的写入性能较低。
较高的成本:由于需要额外的磁盘用于奇偶校验信息和更复杂的计算,RAID 6的成本相对较高。需要考虑额外的硬件成本。
RAID 10
RAID 10使用条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过镜像(mirroring)实现数据的冗余备份。
数据被分成固定大小的块,并依次存储在不同的驱动器上,类似于RAID 0。
然而,每个数据块都会被完全复制到另一个驱动器上,实现数据的冗余备份,类似于RAID 1。这样,RAID 10在提供性能增强的同时,也提供了数据的冗余保护。
RAID10特点:
-
RAID10是RAID1+RAID0的组合
-
至少需要4块磁盘
-
两块硬盘为一组先做RAID1,再将做好RAID1的两组做RAID0
-
兼顾数据的冗余(RAID1镜像)和读写性能(RAID0数据条带化)
-
磁盘利用率为50%,成本较高
RAID 10适用于需要高性能和数据冗余的场景。以下是几种适合使用RAID 10的场景:
数据库服务器:对于需要高可用性和性能的数据库服务器,RAID 10可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响。
虚拟化环境:在虚拟化环境中,需要高性能和数据冗余来支持多个虚拟机的运行。RAID 10可以满足这些要求,提供性能增强和数据保护。
关键业务应用:对于关键业务应用,如金融交易系统或在线电子商务平台,RAID 10可以提供高可用性和快速的数据访问,确保业务的连续性和稳定性。
RAID 10具有以下优点:
高性能:通过数据条带化和并行读写操作,RAID 10可以提供较高的数据传输速度和系统性能。
数据冗余备份:通过数据镜像将数据完全复制到另一个驱动器上,RAID 10提供了数据的冗余备份,保护数据免受驱动器故障的影响。
较高的可靠性:由于RAID 10采用镜像的方式进行数据冗余备份,即使一个驱动器发生故障,仍然可以从其他驱动器中读取数据,确保数据的可用性和连续性。
快速的故障恢复:在RAID 10中,如果一个驱动器发生故障,系统可以直接从镜像驱动器中恢复数据,而无需进行复杂的计算,从而加快故障恢复的速度。
RAID 10也存在一些缺点:
较高的成本:相对于其他RAID级别,RAID 10需要更多的驱动器用于数据镜像,从而增加了硬件成本。
低效的空间利用:由于RAID 10的数据镜像特性,有效的存储容量只等于所有驱动器中一半的容量,因此空间利用率较低。
RAID级别总结
RAID级别 | 最小磁盘数 | 容错能力 | 磁盘空间开销 | 读取速度 | 写入速度 | 硬件成本 |
---|---|---|---|---|---|---|
RAID 0 | 2 | 无 | 0% | 高 | 高 | 低 |
RAID 1 | 2 | 单个磁盘 | 50% | 高 | 低 | 中 |
RAID 5 | 3 | 单个磁盘 | 1 / N | 中 | 低 | 中 |
RAID 6 | 4 | 两个磁盘 | 2 / N | 中 | 低 | 高 |
RAID 10 | 4 | 多个磁盘 | 50% | 高 | 中 | 高 |
RAID 50 | 6 | 单个磁盘 | 1 / N | 高 | 中 | 高 |
RAID 60 | 8 | 多个磁盘 | 50% | 高 | 中 | 高 |
软硬RAID
软RAID
软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:
-
占用内存空间
-
占用CPU资源
-
如果程序或者操作系统故障就无法运行
总结:基于以上缺陷,所以现在企业很少用软RAID。
硬RAID
通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。
RAID卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。
不同的RAID卡支持的RAID功能不同,支持RAID0、RAID1、RAID4、RAID5、RAID10不等。
mdadm命令
在介绍RAID的创建之前,需要先了解mdadm工具,它是Linux系统中用于管理软件RAID的主要命令行工具。
mdadm(multiple disk admin)是Linux系统中管理和监控软件RAID设备的工具。它提供了创建、管理、监控RAID设备的完整功能。
mdadm [模式] <RAID设备名称> [选项] [成员设备...]
要模式
模式 | 描述 |
---|---|
--create 或 -C | 创建一个新的 RAID 阵列 |
--assemble 或 -A | 装配一个已存在的 RAID 阵列 |
--build | 构建没有超级块的 RAID 阵列 |
--manage | 管理 RAID 阵列 |
--misc | 对 RAID 成员设备执行杂项操作 |
--monitor | 监控 RAID 阵列 |
--grow | 改变 RAID 阵列的大小或结构 |
常用选项
选项 | 描述 |
---|---|
-l, --level= | 指定 RAID 级别(如 0, 1, 4, 5, 6, 10 等) |
-n, --raid-devices= | 指定构成 RAID 的活动设备数量 |
-x, --spare-devices= | 指定热备盘数量 |
-c, --chunk= | 指定块大小(以 KB 为单位,如 512) |
-D, --detail | 显示 RAID 设备详细信息 |
-a, --add | 添加设备到 RAID 阵列 |
-r, --remove | 从 RAID 阵列中移除设备 |
-f, --fail | 标记设备为故障状态 |
--scan | 扫描配置文件和 /proc 获取 RAID 信息 |
/proc/mdstat 文件详解
/proc/mdstat 是Linux系统中的一个特殊文件,用于提供系统中所有软件RAID设备(MD设备,Multiple Device)的实时状态信息。
它是监控和管理RAID设备的重要工具,位于虚拟文件系统/proc中。
/proc/mdstat 文件提供了以下关键功能:
RAID5使用条带化和分布式奇偶校验来提供数据冗余,可以在一块磁盘故障的情况下保持数据可用。
但是,在故障磁盘被替换之前,RAID5阵列处于"降级模式",此时系统没有冗余保护,如果在此期间另一块磁盘也发生故障,将导致数据完全丢失。
热备份机制通过以下方式减轻这一风险:
缩短RAID阵列处于降级状态的时间
无需人工干预即可开始数据重建
减少数据丢失的风险
-
实时显示RAID状态:提供所有RAID阵列的当前状态和健康情况
-
监控同步/重建进度:显示数据同步、重建或恢复操作的实时进度
-
故障检测:指示任何磁盘故障或降级的RAID阵列
-
性能监控:显示重建速度和预估完成时间
Personalities : [raid1] [raid6] [raid5] [raid4] [raid0] md0 : active raid5 sdc1[0] sdd1[2] sde1[3] sdb1[1] 3906778112 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] bitmap: 0/30 pages [0KB], 65536KB chunk md1 : active raid1 sdf1[0] sdg1[1] 976759936 blocks super 1.2 [2/2] [UU] [==>..................] resync = 12.6% (123456789/976759936) finish=125.5min speed=113513K/sec
主要部分解释
Personalities:系统加载的RAID类型模块列表
RAID设备信息:
md0 : active raid5 - 表示名为md0的活动RAID5设备
sdc1[0] sdd1[2] sde1[3] sdb1[1] - 组成RAID的磁盘分区及其在RAID中的角色
3906778112 blocks - RAID设备的总容量(以块为单位)
super 1.2 - 元数据版本
level 5, 512k chunk - RAID级别和块大小
[4/4] - 正常工作的磁盘数/总磁盘数
[UUUU] - 每个磁盘的状态(U=正常工作,=故障)
同步/重建状态(如果正在进行):
[==>..................] - 进度条
resync = 12.6% (123456789/976759936) - 同步百分比和已完成/总块数
finish=125.5min - 估计完成时间
speed=113513K/sec - 当前同步速度
磁盘状态标识
RAID阵列中的磁盘状态用不同的标记表示:
U - 正常工作的磁盘
_ - 缺失或失效的磁盘
(F) - 标记为故障的磁盘
(S) - 备用磁盘(spare)
# 持续监控RAID状态,每秒更新一次 watch -n 1 cat /proc/mdstat
软RAID创建
环境准备
添加1个大小为20G的虚拟硬盘,并分10个分区。
fdisk -> 4个主分区/(三个主分区+1个拓展分区)
gdisk -> 128个主分区
创建RAID0
RAID0提供了数据条带化但没有冗余,可以提高读写性能,但不提供任何数据保护。
# 创建RAID0,使用两块磁盘 [root@server ~]# mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb1 /dev/sdb2 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
-C /dev/md0 创建名为md0的RAID设备
-l 0 指定RAID级别为0(条带化)
-n 2 使用2块磁盘组成RAID0
/dev/sdb1 /dev/sdb2 使用的磁盘设备
# 查看RAID0状态 [root@server ~]# cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] md0 : active raid0 sdb2[1] sdb1[0] 4177920 blocks super 1.2 512k chunks # 查看RAID0详细信息 [root@server ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sat Apr 07 14:40:33 2025 Raid Level : raid0 Array Size : 4177920 (3.99 GiB 4.28 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Apr 07 14:40:33 2025 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 512K Name : server:0 UUID : 1a2b3c4d:5e6f7g8h:9i0j1k2l:3m4n5o6p Events : 0 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2
格式化并挂载RAID0:
# 格式化RAID0为ext4文件系统 [root@server ~]# mkfs.ext4 /dev/md0 # 创建挂载点并挂载 [root@server ~]# mkdir -p /u00 [root@server ~]# mount /dev/md0 /u00 # 查看挂载情况 [root@server ~]# df -h | grep /dev/md0 /dev/md0 3.9G 8.1M 3.7G 1% /u00
创建RAID1
RAID1提供数据镜像保护,能够在一个磁盘故障的情况下保证数据安全。
# 创建RAID1,使用两块磁盘 [root@server ~]# mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb3 /dev/sdb4 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started.
创建RAID1后,系统会自动开始同步数据,可以实时查看同步状态:
# 查看同步状态 [root@server ~]# watch -n 1 cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] md1 : active raid1 sdb4[1] sdb3[0] 2088960 blocks super 1.2 [2/2] [UU] [=======>............] resync = 35.2% (736768/2088960) finish=0.2min speed=122794K/sec
同步完成后,查看RAID1状态:
# 查看RAID1详细信息 [root@server ~]# mdadm -D /dev/md1 /dev/md1: Version : 1.2 Creation Time : Sat Apr 07 14:50:12 2025 Raid Level : raid1 Array Size : 2088960 (2.00 GiB 2.14 GB) Used Dev Size : 2088960 (2.00 GiB 2.14 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sat Apr 07 14:51:03 2025 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : server:1 UUID : 7a8b9c0d:1e2f3g4h:5i6j7k8l:9m0n1o2p Events : 17 Number Major Minor RaidDevice State 0 8 19 0 active sync /dev/sdb3 1 8 20 1 active sync /dev/sdb4
格式化并挂载RAID1:
# 格式化RAID1为ext4文件系统 [root@server ~]# mkfs.ext4 /dev/md1 # 创建挂载点并挂载 [root@server ~]# mkdir -p /u01 [root@server ~]# mount /dev/md1 /u01 # 查看挂载情况 [root@server ~]# df -h | grep /dev/md1 /dev/md1 2.0G 6.0M 1.9G 1% /u01
测试RAID1的容错功能:
==编辑磁盘是失败的,从raid移除磁盘==
# 模拟一个磁盘故障 [root@server ~]# mdadm /dev/md1 -f /dev/sdb3 mdadm: set /dev/sdb3 faulty in /dev/md1 # 查看RAID1状态 [root@server ~]# cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] md1 : active raid1 sdb4[1] sdb3[0](F) 2088960 blocks super 1.2 [2/1] [_U]
说明:即使一个磁盘故障(标记为F),RAID1仍然可以正常工作,数据可以从剩余的磁盘中读取。
# 移除故障磁盘 [root@server ~]# mdadm /dev/md1 -r /dev/sdb3 mdadm: hot removed /dev/sdb3 from /dev/md1 # 添加新磁盘替换故障磁盘 [root@server ~]# mdadm /dev/md1 -a /dev/sdb5 mdadm: added /dev/sdb5
添加新磁盘后,RAID1会自动开始重建数据:
# 查看重建状态 [root@server ~]# cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] md1 : active raid1 sdb5[2] sdb4[1] 2088960 blocks super 1.2 [2/1] [_U] [=======>............] recovery = 36.7% (768000/2088960) finish=0.1min speed=153600K/sec
重要说明:重建完成后,新磁盘(sdb5)将完全替代故障磁盘(sdb3),包含完全相同的数据。这就是RAID1镜像的容错优势。
-
创建RAID5
# 创建RAID5,使用三块磁盘和一块热备盘 [root@server~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdb{5,6,7,8} mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md5 started.
命令解释:
-
-C
创建RAID设备 -
-l 5
指定RAID级别为RAID5 -
-n 3
使用3块磁盘组成RAID5 -
-x 1
指定1块磁盘作为热备盘 -
/dev/sdb{7,8,9,10}
使用的磁盘设备,其中sdb7、sdb8、sdb9构成主阵列,sdb10作为热备盘 -
RAID5使用条带化和分布式奇偶校验来提供数据冗余,可以在一块磁盘故障的情况下保持数据可用。
但是,在故障磁盘被替换之前,RAID5阵列处于"降级模式",此时系统没有冗余保护,如果在此期间另一块磁盘也发生故障,将导致数据完全丢失。
热备份机制通过以下方式减轻这一风险:
缩短RAID阵列处于降级状态的时间
无需人工干预即可开始数据重建
减少数据丢失的风险
# 实时查看RAID同步状态 [root@server ~]# watch -n 1 cat /proc/mdstat Personalities:[raido] [raidi] [raid6] [raid5] [raid4] md5:active raid5 sdb9[4] sdb10[3](s) sdb8[1] sdb7[0] 2117632 blocks super 1.2 1eve] 5, 512k chunk,algorithm 2[3/2] [uu_] recovery= 29.9% (317652/1058816) finish=0.3min speed=39706K/sec
状态说明:这里显示了RAID5的同步进度,已完成29.9%,预计0.3分钟完成,同步速度为39706KB/秒。
# 同步完成后再次查看 [root@server ~]# cat /proc/mdstat Personalities:[raid0] [raid1] [raid6] [raid5][raid4]
# 查看RAID状态详情 Personalities : [raid1] [raid6] [raid5] [raid4] md5 : active raid5 sdb9[4] sdb10[3](S) sdb8[1] sdb7[0] 2089984 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
说明:热备盘(sdb10)标记为(S),表示当其中一块盘故障后,热备盘会立马顶上去,而不需要人为手动干预。
# 查看详细信息 [root@localhost ~]# mdadm -D /dev/md5 Number Major Minor RaidDevice State 0 8 23 0 active sync /dev/sdb7 1 8 24 1 active sync /dev/sdb8 4 8 25 2 active sync /dev/sdb9 3 8 26 - spare /dev/sdb10
信息说明:这里显示了RAID设备的详细状态,包括每个磁盘的编号、主/次设备号、RAID设备号和状态。sdb10为备用盘(spare)。
# 格式化RAID设备为ext4文件系统 [root@localhost ~]# mkfs.ext4 /dev/md5 # 挂载RAID设备到/u05目录 [root@localhost ~]# mount /dev/md5 /u05 # 查看RAID设备信息 [root@localhost ~]# lsblk /dev/md5 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT md5 9:5 0 2G 0 raid5 /u05 # 查看挂载情况 [root@localhost ~]# df -h | grep /dev/md5 /dev/md5 2.0G 6.0M 1.9G 1% /u05
测试热备磁盘功能:
# 标记一块活动盘(sdb7)失效 [root@localhost ~]# mdadm /dev/md5 -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/md5 # 立即查看状态 [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md5 : active raid5 sdb9[4] sdb10[3] sdb8[1] sdb7[0](F) 2089984 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
说明: sdb7被标记为失效(F)后,原来的热备盘sdb10立即启用并开始同步数据。系统会显示同步进度,如:
2117632 blocks super 1.2 1eve] 5, 512k chunk,algorithm 2 [3/2] [_uu] [==>..recovery= 13.0%(138052/1058816) finish=0.4min speed=34513K/sec
# 为了未来备用,再次添加一个热备盘到RAID5中 [root@server~]# mdadm /dev/md5 -a /dev/sdb7 mdadm:added/dev/sdb7
保存RAID信息
问:为什么要保存RAID信息? 答:如果不做信息的保存,重启系统后RAID不能自动被识别到(在RHEL6里测试为重启后名字会变)。
# 创建配置文件
[root@server ~]# vim /etc/mdadm.conf
DEVICES /dev/sdb[56789] /dev/sdb10
说明:该配置文件默认不存在,需要手动创建。在文件中列出所有用于RAID的硬盘设备。
# 扫描RAID信息并保存到配置文件
[root@server ~]# mdadm -D --scan >>/etc/mdadm.conf
# 查看配置文件内容
[root@server ~]# cat /etc/mdadm.conf
DEVICES /dev/sdb[56789] /dev/sdb10
ARRAY /dev/md/1 metadata=1.2 name=localhost.localdomain:1 UUID=74a48836:435a20d0:7b513345:83c10f4e
ARRAY /dev/md/5 metadata=1.2 name=localhost.localdomain:5 UUID=f3536edf:678dba90:9a89725b:dbcc4149
RAID停止与启动
以RAID5为例说明:
# 停止RAID:
# 首先卸载RAID
[root@server ~]# umount /u04
# 使用命令停止RAID
[root@localhost ~]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 启动RAID:
# 如果配置文件(/etc/mdadm.conf)存在,使用以下命令启动
[root@localhost ~]# mdadm -A /dev/md5
mdadm: /dev/md5 has been started with 3 drives.
命令说明:-A
表示装载一个已存在的RAID设备。
RAID的删除
# 卸载设备
[root@server ~]# umount /u05
# 标记所有磁盘为故障
[root@server ~]# mdadm /dev/md5 -f /dev/sdb[789]
mdadm:set/dev/sdb7 fau1ty in/dev/md5
mdadm: set /dev/sdb8 faulty in /dev/md5
mdadm:set /dev/sdb9 faulty in /dev/md5
# 从RAID中移除这些磁盘
[root@server ~]# mdadm /dev/md5 -r /dev/sdb[789]
mdadm:hot removed /de/sdb7 from/dev/md5
mdadm:hot removed /dev/sdb8 from/dev/md5
mdadm:hot removed /dev/sdb9 from /dev/md5
# 停止RAID
[root@localhost ~]# mdadm ---stop /dev/md5
# 擦除超级块(superblock)清除相关信息
[root@server ~]# mdadm --misc --zero-superblock /dev/sdb[789]
RAID 与 LVM 的区别与互补
为什么有了LVM还需要RAID?
虽然逻辑卷管理器(LVM)和RAID都是存储管理技术,但它们解决的是不同的问题。理解它们的区别和互补性对于设计可靠且灵活的存储解决方案至关重要。
功能特性 | RAID | LVM |
---|---|---|
主要目的 | 数据冗余和性能提升 | 灵活的存储管理和调整 |
提供冗余保护 | ✓ (RAID 1/5/6/10等) | ✗ (默认无冗余) |
性能增强 | ✓ (并行I/O) | 有限 |
动态扩展/收缩 | 有限 | ✓ (高度灵活) |
存储池管理 | ✗ | ✓ (卷组) |
RAID的核心优势
-
数据冗余与保护:
-
RAID的主要目的之一是通过数据冗余提供保护
-
不同的RAID级别提供不同级别的数据保护
-
在硬盘故障时,可以保持数据的可用性和完整性
-
-
性能提升:
-
通过将数据分布在多个磁盘上,可以并行读写
-
RAID 0提供更高的读写吞吐量
-
RAID 5/6提供更好的读性能
-
RAID 10兼顾高读写性能
-
LVM的核心优势
-
灵活的存储管理:
-
可以轻松合并多个物理磁盘成为一个大的逻辑卷
-
支持动态添加或移除物理卷
-
可以跨多个物理磁盘动态调整逻辑卷的大小
-
-
高级功能:
-
支持快照功能,可以在不停机的情况下备份数据
-
逻辑卷可以在不同的物理磁盘之间迁移
-
可以为不同应用程序分配适当的存储资源
-
实际应用场景
在企业环境中,RAID和LVM经常结合使用以获得最佳的存储解决方案:
-
层次化存储架构:
-
先使用RAID提供底层数据保护和性能
-
然后在RAID设备上创建物理卷,并纳入LVM管理
-
最后通过LVM创建和管理逻辑卷
-
-
互补的保护机制:
-
RAID保护物理硬件故障
-
LVM提供灵活的存储管理和高级功能
-
数据库服务器
对于数据库服务器,可以使用RAID提供底层数据保护和性能,而使用LVM提供灵活的存储管理:
物理磁盘 → RAID 10(硬件RAID) → LVM物理卷 → LVM卷组 → 多个逻辑卷(数据、日志、索引等)
文件服务器
对于文件服务器,可以根据不同的数据重要性和访问模式,结合使用RAID和LVM:
重要数据:物理磁盘 → RAID 6 → LVM → 逻辑卷
普通数据:物理磁盘 → RAID 5 → LVM → 逻辑卷
临时数据:物理磁盘 → RAID 0 → LVM → 逻辑卷
RAID和LVM各自解决不同的问题,结合使用可以创建既安全又灵活的存储解决方案。
RAID解决数据保护和性能问题,而LVM解决存储管理的灵活性问题。
在企业级环境中,这两种技术通常会一起使用,以获得最佳的存储解决方案。