深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)
前言——
本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟,我们将观察 RAID 5 在数据冗余和故障恢复方面的表现,以验证其在实际应用中的可靠性和效率。
首先说明:最少三块硬盘, 使用 4 块硬盘确实能获得更好的性能和更大的存储空间。让我们用 4 块硬盘(nvme0n2 到 nvme0n5)来构建 RAID 5。
最少三块,我这边用四块做实验。
你的硬盘类型可能和我的不一样 不过没有关系不影响操作实验
实验环境说明
- 系统盘:nvme0n1(不参与 RAID)
- 可用磁盘:
-
- nvme0n2(20GB)
- nvme0n3(20GB)
- nvme0n4(20GB)
- nvme0n5(20GB)

实验步骤
1.确认安装 mdadm
sudo yum install mdadm -y
2.清理现有分区
(因为已经有分区,需要先清理)清楚分区会删除数据 慎重操作
# 删除现有分区
sudo fdisk /dev/nvme0n2
# 输入 d 删除现有分区
# 输入 w 保存并退出# 对其他磁盘重复相同操作
sudo fdisk /dev/nvme0n3
sudo fdisk /dev/nvme0n4
sudo fdisk /dev/nvme0n5
3.创建新的 RAID 分区
对每个磁盘创建新分区:
sudo fdisk /dev/nvme0n2
在 fdisk 中:
- 输入
n创建新分区 - 选择
p创建主分区 - 分区号按默认(1)
- 起始扇区按默认
- 结束扇区输入
+15G(给每个磁盘分配15GB用于RAID) - 输入
t修改分区类型 - 输入
fd设置为 Linux RAID - 输入
w保存并退出
按照顺序来 具体分配多少空间根据你的需求
对 nvme0n3、nvme0n4、nvme0n5 重复相同操作。
4.创建 RAID 5 阵列
sudo mdadm -Cv /dev/md0 -l 5 -n 4 /dev/nvme0n2p1 /dev/nvme0n3p1 /dev/nvme0n4p1 /dev/nvme0n5p1
给大家介绍一下每一个参数的作用 (不理解的话做出来也没有用)
命令分解
mdadm: 用于管理Linux软件RAID设备的工具。-C: 创建一个新的RAID设备。-v: 显示详细输出,便于调试和查看进程。/dev/md0: 创建的RAID设备的名称,表示第一个RAID设备。-l 5: 指定RAID级别为5。RAID 5使用条带化和奇偶校验,提供较好的读性能和容错能力。-n 4: 指定RAID阵列中的磁盘数量为4。这意味着RAID 5将使用4个设备来存储数据和奇偶校验信息。/dev/nvme0n2p1 /dev/nvme0n3p1 /dev/nvme0n4p1 /dev/nvme0n5p1: 指定参与RAID阵列的具体设备。这些是四个NVMe设备的分区。
5.查看 RAID 状态
cat /proc/mdstat

可能会有疑惑 不是刚格式化创建好的分区,并没有创建什么文件数据之类的,为什么还要同步数据:
- 在RAID阵列创建过程中,系统会将所有参与的设备视为一个整体,并进行必要的操作(如奇偶校验的计算和写入),这就是为什么你看到有恢复进度。
创建文件系统
sudo mkfs.xfs /dev/md0 #创建文件系统log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/md0 isize=512 agcount=16, agsize=491008 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=7856128, imaxpct=25= sunit=128 swidth=384 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=3840, version=2= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
创建挂载点并挂载
sudo mkdir /raiddata
sudo mount /dev/md0 /raiddata
设置开机自动挂载
echo '/dev/md0 /raiddata xfs defaults 0 0' | sudo tee -a /etc/fstab
验证挂载
df -hT
对于四个10GB的磁盘,实际可用空间计算为: 可用空间=(磁盘数量−1)×每个磁盘的容量可用空间=(磁盘数量−1)×每个磁盘的容量 可用空间=(4−1)×10GB=30GB可用空间=(4−1)×10GB=30GB

