Linux RAID1 创建与配置实战指南(mdadm)


一、RAID1 核心价值与实战目标

RAID1(磁盘镜像) 通过数据冗余提供高可靠性:

  • 当单块硬盘损坏时,数据不丢失
  • 支持快速阵列重建
  • 读写性能略低于单盘(镜像写入开销)

本文实战目标
✅ 使用 mdadm 在 Linux 创建 RAID1
✅ 提供环境兼容方案(如工具缺失时的替代方案)
✅ 实现开机自动挂载与状态验证

示例环境

  • 系统:CentOS 7 / Ubuntu(通用方案)
  • 数据盘:/dev/sda + /dev/sdc
  • RAID设备:/dev/md126
  • 挂载点:/data/raid1
  • 文件系统:ext4

二、前置准备
  1. 安装 mdadm
    按发行版选择命令:

    # Debian/Ubuntu
    apt update && apt install mdadm -y# CentOS/RHEL
    yum install mdadm -y
    

    验证安装:

    mdadm --version
    

  2. 磁盘检查与清理
    关键步骤:清除旧分区表/RAID信息,避免冲突

    # 查看磁盘列表
    lsblk
    

    清理旧分区(二选一)

    # 方案A(推荐):使用 sgdisk
    sgdisk --zap-all /dev/sda# 方案B(无 sgdisk 时):使用 dd
    dd if=/dev/zero of=/dev/sda bs=512 count=2048
    

    清除文件系统签名

    wipefs -a /dev/sda建议同样对 sdc 也执行 wipefs,防止遗留。

  3. 检查旧 RAID 阵列
    若存在旧阵列,先尝试组装:

    mdadm --assemble --scan
    cat /proc/mdstat  # 检查阵列状态
    

    ⚠️ 无输出表示无旧阵列,可跳过此步


三、创建 RAID1 阵列
  1. 初始化阵列(兼容性方案)

    # 创建阵列(预留一个磁盘位置)
    mdadm --create /dev/md126 --level=1 --raid-devices=2 /dev/sdc missing
    

    • missing:为 /dev/sda 预留位置,后续手动添加

    若设备名冲突(如已有 /dev/md126):

    mdadm --stop /dev/md126
    mdadm --remove /dev/md126
    

  2. 添加第二块磁盘

    mdadm --add /dev/md126 /dev/sda
    

  3. 监控重建进度

    watch cat /proc/mdstat  # 实时查看状态
    

    • 等待状态变为 [UU](表示双盘正常):
      md126 : active raid1 sda[2] sdc[0]3907015680 blocks [2/2] [UU]
      


四、文件系统与挂载
  1. 格式化 RAID 设备

    mkfs.ext4 /dev/md126
    

  2. 挂载到文件系统

    mkdir -p /data/raid1
    mount /dev/md126 /data/raid1
    

  3. 验证挂载

    df -h /data/raid1
    

    预期输出:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/md126      3.6T   89M  3.4T   1% /data/raid1
    


五、开机自动挂载配置
  1. 保存 RAID 配置

    # Debian/Ubuntu
    mdadm --detail --scan >> /etc/mdadm/mdadm.conf# CentOS/RHEL
    mdadm --detail --scan >> /etc/mdadm.conf
    

  2. 配置 /etc/fstab

    • 获取设备 UUID:
      blkid /dev/md126
      
      预期输出:
      /dev/md126: UUID="d8e3eb19-2b2f-41f5-b8b0-05bbb1f01aee" TYPE="ext4"
      
    • 编辑 /etc/fstab
      UUID=d8e3eb19-2b2f-41f5-b8b0-05bbb1f01aee /data/raid1 ext4 defaults 0 0
      

  3. 测试自动挂载

    umount /data/raid1
    mount -a
    df -h /data/raid1  # 检查是否成功挂载
    


六、检查与验证
  1. 查看阵列健康状态

    mdadm --detail /dev/md126
    

    关键指标:

    Raid Level : raid1
    State : clean
    Active Devices : 2
    Working Devices : 2
    Failed Devices : 0
    [UU]  # 双盘正常
    

  2. 故障模拟测试

    • 状态 [_U] → 单盘故障
    • 状态 [__] → 阵列崩溃
  3. 关键验证操作

    # 重启测试
    reboot
    df -h | grep raid1  # 重启后检查挂载# 读写测试
    touch /data/raid1/testfile
    ls -l /data/raid1
    rm -f /data/raid1/testfile
    


