You need to enable JavaScript to run this app. Bash分区脚本如何在/dev/sdc已挂载时跳过重复分区操作避免报错
优惠活动
大模型
产品
解决方案
定价
更多

Bash分区脚本如何在/dev/sdc已挂载时跳过重复分区操作避免报错

可重复执行的磁盘初始化脚本改造方案

核心逻辑为全流程前置状态检测:每一步操作前先校验当前环境状态,仅对未完成的环节执行操作,已生效的环节直接跳过,从根源避免设备占用类报错。

具体改造要点

  • 挂载状态前置检测
    用mountpoint -q /opt/app做静默校验,只要目标挂载点已处于正常挂载状态,直接退出脚本,完全不触碰磁盘分区、格式化、fstab写入类操作。
  • 半完成状态兜底处理
    若检测到目标挂载点未挂载,但磁盘存在残留挂载、旧分区签名,先静默执行卸载、磁盘签名清理操作,避免parted识别到设备正在占用而报错。
  • fstab重复写入防护
    追加fstab条目之前,先通过grep检测/etc/fstab中是否已存在/opt/app对应的挂载配置,不存在时才追加,防止重复执行导致同一配置堆积、引发开机挂载异常。
  • 操作有效性校验
    执行格式化前先检测/dev/sdc1块设备是否存在,避免对不存在的分区执行操作。

改造后可重复执行的完整脚本

#!/bin/bash
# 前置判断:/opt/app已挂载则直接退出
if mountpoint -q /opt/app; then
    echo "目标挂载点/opt/app已就绪,跳过所有磁盘操作"
    exit 0
fi

# 清理残留占用状态
umount /dev/sdc1 2>/dev/null
wipefs -a /dev/sdc 2>/dev/null

# 执行磁盘分区
parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
# 触发内核刷新分区表
partprobe /dev/sdc

# 校验分区存在后执行格式化
if [ -b /dev/sdc1 ]; then
    mkfs.xfs -f /dev/sdc1
fi

# 创建挂载目录
mkdir -p /opt/app

# 避免重复写入fstab条目
if ! grep -qE "\s/opt/app\s" /etc/fstab; then
    echo "/dev/sdc1    /opt/app    xfs     defaults   0  1"  >> /etc/fstab
fi

# 执行全量挂载并输出状态
mount -a
lsblk
df -Th

关键效果说明

  • 首次执行脚本时,会按流程完成分区、格式化、挂载、fstab配置的全链路操作
  • 重复执行时,只要检测到/opt/app已正常挂载,会直接跳过所有磁盘写操作,不会触发设备占用、重复格式化类报错
  • 若脚本之前因异常中断(比如完成分区格式化但未成功挂载),二次执行时会自动清理残留状态、完成剩余配置,不会中断报错

内容的提问来源于stack exchange,提问作者Anonymuss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 23:24:03