如何配置磁盘阵列 mdadm管理RAID

发布时间 - 2025-08-18 00:00:00    点击率:

首先安装并配置mdadm工具,使用sudo mdadm --create创建raid 1、raid 5或raid 10阵列,1. 创建后用mkfs.ext4格式化/dev/md0,2. 挂载到/mnt/raid并添加到/etc/fstab实现开机自动挂载,3. 通过mdadm --detail --scan保存配置至/etc/mdadm/mdadm.conf并更新initramfs,4. 使用mdadm --detail和cat /proc/mdstat查看阵列状态,5. 可设置mailaddr实现邮件告警,6. 故障时可使用--fail、--remove、--add命令更换磁盘,7. 删除阵列时需先umount、stop并zero-superblock清除元数据,所有操作均需提前备份数据并确认磁盘无重要信息,配置完成后应定期检查状态以确保数据安全。

配置磁盘阵列并使用

mdadm
管理 RAID 是 Linux 系统中实现数据冗余和性能提升的常用方式。下面以常见的 RAID 1 和 RAID 5 为例,介绍如何使用
mdadm
工具创建、管理 RAID 阵列。


一、准备工作

  1. 确认系统支持 mdadm
    大多数现代 Linux 发行版默认安装

    mdadm
    ,若未安装可使用以下命令安装:

    # Ubuntu/Debian
    sudo apt update
    sudo apt install mdadm
    
    # CentOS/RHEL/Rocky Linux
    sudo yum install mdadm
    # 或使用 dnf
    sudo dnf install mdadm
  2. 准备磁盘
    使用额外的硬盘或分区(不包含重要数据),例如:

    • /dev/sdb
    • /dev/sdc
    • /dev/sdd

    可用

    lsblk
    fdisk -l
    查看磁盘信息。

  3. 备份数据
    RAID 创建过程会清除磁盘数据,操作前请确保数据已备份。


二、创建 RAID 阵列

1. 创建 RAID 1(镜像)

适用于两块磁盘,数据完全镜像,提高安全性。

sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

参数说明:

  • --create /dev/md0
    :创建名为 md0 的阵列设备
  • --level=1
    :RAID 级别为 1
  • --raid-devices=2
    :使用 2 块设备
  • /dev/sdb /dev/sdc
    :参与阵列的磁盘

2. 创建 RAID 5(带奇偶校验条带化)

至少需要三块磁盘,兼顾性能和冗余。

sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
注意:RAID 5 在一块磁盘故障时仍可运行,但重建过程较慢,建议在重要场景使用 RAID 6 或 RAID 10。

3. 创建 RAID 10(嵌套 RAID)

需至少四块磁盘,结合 RAID 1 和 RAID 0 的优势。

sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

三、格式化并挂载 RAID 设备

创建完成后,对

/dev/md0
进行格式化并挂载:

# 格式化为 ext4 文件系统
sudo mkfs.ext4 /dev/md0

# 创建挂载点并挂载
sudo mkdir /mnt/raid
sudo mount /dev/md0 /mnt/raid

# 设置开机自动挂载(可选)
echo '/dev/md0 /mnt/raid ext4 defaults 0 0' | sudo tee -a /etc/fstab

四、保存 RAID 配置

mdadm
配置需保存到配置文件,以便系统重启后能自动识别阵列。

# 保存当前阵列配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

# 更新 initramfs(重要,否则可能无法在启动时识别阵列)
sudo update-initramfs -u

Debian/Ubuntu 使用

update-initramfs
,CentOS/RHEL 使用
dracut -f


