| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/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 "*** Резервное копирование завершено. ***"
|