왜 백업이 필요한가

Immich에 사진을 올리기 시작하면서 DB가 날아가면 복구할 방법이 없다는 게 갑자기 걱정됐다. 사진 원본은 /mnt/data에 있으니 파일은 살아있더라도 Immich DB가 날아가면 앨범, 태그, 얼굴 인식 데이터가 전부 사라진다.

백업 전략은 단순하게 잡았다.

대상 방법 위치
Immich DB pg_dumpall /backup/immich_db_YYYYMMDD.sql
사진 원본 추후 rsync 추가 예정 외장하드 구매 후

OS SSD에 204GB 여유가 있어서 DB 덤프는 우선 거기에 보관한다.


백업 디렉토리 생성

sudo mkdir -p /backup
sudo chown your-username:your-username /backup

chown으로 소유권을 넘겨줘야 한다. 처음에 sudo mkdir만 하고 스크립트를 실행했더니 아래 에러가 났다.

cannot create /backup/immich_db_20260329.sql: Permission denied

/backup 디렉토리 생성 및 권한 설정


백업 스크립트 작성

mkdir ~/backup_script
vi ~/backup_script/postgres_immich_backup.sh
#!/bin/bash

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)

mkdir -p $BACKUP_DIR

# DB 덤프 백업
echo "pg_dump 시작..."
docker exec immich_postgres pg_dumpall -U postgres > $BACKUP_DIR/immich_db_$DATE.sql

# 7일치만 보관 (오래된 것 삭제)
find $BACKUP_DIR -name "immich_db_*.sql" -mtime +7 -delete

echo "백업 완료: $DATE"

백업 스크립트 작성

docker exec으로 immich_postgres 컨테이너 안에서 pg_dumpall을 실행해서 결과를 파일로 저장한다. 컨테이너가 실행 중이면 별도 설치 없이 바로 쓸 수 있다.

find ... -mtime +7 -delete 로 7일이 지난 백업 파일은 자동으로 삭제한다. 무한정 쌓이면 디스크가 금방 찬다.

실행 권한 부여:

chmod +x ~/backup_script/postgres_immich_backup.sh

테스트 실행

sh ~/backup_script/postgres_immich_backup.sh
pg_dump 시작...
백업 완료: 20260329

백업 파일 확인:

ls -lh /backup/

cron 등록

매일 새벽 3시에 자동 실행되도록 cron에 등록한다.

crontab -e

아래 내용 추가:

0 3 * * * /home/your-username/backup_script/postgres_immich_backup.sh >> /backup/backup.log 2>&1

crontab 설정

등록 확인:

crontab -l

로그는 /backup/backup.log에 쌓이니 문제가 생기면 여기서 확인하면 된다.


7일 보관 정책

find $BACKUP_DIR -name "immich_db_*.sql" -mtime +7 -delete

스크립트 안에 이 한 줄이 있어서 7일이 지난 백업 파일은 매일 자동으로 정리된다. 7일치 보관 시 필요한 용량은 DB 크기에 따라 다른데, Immich DB는 사진 수가 늘어도 원본 파일은 /mnt/data에 따로 있으니 DB 자체는 수백 MB 수준이다.


추후 개선 계획

외장하드를 구매하면 rsync로 사진 원본도 자동 백업할 예정이다.

# 라이브러리 rsync (외장하드 마운트 후 추가)
rsync -av --delete /mnt/data/immich/photos/ /mnt/backup/immich/photos/

정리

  • docker exec으로 컨테이너 안의 pg_dumpall을 실행하면 별도 PostgreSQL 설치 없이 백업 가능
  • /backup 디렉토리는 chown으로 소유권 설정 필수
  • find -mtime +7 -delete로 오래된 백업 자동 정리
  • cron 로그를 파일로 남겨두면 백업 실패 여부를 나중에 확인할 수 있다

다음 편에서는 TLP + thinkfan으로 CPU 온도를 85°C에서 55°C로 낮추고, swappiness 튜닝으로 불필요한 Swap 사용을 줄인 과정을 다룬다.