81 lines
2.9 KiB
Bash
Executable File
81 lines
2.9 KiB
Bash
Executable File
#!/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 "*** Резервное копирование завершено. ***"
|