#!/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