diff --git a/restore.sh b/restore.sh new file mode 100755 index 0000000..3c44aed --- /dev/null +++ b/restore.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# Скрипт полного зеркального восстановления из бэкапа +# ВНИМАНИЕ: Этот скрипт перезапишет существующие файлы! + +if [ "$#" -ne 3 ]; then + echo "Использование: $0 " + 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