restore.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/bin/bash
  2. # Скрипт полного зеркального восстановления из бэкапа
  3. # ВНИМАНИЕ: Этот скрипт перезапишет существующие файлы!
  4. if [ "$#" -ne 3 ]; then
  5. echo "Использование: $0 <NAS_IP> <NAS_USER> <NAS_PASSWORD>"
  6. echo "ВНИМАНИЕ: Все файлы будут заменены версиями из бэкапа!"
  7. exit 1
  8. fi
  9. NAS_ADDR="$1"
  10. REMOTE_USER="$2"
  11. NAS_PASS="$3"
  12. REMOTE_BASE_DIR="NetBackup/$(hostname)"
  13. # Проверка доступности NAS
  14. if ! ping -c 1 -W 2 "$NAS_ADDR" &> /dev/null; then
  15. echo "Ошибка: NAS ($NAS_ADDR) недоступен" >&2
  16. exit 1
  17. fi
  18. if ! rsync "$NAS_ADDR::" &>/dev/null; then
  19. echo "Устройство не является rsync-сервером" >&2
  20. exit 1
  21. fi
  22. # Проверка sshpass
  23. if ! command -v sshpass &>/dev/null; then
  24. echo "Установите 'sshpass' для автоматической передачи пароля (sudo apt install sshpass)"
  25. exit 1
  26. fi
  27. echo "=== Анализ изменений ==="
  28. sshpass -p "$NAS_PASS" rsync -avun \
  29. --no-owner --no-group \
  30. "$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR/" / | grep -v "/$"
  31. # Подтверждение опасной операции
  32. read -p "ВНИМАНИЕ: Это ЗЕРКАЛЬНОЕ восстановление перезапишет файлы! Продолжить? [y/N] " confirm
  33. if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
  34. echo "Восстановление отменено"
  35. exit 0
  36. fi
  37. echo "=== Начато зеркальное восстановление ==="
  38. echo "Источник: $REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR"
  39. echo "Назначение: / (корень файловой системы)"
  40. # Команда зеркального восстановления
  41. sshpass -p "$NAS_PASS" rsync -avu \
  42. --progress \
  43. --no-owner --no-group \
  44. --omit-dir-times \
  45. --exclude=/. \
  46. "$REMOTE_USER@$NAS_ADDR::$REMOTE_BASE_DIR/" /
  47. if [ $? -eq 0 ]; then
  48. echo "=== Зеркальное восстановление успешно завершено ==="
  49. else
  50. echo "=== Ошибка восстановления! ===" >&2
  51. exit 1
  52. fi