63 lines
2.2 KiB
Bash
63 lines
2.2 KiB
Bash
#!/bin/bash
|
||
# Выгрузка /mnt/backup в Yandex Object Storage (S3) через restic (без каталога photos).
|
||
# Фото бэкапятся отдельно: backup-restic-yandex-photos.sh.
|
||
# Запускать на хосте 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"
|
||
# Исключаем служебные каталоги и photos (фото — отдельный бэкап)
|
||
EXCLUDE_OPTS=(--exclude="$BACKUP_PATH/lost+found" --exclude="$BACKUP_PATH/photos")
|
||
|
||
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 (excl. photos) -> $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."
|