Проверьте, что сеть работает, перед копированием.

Вопрос или проблема

Я работаю с сетью 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: Интеграция проверки в процесс резервного копирования

Эту проверку можно интегрировать в ваш процесс резервного копирования. Обозначим последовательность шагов:

  1. Проверка сети: Выполните вышеуказанный скрипт в начале вашего задания cron.
  2. Выполнение резервного копирования: Если сеть доступна, продолжайте с копированием файлов на сервер.
  3. Обработка ошибок: Если сеть недоступна, завершите процесс с выводом сообщения об ошибке, как показано выше.

Пример скрипта резервного копирования

Вот пример, включающий проверку сети перед выполнением резервного копирования:

#!/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 и улучшит общую эффективность системы. Убедитесь, что скрипт корректно интегрирован в ваши автоматизированные задачи, чтобы минимизировать риски при резервировании данных.

Оцените материал
Добавить комментарий

Капча загружается...