🌟 嗨,我是Lethehong!🌟
🌍 立志在坚不欲说,成功在久不在速🌍
🚀 欢迎关注:👍点赞⬆️留言收藏🚀
🍀欢迎使用:小智初学计算机网页IT深度知识智能体
🍀欢迎使用:深探助手deepGuide网页deepseek智能体
目录
UER问题(不可恢复读错误)机械硬盘UER率为10^14,RAID5阵列在12TB硬盘重建时失败率高达22%
一、RAID的本质:存储界的瑞士军刀
RAID(Redundant Array of Independent Disks)不是简单的磁盘堆叠,而是通过算法将多块物理硬盘虚拟化为逻辑存储单元的核心技术。其核心价值体现在:
-
性能加速:读写速度提升2-10倍(视RAID级别而定)
-
数据保护:最高可承受同时损坏2块硬盘(如RAID6)
-
容量优化:多块小容量硬盘合并为超大存储池
二、主流RAID级别性能矩阵
RAID级别 | 最小磁盘数 | 可用容量 | 读写性能 | 冗余能力 | 典型场景 |
---|---|---|---|---|---|
RAID0 | 2 | N×单盘容量 | 极佳 | 无 | 视频编辑缓存 |
RAID1 | 2 | 50%总容量 | 读快写慢 | 允许1盘故障 | 数据库日志 |
RAID5 | 3 | (N-1)×单盘容量 | 读快写慢 | 允许1盘故障 | 文件服务器 |
RAID6 | 4 | (N-2)×单盘容量 | 读快写慢 | 允许2盘故障 | 医疗影像存储 |
RAID10 | 4 | 50%总容量 | 读写俱佳 | 允许多盘故障(每组镜像) | 虚拟化平台 |
三、技术细节:RAID5的异或运算原理
RAID5的分布式校验算法是其核心技术:
# 三块磁盘数据块示例
disk1 = 0b1100
disk2 = 0b1010
# 校验块计算
parity = disk1 ^ disk2 # 0b0110
# 磁盘2损坏时恢复数据
recovered_disk2 = disk1 ^ parity # 0b1010
这种算法使校验数据均匀分布在各磁盘,避免写入热点问题。
四、必须知道的RAID陷阱
-
UER问题(不可恢复读错误)
机械硬盘UER率为10^14,RAID5阵列在12TB硬盘重建时失败率高达22% -
写惩罚(Write Penalty)
RAID级别 写放大系数 RAID1 2 RAID5 4 RAID6 6 -
容量规划公式
实际可用空间 = (单盘容量 × 磁盘数) × 冗余系数
冗余系数:RAID1=0.5, RAID5=0.8, RAID6=0.67
五、新型存储方案冲击下的RAID
-
对象存储:Ceph、MinIO的EC编码方案替代传统RAID
-
SSD阵列:基于NVMe-oF的JBOF设备提供更高性能
-
云存储:AWS EBS自动多AZ冗余
但RAID仍是本地化存储的黄金标准,2023年全球RAID控制器市场规模达48.7亿美元(数据来源:Gartner)。
永远记住:RAID不是备份!需配合3-2-1备份策略
六、三个实例(raid1、raid5、raid10)
1、创建raid1,并测试
这里我就没有演示如何去分区了,直接使用fdisk命令即可。测试的方法有很多,这里就没有去比较三者的速率了
使用cat /proc/mdstat查看一下创建情况
使用mdadm -D /dev/md1
-D:打印阵列设备的详细信息
使用mkfs.ext4 /dev/md1将md1进行格式化
使用mkdir新建一个u10的文件,然后mount /dev/md1 /u10进行挂载
现在开始测试,mdadm /dev/md1 -f /dev/sdb5
-f:表示无效
这里为什么是sdb5,因为我将一块硬盘,全部进行了扩展分区,然后将扩展分区里面的所有空间分成了若干个相同大小的逻辑分区,然后将逻辑分区模拟单个盘进行实验
使用cat /proc/mdstat进行查看情况,这里可以发现sdb5后面跟了个(F),说明sdb5处于故障状态
使用mdadm -D /proc/mdstat查看设备详细信息
使用madam /dev/md1 -r /dev/sdb5移除sdb5盘
再次使用mdadm -D /dev/md1查看一次有什么变化,发现sdb5被移除
最后使用mdadm /dev/md1 -a /dev/sdb5将sdb5加回来
继续查看cat /proc/mdstat ,发现加回来了,没有问题
2、创建raid5,并测试
mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sdb{7,8,9,10}
-x 指定热备盘
cat /proc/mdstat
mdadm -D /dev/md5
mkfs.ext4 /dev/md5
mkdir /u05
mount /dev/md5 /u05
mdadm /dev/md5 -f /dev/sdb7
cat /proc/mdstat 这里可以看到图中的sdb7后面有一个“(F)”
mdadm -D /dev/md5
mdadm /dev/md5 -r /dev/sdb7先移除
cat /proc/mdstat在查看,可以看到sdb7已经没有了
mdadm /dev/md5 -a /dev/sdb7把这个加回来看看效果
cat /proc/mdstat可以看到sdb7回来了,并且后面还跟了一个“(S)”,S表示备份盘
3、创建raid10,并测试
mdadm -C /dev/md10 -l 10 -n 4 /dev/sdb{11,12,13,14}
mkfs.ext4 /dev/md10
mount /dev/md10 /u10前面已经新建了u10
Lsblk查看,发现上面的riad1、riad5、riad10都挂载成功了
我们先干掉第一块盘
干掉12,发现干不掉(因为没有做备份盘)
七、总结
类型 | 读写性能 | 可靠性 | 磁盘利用率 | 成本 |
RAID0 | 最好 | 最低 | 100% | 较低 |
RAID1 | 读正常;写两份数据 | 高 | 50% | 高 |
RAID5 | 读:近似RAID0 写:多了校验 | RAID0<RAID5<RAID1 | (n-1)/n | RAID0<RAID5<RAID1 |
RAID6 | 读:近似RAID0 写:多了双重校验 | RAID6>RAID5 | RAID6<RAID5 | RAID6>RAID1 |
RAID10 | 读:RAID10=RAID0 写:RAID10=RAID1 | 高 | 50% | 最高 |
mdadm命令常见参数解释: