64 lines
2.2 KiB
Bash
Executable File
64 lines
2.2 KiB
Bash
Executable File
#!/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
|