Назад | Перейти на главную страницу

Убедитесь, что сетевые диски подключены перед выполнением резервного копирования

Я пытаюсь написать сценарий резервного копирования, который можно развернуть на многих разных серверах Linux, некоторые из которых монтируют сетевые диски, как описано в / etc / fstab. Я хочу, чтобы мой сценарий мог видеть, были ли отключены какие-либо сетевые диски перед резервным копированием, чтобы гарантировать, что они не останутся несохраненными. Есть ли способ надежно проверить это в сценарии bash?

Объединение test команда с -d флаг и проверка, существует ли монтирование для этого вопрос:

#!/bin/bash
mount="/fileserver"
if mountpoint -q "$mount" && test -d /path/to/share; then
cp -ru /path/to/files /. -t /path/to/share
fi

Отредактировано в соответствии с комментарием Майкла Хэмптона.

Один из способов, который приходит на ум, - перебрать список точек монтирования и посмотреть, сколько файлов находится под каждой из них. Значение 1, вероятно, означает, что файловая система не смонтирована (и присутствует только сам каталог). Однако эта стратегия не сработает, если точки монтирования вложены. Под «вложенными» я подразумеваю такие точки монтирования, как:

/mnt/server1/share1
/mnt/server1/share1/share2
/mnt/server1/share1/share2/share3

Я также видел этот сбой, когда кто-то / какой-то процесс не знал, что монтирования там нет, и все равно копировал файлы в него, и файлы были записаны в базовую файловую систему, а не в файловую систему, которая должна была быть смонтирована там.

Но если ваша структура более «плоская» (или может быть сделали квартира для резервного копирования), например:

/mnt/server1/share1
/mnt/server1/share2
/mnt/server2/share3

затем:

MNTS="/mnt/server1/share1 /mnt/server1/share2 /mnt/server2/share3"
for DIR in $MNTS; do
  N=$(find $DIR | head -10 | wc -l)
  if [ $N -eq 1 ]; then
    print "%s appears to not be mounted\n" "$DIR"
  else
    # back it up
  fi
done

Другой метод, который может немного зависеть от ОС или, по крайней мере, может быть изменен, если mountизменения выходного формата, заключается в том, чтобы выполнить проверку грубой силы mountвывод. Предполагая, что ваш mount всегда использует пробелы и никогда не использует табуляции, тогда:

MNTS="/mnt/server1/share1 /mnt/server1/share2 /mnt/server2/share3"
for DIR in $MNTS; do
  if ! mount | grep -F " $DIR "; then
    print "%s appears to not be mounted\n" "$DIR"
  else
    # back it up
  fi
done