如何使 umount 等待,直到设备不忙?

如何使 umount 等待,直到设备不忙?

我有一个 bash 脚本文件,在其中执行一堆命令。

#!/bin/bash
umount /media/hdd1
umount /media/hdd2
something1
something2

但由于文件后面的命令与已卸载的硬盘一起工作,因此我需要确保卸载成功后才能继续。

我当然可以检查卸载是否失败并退出 1,但这并不理想。

所以基本上,我想要做的是以某种方式让 umount 命令等待,直到设备不忙,然后卸载 HDD 并继续执行脚本。

因此它的工作原理如下:

#!/bin/bash
umount /media/hdd1 # Device umounted without any problems continuing the script..
umount /media/hdd2 # Device is busy! Let's just sit around and wait until it isn't... let's say 5 minutes later whatever was accessing that HDD isn't anymore and the umount umounts the HDD and the script continues
something1
something2

谢谢。

答案1

我认为以下脚本可以完成这项工作。它应该以sudo(超级用户权限)运行。

有一个带循环doer的函数while,它检查mountpoint设备是否安装在指定的挂载点,如果是,则尝试用 卸载它umount。当逻辑变量busy为假时,while循环结束,脚本可以开始“做一些事情”。

#!/bin/bash


function doer() {

busy=true
while $busy
do
 if mountpoint -q "$1"
 then
  umount "$1" 2> /dev/null
  if [ $? -eq 0 ]
  then
   busy=false  # umount successful
  else
   echo -n '.'  # output to show that the script is alive
   sleep 5      # 5 seconds for testing, modify to 300 seconds later on
  fi
 else
  busy=false  # not mounted
 fi
done
}

########################

# main

########################

doer /media/hdd1
doer /media/hdd2

echo ''
echo 'doing something1'
echo 'doing something2'

相关内容