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
相关产品推荐
相关产品推荐

