#!/bin/bash # Логический бэкап PostgreSQL (Immich) с VM 200. # Запускать на хосте Proxmox под root. Требуется SSH без пароля: root@host → admin@192.168.1.200 # (ssh-copy-id или ключ в ~/.ssh). # # На VM 200 должен быть установлен скрипт /opt/immich/scripts/backup-db.sh (см. immich-pgdump-remote.sh). # Результат: /mnt/backup/databases/vm200-immich/immich-db-YYYYMMDD-HHMM.sql.gz # set -e VM_SSH="admin@192.168.1.200" REMOTE_SCRIPT="/opt/immich/scripts/backup-db.sh" BACKUP_DIR="/mnt/backup/databases/vm200-immich" RETENTION_DAYS=14 if [ "$(id -u)" -ne 0 ]; then echo "Запускайте под root." exit 1 fi mkdir -p "$BACKUP_DIR" DATE=$(date +%Y%m%d-%H%M) OUTPUT="$BACKUP_DIR/immich-db-$DATE.sql.gz" if ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$VM_SSH" "test -x $REMOTE_SCRIPT"; then ssh -o ConnectTimeout=30 "$VM_SSH" "sudo $REMOTE_SCRIPT" | gzip > "$OUTPUT" else echo "На VM 200 не найден скрипт $REMOTE_SCRIPT. Скопируйте туда scripts/immich-pgdump-remote.sh и сделайте исполняемым." exit 1 fi if [ -s "$OUTPUT" ]; then echo "Создан: $OUTPUT ($(du -h "$OUTPUT" | cut -f1))" else echo "Ошибка: дамп пустой или не создан." rm -f "$OUTPUT" exit 1 fi # Удалить дампы старше RETENTION_DAYS find "$BACKUP_DIR" -name 'immich-db-*.sql.gz' -mtime +$RETENTION_DAYS -delete