如何在Linux利用Mdadm --Wait指令在Shell脚本中挂起进程等待RAID阵列同步任务完成再执行后续部署

风伟吖_7694

风伟吖_7694

2026-05-20

837人浏览

原创

mdadm --wait 是阻塞至 RAID 设备初始化完成的操作选项,不等待同步结束;真正等待同步 100% 完成需结合 /proc/mdstat 轮询与超时机制。

如何在linux利用mdadm --wait指令在shell脚本中挂起进程等待raid阵列同步任务完成再执行后续部署

mdadm --wait 并不是一个独立指令,而是 mdadm 的一个**操作模式选项**(即 --wait),必须配合特定的 RAID 操作(如 --assemble 或 --create)使用。它本身**不会主动“挂起脚本等待同步完成”**,但可被巧妙用于阻塞脚本执行,直到阵列进入“clean”或“active”状态(即同步启动并初步就绪)。真正等待同步**结束**,需结合轮询 /proc/mdstat 或使用 mdadm --wait --scan 配合超时机制。

理解 --wait 的实际行为

mdadm --wait 的作用是:让当前命令**阻塞,直到指定设备被内核识别为 md 设备并完成初始化(如加载元数据、启动同步线程)**,但它不等待同步进度条走完(即不等 resync = 100%)。例如:

  • mdadm --assemble --wait /dev/md0 /dev/sdb1 /dev/sdc1:阻塞直到 /dev/md0 成功激活(哪怕同步才刚开始);
  • mdadm --create --wait /dev/md1 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1:阻塞直到 RAID1 创建完成并开始同步。

此时阵列状态已是 active 或 active, degraded,但 cat /proc/mdstat 中仍显示 [=>....................] resync = 12.5% (12345678/98765432) finish=12.3min speed=115432K/sec —— 同步远未结束。

可靠等待同步完成的推荐做法

要在 Shell 脚本中**真正等到同步 100% 完成**,应采用以下组合策略:

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 先用 mdadm --assemble --wait 确保阵列已成功激活;
  • 再循环检查 /proc/mdstat,确认无 resync、recover、reshape 等进行中状态,且状态为 clean 或 active(无进度条);
  • 加入超时保护,避免无限等待(如 RAID 卡故障或磁盘异常)。

实用脚本示例(含超时与状态校验)

以下是一个生产环境可用的等待函数:

# 等待指定 md 设备同步完成(最多 3600 秒)
wait_md_sync() {
    local mddev="$1"
    local timeout=${2:-3600}  # 默认 1 小时
    local elapsed=0
<pre class="brush:php;toolbar:false;"># 第一步:确保阵列已激活(--wait 阻塞到激活)
echo "Waiting for $mddev to activate..."
if ! mdadm --detail "$mddev" >/dev/null 2>&1; then
    echo "Error: $mddev not found or not assembled."
    return 1
fi

# 第二步:轮询 /proc/mdstat 直到无同步活动
while [ $elapsed -lt $timeout ]; do
    # 检查是否仍在 resync/recover/reshape
    if ! grep -q "$mddev.*resync\|$mddev.*recover\|$mddev.*reshape" /proc/mdstat 2>/dev/null; then
        # 再确认状态字段不含 [U_](表示所有设备在线且干净)
        if grep -q "$mddev.*active.*clean\|$mddev.*active.*idle" /proc/mdstat 2>/dev/null; then
            echo "$mddev sync completed."
            return 0
        fi
    fi
    sleep 10
    elapsed=$((elapsed + 10))
done

echo "Timeout waiting for $mddev sync (>$timeout seconds). Check /proc/mdstat manually."
return 1

}

在部署前调用

wait_md_sync /dev/md0 || exit 1 echo "Proceeding with application deployment..."

... 后续部署命令(mkfs, mount, copy files, start service 等)

补充说明与注意事项

  • mdadm --wait --scan 可用于等待所有配置在 /etc/mdadm.conf 中的阵列激活,但同样不等同步完成;
  • RAID5/6 同步可能耗时数小时,脚本中务必设合理超时(如按磁盘容量预估:1TB ≈ 30–90 分钟);
  • 某些内核版本中,新创建的 RAID 可能短暂出现 inactive 状态,建议用 mdadm --detail 辅助判断;
  • 若使用 LVM on RAID,应在 RAID 同步完成后、再执行 pvscan && vgchange -ay,否则 LV 可能无法激活。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux shell脚本

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

920

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2872

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

956

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

849

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2596

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4852

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

767

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习