五、查看与监控 RAID 状态

  1. 查看阵列详细信息

    sudo mdadm --detail /dev/md0

    输出包括:

    • RAID 级别
    • 成员磁盘状态(如
      active sync
      表示正常)
    • 是否降级(
      degraded
    • 同步进度
  2. 查看所有阵列

    cat /proc/mdstat

    示例输出:

    Personalities : [raid1] [raid5]
    md0 : active raid1 sdc[1] sdb[0]
          1048576 blocks super 1.2 [2/2] [UU]

    [UU]
    表示两个磁盘都正常,
    [_U]
    表示有磁盘缺失。

  3. 监控 RAID 状态(可配置邮件告警)

    编辑

    /etc/mdadm/mdadm.conf
    ,添加邮件通知:

    MAILADDR your-email@example.com

    系统会在磁盘故障等事件发生时发送邮件。


六、管理与维护

1. 模拟磁盘故障测试

# 标记某磁盘为故障(测试用)
sudo mdadm --fail /dev/md0 /dev/sdb

# 查看状态,应显示磁盘已失效
sudo mdadm --detail /dev/md0

2. 移除故障磁盘

sudo mdadm --remove /dev/md0 /dev/sdb

3. 添加新磁盘替换

# 添加新磁盘(如 /dev/sdb 已更换)
sudo mdadm --add /dev/md0 /dev/sdb

阵列将自动开始重建。

4. 停止并删除 RAID

# 卸载文件系统
sudo umount /mnt/raid

# 停止阵列
sudo mdadm --stop /dev/md0

# 清除超级块(每个成员磁盘执行)
sudo mdadm --zero-superblock /dev/sdb
sudo mdadm --zero-superblock /dev/sdc

注意:

zero-superblock
会清除磁盘上的 RAID 元数据,务必确认磁盘无其他用途。


七、常见问题

  • RAID 同步很慢?
    可通过调整内核参数加快同步速度:

    echo 100000 > /proc/sys/dev/raid/speed_limit_min
  • 启动时无法识别阵列?
    确保已运行

    update-initramfs -u
    并检查
    /etc/mdadm/mdadm.conf
    是否包含阵列信息。

  • 磁盘顺序变化导致识别失败?
    使用 UUID 或

    /dev/disk/by-id/
    路径更稳定。


基本上就这些。

mdadm
虽然命令行操作稍显复杂,但稳定可靠,适合在服务器环境中长期使用。关键是配置后保存设置并定期检查状态,避免在磁盘真正故障时措手不及。


# linux  # centos  # 工具  # ai  # 事件  # ubuntu  # debian  # 镜像  # 文件系统  # 启动时  # 定期检查  # 适用于  # 会在  # 自动识别  # 可选  # 为例  # 可通过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Laravel如何使用Collections进行数据处理?(实用方法示例)  LinuxShell函数封装方法_脚本复用设计思路【教程】  北京专业网站制作设计师招聘,北京白云观官方网站?  简单实现Android文件上传  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何在企业微信快速生成手机电脑官网?  Laravel如何实现API版本控制_Laravel版本化API设计方案  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  如何在IIS中配置站点IP、端口及主机头?  Bootstrap CSS布局之列表  浅述节点的创建及常见功能的实现  Python正则表达式进阶教程_复杂匹配与分组替换解析  详解vue.js组件化开发实践  Laravel如何实现事件和监听器?(Event & Listener实战)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Android中AutoCompleteTextView自动提示  BootStrap整体框架之基础布局组件  JavaScript如何实现路由_前端路由原理是什么  WEB开发之注册页面验证码倒计时代码的实现  如何选择PHP开源工具快速搭建网站?  详解jQuery中基本的动画方法  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  大同网页,大同瑞慈医院官网?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何在橙子建站中快速调整背景颜色?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何在腾讯云免费申请建站?  Android okhttputils现在进度显示实例代码  韩国服务器如何优化跨境访问实现高效连接?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何用狗爹虚拟主机快速搭建网站?  原生JS实现图片轮播切换效果  如何快速建站并高效导出源代码?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Bootstrap整体框架之JavaScript插件架构  创业网站制作流程,创业网站可靠吗?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何基于云服务器快速搭建个人网站?  Mybatis 中的insertOrUpdate操作  Laravel如何配置Horizon来管理队列?(安装和使用)  网站建设整体流程解析,建站其实很容易!  如何在局域网内绑定自建网站域名?