From 7de816c870d0c6c68e9ee3500e4bbe061c901448 Mon Sep 17 00:00:00 2001 From: "Denis V. Dedkov" Date: Wed, 7 May 2025 08:21:19 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=B7=20=D0=B1=D1=8D?= =?UTF-8?q?=D0=BA=D0=B0=D0=BF=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- restore.sh | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 restore.sh 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