|
|
@@ -0,0 +1,63 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+# Скрипт полного зеркального восстановления из бэкапа
|
|
|
+# ВНИМАНИЕ: Этот скрипт перезапишет существующие файлы!
|
|
|
+
|
|
|
+if [ "$#" -ne 3 ]; then
|
|
|
+ echo "Использование: $0 <NAS_IP> <NAS_USER> <NAS_PASSWORD>"
|
|
|
+ echo "ВНИМАНИЕ: Все файлы будут заменены версиями из бэкапа!"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+NAS_ADDR="$1"
|
|
|
+REMOTE_USER="$2"
|
|
|
+NAS_PASS="$3"
|
|
|
+REMOTE_BASE_DIR="NetBackup/$(hostname)"
|
|
|
+
|
|
|
+# Проверка доступности 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
|
|
|
+
|
|
|
+# Проверка sshpass
|
|
|
+if ! command -v sshpass &>/dev/null; then
|
|
|
+ echo "Установите 'sshpass' для автоматической передачи пароля (sudo apt install sshpass)"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+echo "=== Анализ изменений ==="
|
|
|
+sshpass -p "$NAS_PASS" rsync -avun \
|
|
|
+ --no-owner --no-group \
|
|
|
+ "$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR/" / | grep -v "/$"
|
|
|
+
|
|
|
+# Подтверждение опасной операции
|
|
|
+read -p "ВНИМАНИЕ: Это ЗЕРКАЛЬНОЕ восстановление перезапишет файлы! Продолжить? [y/N] " confirm
|
|
|
+if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
|
+ echo "Восстановление отменено"
|
|
|
+ exit 0
|
|
|
+fi
|
|
|
+
|
|
|
+echo "=== Начато зеркальное восстановление ==="
|
|
|
+echo "Источник: $REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR"
|
|
|
+echo "Назначение: / (корень файловой системы)"
|
|
|
+
|
|
|
+# Команда зеркального восстановления
|
|
|
+sshpass -p "$NAS_PASS" rsync -avu \
|
|
|
+ --progress \
|
|
|
+ --no-owner --no-group \
|
|
|
+ --omit-dir-times \
|
|
|
+ --exclude=/. \
|
|
|
+ "$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR/" /
|
|
|
+
|
|
|
+if [ $? -eq 0 ]; then
|
|
|
+ echo "=== Зеркальное восстановление успешно завершено ==="
|
|
|
+else
|
|
|
+ echo "=== Ошибка восстановления! ===" >&2
|
|
|
+ exit 1
|
|
|
+fi
|