Я пытаюсь написать сценарий резервного копирования, который можно развернуть на многих разных серверах 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