Как заставить umount ожидать, пока устройство не занято?

У меня есть файл сценария удара, где я выполняю набор команд.

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

Но так как команды позже в файле работают с umounted жестким диском, я должен удостовериться, что umount успешен перед продолжением.

Я могу, конечно, проверить, выходят ли неудавшиеся umount и просто 1, но это не идеально.

Так в основном то, что я хотел бы сделать, так или иначе заставляют команду umount ожидать, пока устройство не занято и затем umount жесткий диск, и продолжите выполнять сценарий.

Это таким образом работало бы как это:

#!/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

Спасибо.

3
задан 14 October 2018 в 11:40

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'
3
ответ дан 1 December 2019 в 16:16

Другие вопросы по тегам:

Похожие вопросы: