왜 백업이 필요한가
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

백업 스크립트 작성
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 -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 사용을 줄인 과정을 다룬다.