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

This commit is contained in:
2025-04-10 10:33:36 +02:00
parent 2c0ce6715d
commit 4c32faa92f

67
backup.sh Executable file
View File

@@ -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 "Резервное копирование завершено."