如何在Bash脚本挂载磁盘前检查重复的Disk LABEL?
磁盘挂载前检测重复Disk LABEL的Bash脚本改进方案
需求是在Bash脚本中实现磁盘挂载前检查是否存在重复的Disk LABEL:当连接两个带有相同标签的外接磁盘时,向用户发出警告并要求移除重复标签的磁盘。现有脚本无法区分同标签磁盘,挂载时会出现问题,需要改进。
原脚本代码:
if mountpoint -q "${JOB_MOUNT_DIR}"; then echo " ${JOB_MOUNT_HD_LABEL} já está montado e está pronto para uso" else echo "O dispositivo ""${JOB_MOUNT_HD_LABEL}"" não está montado no diretório ""${JOB_MOUNT_DIR}""" echo "Deseja montar o diretório?" echo -n "Qual sua opção? [s/n]: " read -r "opcao" if [ "$opcao" == "s" ]; then mkdir -p "${JOB_MOUNT_DIR}/${JOB_MOUNT_HD_LABEL}" mount -L "${JOB_MOUNT_HD_LABEL}" "${JOB_MOUNT_DIR}/${JOB_MOUNT_HD_LABEL}" exit 0 else echo "Disco não irá ser montado" exit 0 fi fi exit 0
改进方案
核心思路是先通过blkid命令统计对应LABEL的磁盘数量,若数量大于1则判定存在重复标签,直接警告用户;若数量正常,再执行原有挂载逻辑。
改进后的脚本:
# 统计对应LABEL的磁盘设备数量 DEVICE_COUNT=$(blkid -t LABEL="${JOB_MOUNT_HD_LABEL}" -o device | wc -l) # 检查是否存在重复标签的磁盘 if [ "$DEVICE_COUNT" -gt 1 ]; then echo "AVISO: Encontrado múltiplos discos com o rótulo ""${JOB_MOUNT_HD_LABEL}""!" echo "Por favor, remova um dos discos com rótulo duplicado e tente novamente." exit 1 fi # 原有的挂载检查逻辑 if mountpoint -q "${JOB_MOUNT_DIR}"; then echo " ${JOB_MOUNT_HD_LABEL} já está montado e está pronto para uso" else echo "O dispositivo ""${JOB_MOUNT_HD_LABEL}"" não está montado no diretório ""${JOB_MOUNT_DIR}""" echo "Deseja montar o diretório?" echo -n "Qual sua opção? [s/n]: " read -r opcao if [ "$opcao" == "s" ]; then mkdir -p "${JOB_MOUNT_DIR}/${JOB_MOUNT_HD_LABEL}" mount -L "${JOB_MOUNT_HD_LABEL}" "${JOB_MOUNT_DIR}/${JOB_MOUNT_HD_LABEL}" exit 0 else echo "Disco não irá ser montado" exit 0 fi fi exit 0
关键说明
blkid -t LABEL="${JOB_MOUNT_HD_LABEL}" -o device:列出所有带有指定LABEL的磁盘设备路径wc -l:统计设备数量,若大于1则判定为重复标签- 检测到重复时直接退出并提示用户,避免后续挂载操作出现不可预期的问题
- 完全保留原有脚本的挂载逻辑,仅在前置步骤增加重复标签检测
内容的提问来源于stack exchange,提问作者Peter Buffon
相关产品推荐
相关产品推荐

