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