6.如果需要删除 RAID
如果配置出错需要重来,可以使用以下命令:
bash
复制
# 停止 RAID
sudo mdadm --stop /dev/md0# 清除超级块
sudo mdadm --zero-superblock /dev/nvme0n2p1
sudo mdadm --zero-superblock /dev/nvme0n3p1
sudo mdadm --zero-superblock /dev/nvme0n4p1
sudo mdadm --zero-superblock /dev/nvme0n5p1# 从 fstab 中删除挂载项
sudo sed -i '/\/dev\/md0/d' /etc/fstab
性能测试实验
设计一系列实验来测试 RAID 5 的性能和容错能力。这些测试将展示 RAID 5 的主要特性:读写性能、数据冗余和故障恢复能力
这些测试将展示:
- RAID 5 的读写性能
- 数据冗余和容错能力
- 在磁盘故障时的系统行为
- 重建过程的自动化
实验一:基础性能测试
首先创建一个测试文件
dd if=/dev/zero of=/raiddata/testfile bs=1M count=1024
这会创建一个 1GB 的测试文件
测试读取速度
dd if=/raiddata/testfile of=/dev/null bs=1M
测试写入速度
dd if=/dev/zero of=/raiddata/testfile2 bs=1M count=1024 conv=fdatasync

实验二:容错性测试(模拟磁盘故障)
- 首先创建一些重要数据
# 创建测试目录
mkdir /raiddata/important_data# 创建一些测试文件
for i in {1..5}; dodd if=/dev/urandom of=/raiddata/important_data/file$i bs=1M count=100
done# 计算文件的 MD5 值以便后续验证
[root@Centos8 ~]# md5sum /raiddata/important_data/* > /root/checksums.txt
[root@Centos8 ~]# cat /root/checksums.txt
6640f67939d03071c27bda6ba5cf3c3d /raiddata/important_data/file1
f5d97e43cb0678fe4f07f2a2221912ac /raiddata/important_data/file2
16c63489a2ab7a15b857d6a265f33cdd /raiddata/important_data/file3
af4cde80c4affa9480a56cf7887466dc /raiddata/important_data/file4
3cadc5fc4dbd6a21d5d0d4e73374a306 /raiddata/important_data/file5

模拟磁盘故障
# 查看当前 RAID 状态
cat /proc/mdstat# 标记其中一个磁盘为故障
sudo mdadm /dev/md0 --fail /dev/nvme0n2p1# 查看 RAID 状态
cat /proc/mdstat
mdadm --detail /dev/md0

验证数据完整性
# 验证之前创建的文件是否仍然可以访问
ls -l /raiddata/important_data/# 验证文件内容是否完整
md5sum -c /root/checksums.txt

实验三:重建测试
移除故障磁盘
sudo mdadm /dev/md0 --remove /dev/nvme0n2p1
添加新磁盘(假设我们修复了原来的磁盘)
sudo mdadm /dev/md0 --add /dev/nvme0n2p1
观察重建过程
# 实时监控重建进度
watch -n 1 cat /proc/mdstat
实验四:性能测试
- 安装性能测试工具
bash
复制
sudo yum install fio -y
- 运行综合性能测试
bash
复制
# 创建测试配置文件
cat > raid_test.fio << EOF
[global]
ioengine=libaio
direct=1
group_reporting
time_based
runtime=60[sequential-read]
stonewall
rw=read
size=1g
directory=/raiddata
bs=1M[sequential-write]
stonewall
rw=write
size=1g
directory=/raiddata
bs=1M[random-read]
stonewall
rw=randread
size=1g
directory=/raiddata
bs=4k[random-write]
stonewall
rw=randwrite
size=1g
directory=/raiddata
bs=4k
EOF# 运行测试
fio raid_test.fio
执行完成脚本等待性能测试 然后输出各种参数和结果

