Эх сурвалжийг харах

Добавлен скрипт для резервного копирования

Denis V. Dedkov 10 сар өмнө
parent
commit
4c32faa92f
1 өөрчлөгдсөн 67 нэмэгдсэн , 0 устгасан
  1. 67 0
      backup.sh

+ 67 - 0
backup.sh

@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# Проверка аргументов
+if [ "$#" -ne 3 ]; then
+    echo "Использование: $0 <NAS_IP_OR_HOSTNAME> <NAS_USER> <NAS_PASSWORD>"
+    exit 1
+fi
+
+NAS_ADDR="$1"
+REMOTE_USER="$2"
+NAS_PASS="$3"
+BACKUP_LIST_FILE="backup_folders.txt"  # Файл со списком папок для бэкапа
+EXCLUDE_LIST_FILE="exclude_list.txt"   # Файл с исключениями
+REMOTE_BASE_DIR="NetBackup/$(hostname)"  # Базовая папка на NAS (с именем текущего ПК)
+
+# Проверка наличия файла со списком папок
+if [ ! -f "$BACKUP_LIST_FILE" ]; then
+    echo "Файл '$BACKUP_LIST_FILE' не найден!"
+    exit 1
+fi
+
+# Проверка файла исключений (если есть)
+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 -avz --relative $RSYNC_EXCLUDE "$folder" "$remote_path"
+
+    if [ $? -eq 0 ]; then
+        echo "Успешно: $folder"
+    else
+        echo "Ошибка при синхронизации: $folder"
+    fi
+
+done < "$BACKUP_LIST_FILE"
+
+echo "Резервное копирование завершено."