Распределение вывода на максимальное количество столбцов

Я предлагаю использовать 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
2
09.07.2015, 17:07
0 ответов

Теги

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