七、最佳实践与注意事项

定期维护

cat /proc/mdstat          # 每月检查阵列状态
mdadm --monitor --scan    # 启用后台监控

关键认知

  • RAID1 ≠ 备份!仍需独立备份方案
  • 更换故障盘后需手动触发重建
  • 避免使用同一批次硬盘(降低同时故障风险)

常见错误

  • 未清理旧分区导致阵列冲突
  • 忘记保存配置到 /etc/mdadm.conf
  • 直接拔盘未标记为 failed

最终配置摘要

项目
RAID 设备/dev/md126
RAID 类型RAID1
UUIDd8e3eb19-2b2f-41f5-b8b0-05bbb1f01aee
文件系统ext4
挂载点/data/raid1
阵列状态健康 [UU]
可用空间≈3.4 TB

通过本指南,您已构建高可靠的磁盘镜像系统。下一步建议:配置监控告警(如 mdadm 邮件通知)和定期数据备份。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88979.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88979.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88979.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库----函数

目录函数1,字符串函数2,数值函数3,日期函数4,流程函数函数 1,字符串函数 MySQL中内置了很多字符串函数 2,数值函数 3,日期函数 4,流程函数

1.2 vue2(组合式API)的语法结构以及外部暴露

vue2 vue3中可以写vue2的语法&#xff0c;vue2的结构像一个花盆里的根&#xff08;根组件App.vue&#xff09;&#xff0c;根上可以插上不同的枝杈和花朵&#xff08;组件&#xff09;。 组件的结构&#xff1a; // 这里写逻辑行为 <script lang"ts"> export d…

Swift 解 LeetCode 324:一步步实现摆动排序 II,掌握数组重排的节奏感

文章目录摘要描述题解答案题解代码&#xff08;Swift&#xff09;题解代码分析步骤一&#xff1a;排序数组步骤二&#xff1a;左右指针分段步骤三&#xff1a;按位置交错插入示例测试及结果示例 1示例 2示例 3&#xff08;边界情况&#xff09;时间复杂度分析空间复杂度分析总结…

使用SQLMAP的文章管理系统CMS的sql注入渗透测试

SQLMAP注入演示&#xff1a;抓包拿到Cookie:召唤sqlmap&#xff1a;sqlmap -u "http://192.168.1.99:8085/show.php?id34" --cookie "pma_langzh_CN; kbqug_admin_username2621-PL_LxhFjyVe43ZuQvht6MI5q0ZcpRVV5FI0pzQ6XR8; kbqug_siteid2621-PL_LxhFjyVe4yA5…

I3C通信协议核心详解

一、物理层与电气特性双线结构 SCL&#xff08;串行时钟线&#xff09;&#xff1a;主设备控制&#xff0c;支持 推挽&#xff08;Push-Pull&#xff09;输出&#xff08;高速模式&#xff09;和 开漏&#xff08;Open-Drain&#xff09;&#xff08;兼容I2C模式&#xff09;。…

Docker搭建Redis哨兵集群

Redis提供了哨兵机制实现主从集群下的故障转移&#xff0c;其中包含了对主从服务的检测、自动故障恢复和通知。 1.环境 centos7、redis6.2.4、MobaXterm 目的&#xff1a; 搭建redis的主从同步哨兵集群&#xff08;一主一从三哨兵&#xff09; 2.步骤 1.主从集群的搭建 主从…

暑假Python基础整理 --异常处理及程序调试

异常概念 在程序运行过程中&#xff0c;经常会遇到各种各样的错误&#xff0c;这些错误统称为“异常”。如下表是Python常见的异常与描述&#xff1a; 异常描述NameError尝试访问一个未声明的变量引发错误IndexError索引超出序列范围引发错误IndentationError缩进错误ValueErr…

k8s-高级调度(二)

目录 Taint(污点)与Toleration(容忍) Taint&#xff08;污点&#xff09;&#xff1a;节点的排斥标记 Toleration&#xff08;容忍&#xff09;&#xff1a;Pod的适配声明 与节点亲和性的对比 警戒(cordon)和转移(drain) Cordon&#xff1a;节点隔离&#xff08;阻止新 Po…

基于OpenCV的深度学习人脸识别系统开发全攻略(DNN+FaceNet核心技术选型)

