Добавлен скрипт для восстановления из бэкапа

This commit is contained in:
2025-05-07 08:21:19 +02:00
parent 50ed8e8455
commit 7de816c870

63
restore.sh Executable file
View File

@@ -0,0 +1,63 @@
#!/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