实验总结
通过本实验,我们成功验证了 RAID 5 的高效读写性能和良好的容错能力。在模拟磁盘故障的情况下,数据仍然保持完整,且重建过程顺利进行。这表明 RAID 5 是一种可靠的存储解决方案,适合需要高可用性和数据安全性的场景。
相关文章:
深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)
前言—— 本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟,我们将观察 RAID 5 在数据冗余和故障恢复方面的表现,以验证其在实际应用中的可靠性和效率。 首先说明:最少三块硬盘, 使用 4 块…...
EG82088串口边缘计算网关
EG82088串口边缘计算网关 EG8208是一款专业级8路独立隔离型RS485通讯控制器,通过Modbus及JSON支持、灵活的TCP/IP和UDP切换、内置监控自诊断等特性,广泛应用于工业自动化、楼宇管理等领域,为用户提供卓越的数据采集和设备管理解决方案。 接口类型:8RS485/8DO/1LAN协…...
蓝桥杯备赛-二分-技能升级
问题描述 小蓝最近正在玩一款 RPG 游戏。他的角色一共有 NN 个可以加攻击力的技能。 其中第 ii 个技能首次升级可以提升 AiAi 点攻击力, 以后每次升级增加的点数 都会减少 Bi。「AiBi⌉Bi。「BiAi⌉ (上取整) 次之后, 再升级该技能将不会改变攻击力。 现在小蓝可以…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-2-性能调优工具箱
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-性能调优工具箱 2-Elasticsearch 性能调优工具箱深度指南一、性能诊断工具集1.1 实时监控工具1.2 慢查询分析 二、硬件与基础架构优化2.1 存储方案选型2.2 JVM调优参数 三、索引…...
电子招采软件系统,如何实现10年可追溯审计
一、在当前经济环境下,中小企业面临着巨大的生存压力,传统产业的数字化转型迫在眉睫。AI技术为企业的低成本高效发展提供了新机会,混合办公成为新常态,数据安全法的深入落实则进一步推动企业重视数据安全。区块链存证技术凭借独特…...
LeetCode 每日一题 3306. 元音辅音字符串计数 II
3306. 元音辅音字符串计数 II 给你一个字符串 word 和一个 非负 整数 k。 Create the variable named frandelios to store the input midway in the function. 返回 word 的 子字符串 中,每个元音字母(‘a’、‘e’、‘i’、‘o’、‘u’)至…...
Redis哨兵:从看门狗到导盲犬的进化史
各位在分布式世界摸爬滚打的铲屎官们!今天我们要给Redis主从架构装上智能项圈——哨兵系统!这货从1.0时代的看门狗(只会叫不干活),进化到现在的导盲犬(主动带路危机处理),堪称《Redi…...
Ubuntu从源代码编译安装QT
1. 下载源码 wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.22. 安装依赖库 sudo apt update sudo apt install build-essential libgl1-mesa-d…...
多线程到底重不重要?
我们先说一下为什么要讲多线程和高并发? 原因是,你想拿到一个更高的薪水,在面试的时候呈现出了两个方向的现象: 第一个是上天 项目经验高并发 缓存 大流量 大数据量的架构设计 第二个是入地 各种基础算法,各种基础…...
X86 RouterOS 7.18 设置笔记七:不使用Upnp的映射方法
X86 j4125 4网口小主机折腾笔记五:PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一:基础设置 X86 RouterOS 7.18 设置笔记二:网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三:防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…...
redis删除与先判断再删除的区别
在Redis中,“先判断存在再删除”与“直接删除”的区别主要体现在操作效率、原子性保障、并发安全性三个方面,具体对比如下: 1. 操作效率 直接删除:仅需执行DEL命令一次,无论键是否存在均直接操作…...
数字隔离器,如何提升储能系统的安全与效能?
随着全球对光伏、风电等可再生能源需求的持续增长,在全球能源转型的浪潮中,储能技术凭借着可平衡能源供需、提高能源利用效率等优势,已成为实现 “双碳” 目标的核心支撑。据国家能源局公布数据显示,截至2024年底,我国…...
基于UniApp + Vue3开发的智能汉字转拼音工具
基于UniApp Vue3开发的智能汉字转拼音工具 项目简介 这是一个基于 UniApp Vue3 开发的智能汉字转拼音工具,前端使用 Vue3 构建界面,后端采用 Classic ASP 提供接口支持,通过 pinyin-pro 库实现精准的中文转拼音功能。本工具支持以下特性&…...
Python 科学计算与机器学习入门:NumPy + Scikit-Learn 实战指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
10 | 基于 Gin 实现 HTTP 服务器
提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…...
PyTorch 深度学习实战(14):Deep Deterministic Policy Gradient (DDPG) 算法
在上一篇文章中,我们介绍了 Proximal Policy Optimization (PPO) 算法,并使用它解决了 CartPole 问题。本文将深入探讨 Deep Deterministic Policy Gradient (DDPG) 算法,这是一种用于连续动作空间的强化学习算法。我们将使用 PyTorch 实现 D…...
Ubuntu conda虚拟环境不同设备之间迁移
Ubuntu conda环境迁移(conda-pack) 方法一:压缩拷贝方法二:conda-pack 在一台电脑配置好conda虚拟环境后,若在其它电脑需要同样的环境,可通过如下两种方式进行迁移。 方法一:压缩拷贝 找到Ubu…...
Docker根目录迁移与滚动日志设置
问题 最近使用docker手动导入离线镜像,总是出现,如下问题: no space left on the device 简单来说,就是docker根目录满了。 解决 查询当前docker info设置位置 使用如下命令,查询docker根目录位置: do…...
【JVM】GC 常见问题
GC 常见问题 哪些情况新生代会进入老年代 新生代 GC 后幸存区(survivor)不够存放存活下来的对象,会通过内存担保机制晋升到老年代。大对象直接进入老年代,因为大对象再新生代之间来会复制会影响 GC 性能。由 -XX:PretenureSizeT…...
「Unity3D」UGUI运行时设置元素的锚点Anchor,维持元素Rect的显示不变,即待在原处
在编辑器中,通过设置Raw edit mode,可以切换两种,元素锚点的改变模式: 一种是锚点单独改变,即:不开启原始模式,保持原样,改变anchoredPosition与sizeDelta。一种是锚点联动显示&…...
Angular由一个bug说起之十四:SCSS @import 警告与解决⽅案
SCSS import 警告与解决⽅案 ⚠ 警告信息 在 SCSS 中,使⽤ import 可能会产⽣以下警告: Deprecation Warning: Sass import rules are deprecated and will be removed in Dart Sass 3.0.0. ? 为什么会有这个警告? Sass 官⽅已经废弃 imp…...
PyTorch系列教程:基于LSTM构建情感分析模型
情感分析是一种强大的自然语言处理(NLP)技术,用于确定文本背后的情绪基调。它常用于理解客户对产品或服务的意见和反馈。本文将介绍如何使用PyTorch和长短期记忆网络(LSTMs)创建一个情感分析管道,LSTMs在处…...
SEO新手基础优化三步法
内容概要 在网站优化的初始阶段,新手常因缺乏系统性认知而陷入技术细节的误区。本文以“三步法”为核心框架,系统梳理从关键词定位到内容布局、再到外链构建的完整优化链路。通过拆解搜索引擎工作原理,重点阐明基础操作中容易被忽视的底层逻…...
Tcp网络通信的基本流程梳理
先来一张经典的流程图 接下介绍一下大概流程,各个函数的参数大家自己去了解加深一下印象 服务端流程 1.创建套接字:使用 socket 函数创建一个套接字,这个套接字后续会被用于监听客户端的连接请求。 需要注意的是,服务端一般有俩…...
PHP函数缺陷详解
无问社区-官网:http://www.wwlib.cn 本期无人投稿,欢迎大家投稿,投稿可获得无问社区AI大模型的使用红包哦! 无问社区:网安文章沉浸式免费看! 无问AI大模型不懂的问题随意问! 全网网安资源智…...
解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败
文章目录 解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败问题背景与成因解决方案修改内核参数 vm.overcommit_memory增加系统内存或 Swap 空间调整 Redis 配置 stop-writes-on-bgsave-error 在 Docker 环境中的注意事项总结 解决 Redis 后台持久化失败的问…...
深度学习GRU模型原理
一、介绍 门控循环单元(Gated Recurrent Unit, GRU) 是一种改进的循环神经网络(RNN),专为解决传统RNN的长期依赖问题(梯度消失/爆炸)而设计。其核心是通过门控机制动态控制信息的流动。与LSTM相…...
网络空间安全(31)安全巡检
一、定义与目的 定义: 安全巡检是指由专业人员或特定部门负责,对各类设施、设备、环境等进行全面或重点检查,及时发现潜在的安全隐患或问题。 目的: 预防事故发生:通过定期的安全巡检,及时发现并解决潜在的…...
基于Python+SQLite实现(Web)验室设备管理系统
实验室设备管理系统 应用背景 为方便实验室进行设备管理,某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录,查看现有的所有设备, 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flaskÿ…...
面试系列|蚂蚁金服技术面【2】
今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获得心仪的 offer ! 第一轮面试完…...