核心技术选型表 技术组件版本/型号用途OpenCV DNN4.5.5人脸检测FaceNet (facenet-pytorch)0.5.0人脸特征提取MiniConda最新版Python环境管理PyTorch1.8.0FaceNet运行基础OpenVINO2021.4模型加速(可选)SSD Caffe模型res10_300x300高精度人脸检测 一、环境准备与项目搭建 1.1 M…

【AI News | 20250714】每日AI进展

AI Repos 1、All-Model-Chat All Model Chat 是一款为Google Gemini API家族设计的网页聊天应用&#xff0c;支持多模态输入&#xff08;图片、音频、PDF等&#xff09;和多种模型&#xff08;如Gemini Flash、Imagen&#xff09;。它提供了丰富的自定义功能&#xff0c;包括高…

C 语言(二)

主要包括变量与常量、数据类型、存储方式、数制转换以及字符处理等内容一、变量与常量在 C 语言中&#xff0c;变量是用来存储数据的命名空间&#xff0c;它会在内存中分配地址。例如&#xff1a;int i; i 12345; 其中 i 是变量&#xff0c;12345 是常量。常量表示在程序运行过…

原型继承(prototypal inheritance)的工作原理

这是一个非常常见的 JavaScript 问题。所有 JS 对象都有一个__proto__属性&#xff0c;指向它的原型对象。当试图访问一个对象的属性时&#xff0c;如果没有在该对象上找到&#xff0c;它还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#xff0c;依次层层向上搜索&…

OpenCV 视频处理与摄像头操作详解

1. 引言大家都来写OpenCV&#x1f60a;&#xff0c;学的好开心&#xff01;2. 视频基础与OpenCV简介2.1 视频的定义视频&#xff08;Video&#xff09;是由一系列静态图像&#xff08;帧&#xff09;以一定速率连续播放形成的动态影像。其本质是利用人眼的视觉暂留效应&#xf…

Agentic AI 的威胁与缓解措施

原文&#xff1a;https://www.aigl.blog/content/files/2025/04/Agentic-AI—Threats-and-Mitigations.pdf AI Agent 的定义 1. 定义与基础 智能代理&#xff08;Agent&#xff09;的定义&#xff1a; 智能代理是一种能够感知环境、进行推理、做出决策并自主采取行动以实现特定…

ArrayList列表解析

ArrayList集合 ArrayList 的底层是数组队列&#xff0c;相当于动态数组。与 Java 中的数组相比&#xff0c;它的容量能动态增长。在添加大量元素前&#xff0c;应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 ArrayList 继承…

《恋与深空》中龙和蛇分别是谁的代表

在《恋与深空》宏大而神秘的世界观中&#xff0c;每一个符号都蕴含着深意。当玩家们热议“龙”和“蛇”这两种强大而古老的生物究竟代表着谁时&#xff0c;所有的线索都默契地指向了同一个名字——秦彻。 他不仅是力量与权威的象征“恶龙”&#xff0c;也是背负着宿命与纠葛的“…

gitignore添加后如何生效?

清除 Git 缓存&#xff1a; git rm -r --cached .添加文件到 Git&#xff1a;git add .使用 git commit 命令提交这些更改git commit -m "Update .gitignore"

多尺度频率辅助类 Mamba 线性注意力模块(MFM),融合频域和空域特征,提升多尺度、复杂场景下的目标检测能力

在伪装物体检测领域&#xff0c;现有方法大多依赖空间局部特征&#xff0c;难以有效捕捉全局信息&#xff0c;而 Transformer 类方法虽能建模长距离依赖关系&#xff0c;却存在计算成本高、网络结构复杂的问题。同时&#xff0c;频域特征虽具备全局建模能力&#xff0c;可频繁的…

Dify的默认端口怎么修改

1.定位配置文件 在 Dify 的安装目录中找到 .env 文件&#xff08;通常位于 docker/ 子目录下&#xff09;。此文件定义了 Docker 容器的环境变量&#xff0c;包括端口配置。 2.调整端口参数 修改以下两个关键配置项&#xff1a; # Docker 容器内部 Nginx 监听的端口&#xf…

Go内存分配

图解Go语言内存分配 - 知乎 go内置运行时&#xff0c;采用了自主管理&#xff0c;实现更好的内存使用模式&#xff0c;不需要每次内存分配都进行系统调用 采用TCMalloc算法&#xff1a;把内存分为多级管理&#xff0c;从而降低锁的粒度 将可用的堆内存采用二级分配的方式进行…