Вопрос или проблема
Я работаю с сетью NFS под управлением Ubuntu 22.04. Я использую cron/FreeFileSync для резервного копирования на сервер, но иногда, если сеть отключена по какой-либо причине, резервное копирование записывается в /media/servername/backupdirectory в корневом каталоге. Это не сильно беспокоило с вращающимися дисками, но я беспокоюсь, что запись нескольких тысяч файлов на SSD, а затем их многократное удаление в конечном итоге повлияет на срок службы SSD. Есть ли способ предотвратить выполнение резервного копирования, если сеть отключена?
Некоторый bash-код в качестве примера:
# цвета, setaf/setab fg/bg
CALERT="$(tput setab 1)"
CERROR="$(tput setaf 9)"
CNORM="$(tput sgr0)"
COK="$(tput setaf 4)$(tput setab 2)"
net="$(ip r | sed -nre '/default/s/.*dev ([a-z0-9]+).*/\1/p')"
linkup="$(ip link show $net | grep ' UP ')"
if [ -z "$linkup" ] ; then
echo -e "\n${CERROR} Нет сети? $CNORM"
else
echo -e "\n${COK}Сеть в порядке $CNORM $linkup"
fi
Попытка определить, к какой категории принадлежит ip
…
$ apt-file search '/ip' | grep -E '/ip$'
bash-completion: /usr/share/bash-completion/completions/ip
iproute2: /bin/ip
iproute2: /sbin/ip
netctl: /usr/lib/netctl/ip
pcp: /etc/pcp/pmlogconf/tools/ip
pcp: /var/lib/pcp/config/pmlogconf/tools/ip
vlan: /etc/network/if-up.d/ip
$ which ip
/usr/sbin/ip
$ ip --version
Опция "-version" неизвестна, попробуйте "ip -help".
Ответ или решение
Проверка доступности сети перед копированием на NFS сервер
При выполнении задач резервного копирования в окружениях с использованием NFS (Network File System) на Ubuntu 22.04, важно обеспечить корректное завершение процессов в случае недоступности сети. Автоматизированные задачи, особенно те, которые выполняются с помощью cron
и таких инструментов, как FreeFileSync, могут создавать серьезные проблемы при попытке записи на сервер, если сеть временно недоступна. В этом ответе мы рассмотрим, как проверить состояние сети перед выполнением резервного копирования и предотвратить записи в локальные директории, что может негативно сказаться на производительности SSD.
Шаг 1: Проверка состояния сети
Для проверки доступности сети вы можете использовать утилиту ip
из пакета iproute2
. Ниже представлен пример скрипта на Bash, который выполняет необходимую проверку:
#!/bin/bash
# Определения цветов для вывода
CALERT="$(tput setab 1)" # Красный фон
CERROR="$(tput setaf 9)" # Красный текст
CNORM="$(tput sgr0)" # Нормальный стиль текста
COK="$(tput setaf 4)$(tput setab 2)" # Синий текст на зеленом фоне
# Получение имени сетевого интерфейса по умолчанию
net="$(ip r | sed -nre '/default/s/.*dev ([a-z0-9]+).*/\1/p')"
# Проверка состояния интерфейса
linkup="$(ip link show $net | grep ' UP ')"
# Условие для проверки доступности сети
if [ -z "$linkup" ]; then
echo -e "\n${CERROR} Нет сети? $CNORM"
exit 1
else
echo -e "\n${COK} Сеть доступна $CNORM $linkup"
fi
Шаг 2: Интеграция проверки в процесс резервного копирования
Эту проверку можно интегрировать в ваш процесс резервного копирования. Обозначим последовательность шагов:
- Проверка сети: Выполните вышеуказанный скрипт в начале вашего задания
cron
. - Выполнение резервного копирования: Если сеть доступна, продолжайте с копированием файлов на сервер.
- Обработка ошибок: Если сеть недоступна, завершите процесс с выводом сообщения об ошибке, как показано выше.
Пример скрипта резервного копирования
Вот пример, включающий проверку сети перед выполнением резервного копирования:
#!/bin/bash
# Проверка сети
net="$(ip r | sed -nre '/default/s/.*dev ([a-z0-9]+).*/\1/p')"
linkup="$(ip link show $net | grep ' UP ')"
if [ -z "$linkup" ]; then
echo -e "\n${CERROR} Нет сети! Резервное копирование отменено. $CNORM"
exit 1
else
echo -e "\n${COK} Сеть доступна. Начинаем резервное копирование. $CNORM"
# Команда резервного копирования (пример)
rsync -av /path/to/source /media/servername/backupdirectory
if [ $? -eq 0 ]; then
echo -e "${COK} Резервное копирование завершено успешно. $CNORM"
else
echo -e "${CERROR} Ошибка во время резервного копирования! $CNORM"
fi
fi
Заключение
Проверка доступности сети перед началом резервного копирования является критически важным шагом для обеспечения целостности данных и защиты от ненужных операций записи на локальные системы хранения. Используя предложенные примеры скриптов, вы сможете избежать ненужных циклов записи и удаления, что, в свою очередь, продлит срок службы SSD и улучшит общую эффективность системы. Убедитесь, что скрипт корректно интегрирован в ваши автоматизированные задачи, чтобы минимизировать риски при резервировании данных.