#!/bin/bash # Выгрузка /mnt/backup в Yandex Object Storage (S3) через restic. # Запускать на хосте Proxmox под root. # Перед первым запуском: установить restic, создать /root/.restic-yandex.env и /root/.restic-password, выполнить restic init. # Cron: 0 4 * * * (04:00, после окна 01:00–03:30; 05:00 зарезервировано под перезагрузку). set -e ENV_FILE="/root/.restic-yandex.env" BACKUP_PATH="/mnt/backup" # Исключаем служебные каталоги EXCLUDE_OPTS=(--exclude="$BACKUP_PATH/lost+found") if [ "$(id -u)" -ne 0 ]; then echo "Запускайте под root." exit 1 fi if [ ! -f "$ENV_FILE" ]; then echo "Нет файла $ENV_FILE. Скопируйте restic-yandex-env.example и задайте ключи." exit 1 fi # shellcheck source=/dev/null source "$ENV_FILE" for var in RESTIC_REPOSITORY AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY; do if [ -z "${!var}" ]; then echo "В $ENV_FILE не задано: $var" exit 1 fi done if [ -z "$RESTIC_PASSWORD_FILE" ]; then RESTIC_PASSWORD_FILE="/root/.restic-password" fi if [ ! -f "$RESTIC_PASSWORD_FILE" ]; then echo "Файл с паролем репозитория не найден: $RESTIC_PASSWORD_FILE. Создайте его и выполните restic init." exit 1 fi export AWS_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEY export RESTIC_PASSWORD_FILE export RESTIC_REPOSITORY export AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-ru-central1}" if ! command -v restic >/dev/null 2>&1; then echo "restic не установлен. Установите: apt install restic." exit 1 fi echo "Restic backup: $BACKUP_PATH -> $RESTIC_REPOSITORY" restic backup "$BACKUP_PATH" "${EXCLUDE_OPTS[@]}" --quiet echo "Restic forget (retention 3 daily, 2 weekly, 2 monthly)..." restic forget --keep-daily 3 --keep-weekly 2 --keep-monthly 2 --prune --quiet echo "Restic prune..." restic prune --quiet echo "Restic backup done."