Files
backup/backup.sh

81 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Проверка аргументов
if [ "$#" -ne 5 ]; then
echo "Использование: $0 <NAS_IP_OR_HOSTNAME> <NAS_USER> <NAS_PASSWORD> <BACKUP_LIST_FILE> <EXCLUDE_LIST_FILE>"
exit 1
fi
NAS_ADDR="$1"
REMOTE_USER="$2"
NAS_PASS="$3"
BACKUP_LIST_FILE="$4" # Файл со списком папок для бэкапа
EXCLUDE_LIST_FILE="$5" # Файл с исключениями
REMOTE_BASE_DIR="NetBackup/$(hostname)" # Базовая папка на NAS (с именем текущего ПК)
# Проверка доступности NAS в локальной сети
if ! ping -c 1 -W 2 "$NAS_ADDR" &> /dev/null; then
echo "Ошибка: NAS ($NAS_ADDR) недоступен. Возможно, вы не в локальной сети." >&2
exit 1
fi
if ! rsync "$NAS_ADDR::" &>/dev/null; then
echo "Устройство не является rsync-сервером" >&2
exit 1
fi
# Проверка наличия файла со списком папок
if [ ! -f "$BACKUP_LIST_FILE" ]; then
echo "Файл '$BACKUP_LIST_FILE' не найден!"
exit 1
fi
echo "*** Резервное копирование начинается. ***"
# Проверка файла исключений (если есть)
RSYNC_EXCLUDE=""
if [ -f "$EXCLUDE_LIST_FILE" ]; then
RSYNC_EXCLUDE="--exclude-from=$EXCLUDE_LIST_FILE"
echo "Используются исключения из '$EXCLUDE_LIST_FILE'"
else
echo "Файл исключений '$EXCLUDE_LIST_FILE' не найден, копируем всё."
fi
# Чтение списка папок для бэкапа
while IFS= read -r folder; do
# Пропускаем пустые строки и комментарии (начинающиеся с #)
if [[ -z "$folder" || "$folder" == \#* ]]; then
continue
fi
folder="${folder/#\~/$HOME}"
# Проверка наличия файла
if [ ! -f "$BACKUP_LIST_FILE" ]; then
echo "Файл '$BACKUP_LIST_FILE' не найден!" >&2
exit 1
fi
echo "Синхронизация '$folder' на NAS..."
# Формируем путь на удалённом сервере
remote_path="$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR"
# Выполняем rsync с SSH-паролем (используем sshpass для автоматизации)
if ! command -v sshpass &> /dev/null; then
echo "Установите 'sshpass' для автоматической передачи пароля (sudo apt install sshpass)"
exit 1
fi
sshpass -p "$NAS_PASS" rsync -az --relative $RSYNC_EXCLUDE "$folder" "$remote_path"
if [ $? -eq 0 ]; then
echo "Успешно: $folder"
else
echo "Ошибка при синхронизации: $folder"
fi
done < "$BACKUP_LIST_FILE"
echo "*** Резервное копирование завершено. ***"