Автоматически приостановите объем удач после задержки

Это более устойчиво:

TMPFILE=tmp.$$
mv -- "$file1" $TMPFILE && mv -- "$file2" "$file1" && mv -- $TMPFILE "$file2"

заключение в кавычки для предотвращения проблем с пробелами в именах файлов, оно использует tmp файл, и && делают следующую команду выполненной, только если предыдущее закончилось успешно.

2
20.01.2013, 16:51
3 ответа

Намерение luksSetup должен использоваться, когда устройство все еще используется, но Вы хотите временно заблокировать все доступы к нему, пока пароль не вводится из внешнего источника. Таким образом не имеет большого смысла только звонить luksSetup когда устройство не использовано: если это не использовано, закройте его с luksClose.

Нет никакого способа атомарно осуществить это, устройство не используется, и звонить luksSuspend. То, что можно сделать, если Вы действительно хотите приостановить устройство, но только если оно не используется, является вызовом luksSuspend, затем сверьтесь fuser или lsof для любого смонтированного файла в файловой системе это находится на шифруемом устройстве; если файловая система используется, звонить luksResume сразу. Это действительно имеет маленький шанс требования, чтобы Вы ввели пароль.

Чтобы обнаружить, неактивна ли файловая система, я рекомендую осуществить контрейлерные перевозки на существующей утилите автоматического монтирования, такой как autofs.

1
27.01.2020, 22:23

Я разработал ряд сценариев, которые работают обоснованно хорошо, но все еще ищут другие предложения, если у кого-либо есть кто-либо.

То, что я сделал, должно записать один сценарий, который приостанавливает объем удач, тот, который отправляет a wall сообщение, предупреждая всех пользователей (на терминалах), что это собирается быть приостановленным, и то, которое говорит этому сохранять это открытым (путем записи в файл в зарезервированном пути в /var/run). Я использовал крон для выполнения автоприостановить скрипта каждое полчаса и "аварийного" сценария 2 за минуты до того (он только выпускает предупреждение, если объем на самом деле открыт). Если кто-либо интересуется этими сценариями, я могу отправить их или по крайней мере больше деталей о них.

0
27.01.2020, 22:23

Я предлагаю использовать lsof , чтобы определить, есть ли какие-либо запущенные процессы, и передать идентификаторы PID в pidstat для анализа операций ввода-вывода. Оттуда мы узнаем, безопасно и желательно ли приостановить работу, в зависимости от того, обращаются ли какие-либо процессы к базовой файловой системе тома LUKS.

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

#!/bin/bash

if [ ! $1 ] ; then
  echo "Usage: $0 device-path"
  exit 1
fi

DEVICE=$1

# Collect PIDs that are running on LUKS filesystem
pids=$(lsof $DEVICE | tail -n+2 | awk '{ print $2 }')

SUSPEND=1
if [ "$pids" ] ; then
  # Get the IO statistics of each process running from LUKS device
  pidactivity=$(echo -E "$pids" | tr "\n" "," | xargs pidstat -d -p)

  # Pull out only the IO fields of the pidstat response
  pidio=$(echo -E "$pidactivity" | tail -n+4 | awk '{ print $5 " " $6 }')

  # If there is IO going on for any of these PIDs, we should suspend
  for io in "$pidio" ; do
    for stat in $io ; do
      if [ `echo "$stat > 0" | bc` -gt 0 ] ; then
        SUSPEND=0
        break 2
      fi
    done
  done
fi

if [ $SUSPEND -eq 1 ] ; then
  cryptsetup luksSuspend $DEVICE
fi
0
27.01.2020, 22:23

Теги

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