제로 데이터 손실로 14000장의 사진을 ZimaCube 2로 이전한 방법 — Immich 마이그레이션 가이드

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

💡 커뮤니티 스포트라이트: u/Ambitious_Shallot_79, r/minilab

당신에겐 사진 라이브러리가 있습니다. 수년간의 추억. 정성껏 정리한 앨범들. 태그한 얼굴들. 가족과 공유한 링크들.

그런 다음 NAS를 업그레이드하고 — 파일만 옮기는 것으로는 충분하지 않다는 걸 깨닫게 됩니다. 데이터베이스 없이는 모든 앨범, 얼굴 태그, 당신이 정성껏 만든 추억을 잃게 됩니다. 사진은 있지만 조직화는 사라집니다.

DIY ZimaOS 서버에서 ZimaCube 2로 14,505장 사진과 925개 비디오 — 총 134 GiB — 를 옮겼습니다. 모든 앨범이 살아남았고, 모든 얼굴 태그가 그대로 유지되었습니다. 모든 공유 링크도 여전히 작동합니다.

제가 어떻게 했는지, 거의 잘못될 뻔한 점, 그리고 제 구형 환경에서 불가능했던 ZimaCube 2가 가져온 점을 정확히 설명합니다.

왜 Immich인가, 왜 지금인가

Immich는 이유가 있어 최고의 셀프 호스팅 사진 솔루션이 되었습니다. 구글 포토 수준의 기능 — 얼굴 인식, 의미 검색, 자동 백업 (휴대폰에서), 공유 앨범 — 을 제공하면서도 사진을 다른 서버에 보내지 않습니다.

하지만 Immich는 PostgreSQL에 그 핵심을 저장합니다. 데이터베이스는 앨범, 얼굴 벡터, 인물 클러스터, 스마트 검색용 CLIP 임베딩, 그리고 라이브러리를 당신만의 것으로 만드는 모든 메타데이터를 담고 있습니다. 데이터베이스 없이 파일만 옮기면 사진 폴더만 있고 빈 Immich 인스턴스가 됩니다.

이 마이그레이션의 규칙은 하나였습니다: 데이터 손실 제로. 새 서버가 검증될 때까지 기존 서버는 삭제하지 않았습니다.

Immich가 실제로 저장하는 것(그리고 그 이유)

파일을 건드리기 전에, 정확히 무엇을 이동해야 하는지 계획했습니다:

구성 요소 위치 내용 이동해야 하나요?
pgdata /DATA/AppData/immich/pgdata 전체 PostgreSQL — 앨범, 얼굴, 인물, 메타데이터 ✅ 중요
model-cache /DATA/AppData/immich/model-cache 다운로드된 CLIP/얼굴 인식 모델 ✅ 재다운로드 방지
사진 라이브러리 /DATA/Gallery/immich 14,505장 사진 + 925개 비디오 + 썸네일 (134 GiB) ✅ 실제 미디어
자동 백업 /DATA/Gallery/immich/backups 최근 14일간의 일일 데이터베이스 스냅샷 💡 이미 존재함
🎁 pgdata 디렉터리 없이 사진 파일만 이동하면 모든 사진은 얻을 수 있지만 앨범, 얼굴 태그, 인물, 추억, 공유 링크는 전혀 포함되지 않습니다. Immich는 PostgreSQL을 진실의 원천으로 간주합니다. 두 가지는 반드시 함께 이동해야 합니다.

Immich는 또한 매일 오전 2시에 자동으로 데이터베이스 백업을 생성하며, 백업 디렉터리에 최근 14개를 보관합니다. 수동 덤프를 실행하기 전에 최근 자동 백업이 이미 있는지 확인하세요.

방법: ZimaOS 파일 앱 (LAN 복사)

두 머신 모두 같은 LAN에서 ZimaOS를 실행합니다. 그래서 내장된 파일 앱을 사용해 직접 LAN 전송이 가능했습니다 — 외장 드라이브, SCP 명령어, 중간 저장소 불필요.

1단계: 소스 머신 마운트

ZimaCube 2에서 파일 앱을 열고 → + 저장소 추가 → LAN 저장소 → 소스 머신 로컬 IP 입력 후 인증하세요. 이제 소스 머신 파일 시스템이 ZimaCube 2에서 탐색 가능한 저장소로 나타납니다.

2단계: 소스에서 Immich 중지

사람들이 건너뛰고 후회하는 단계입니다.복사 전에 Immich를 중지하세요. 실행 중인 PostgreSQL 인스턴스는 계속 쓰기 작업을 하므로 데이터베이스가 일관되고 플러시된 상태여야 합니다. 소스 머신에서: ZimaOS 앱 스토어 → Immich → 중지.

3단계: 두 디렉터리 모두 복사

ZimaCube 2 파일 앱에서 마운트된 소스로 이동하여 선택하세요:

소스 경로 ZimaCube 2의 대상 경로
/DATA/AppData/immich /DATA/AppData/immich
/DATA/Gallery/immich /DATA/Gallery/immich

두 위치를 모두 선택하고 마이그레이션을 누르세요. 선택: 대상에서 덮어쓰기 및 소스에서 원본 유지 — 검증 전까지 소스를 삭제하지 마세요.

ZimaCube 2의 2.5GbE 연결을 통해 약 10~15분 만에 134 GiB 전송. 이전 DIY 서버는 1GbE에 묶여 있었기 때문에 같은 전송에 30~40분이 걸렸을 것입니다. 이는 사양표에는 나타나지 않지만 데이터를 이동할 때마다 중요한 실제 차이입니다.

4단계: ZimaCube 2에 Immich 설치

ZimaOS 앱 스토어를 열고 Immich를 검색하세요. 중요 경고: 앱 스토어에는 여러 Immich 변형이 표시될 수 있습니다. 소스 머신에서 사용 중인 정확히 동일한 변형을 설치해야 합니다:

Immich (공식 ZimaOS/CasaOS 앱) — 이전에 사용하던 것이 이것이라면 사용하세요

BigBearCasaOS Immich — 다른 docker-compose 변수, 다른 postgres 자격 증명, 다른 데이터베이스 이름 — 공식 앱에서 직접 pgdata 복사와 호환되지 않음

🔑 docker-compose 변수 — postgres 사용자 이름, 비밀번호, 데이터베이스 이름, 네트워크 모드 — 가 앱 정의에 내장되어 있습니다. 소스와 대상 앱 변형 간의 불일치는 Immich가 복원된 데이터베이스에 연결하지 못하게 합니다. 이것이 Immich 마이그레이션에서 가장 흔한 실패 원인입니다.

설치 후 즉시 앱을 시작하지 마세요. Immich는 첫 실행 시 기존 pgdata 디렉터리를 감지하여 새 빈 데이터베이스를 초기화하지 않고 연결합니다.

NAS 설정 중 ZimaOS / CasaOS 앱 스토어에서 'immich' 애플리케이션 검색

5단계: 기존 자격 증명으로 로그인

http://192.168.x.x:2283에서 Immich를 열고 원본 인스턴스와 동일한 사용자 이름과 비밀번호로 로그인하세요. 전체 라이브러리 — 앨범, 얼굴, 사람, 설정 — 이 그대로 유지됩니다.

성공적인 데이터베이스 마이그레이션 후 Immich 애플리케이션 환영 화면과 시작 버튼

6단계: 작업 대기열 확인

프로필 → 관리 → 작업 대기열로 이동하세요. pgdata 마이그레이션 후 데이터베이스에는 이미 이전에 처리된 모든 결과가 포함되어 있으므로 대부분의 대기열은 활성: 0 / 대기: 0으로 표시됩니다.

대기열 중 누락 항목 수가 표시되면, 누락 버튼을 클릭하여 처리되지 않은 자산만 처리하세요:

대기열 실행 시기 누락
썸네일 생성 사진 미리보기가 빈 화면으로 표시되면
메타데이터 추출 자산에 GPS/위치/날짜 정보가 없으면
스마트 검색 시맨틱 검색 결과가 없으면
얼굴 인식 얼굴 데이터가 불완전해 보인다면

마이그레이션 통계

지표
이전된 사진 14,505
이전된 비디오 925
총 데이터 134 GiB
전송 시간 (2.5GbE) 약 12분
앨범 보존 모두
얼굴 태그 보존 모두
공유 링크 보존 모두
데이터 손실 제로

왜 ZimaCube 2가 이 작업을 가치 있게 만들었는가

나는 단순히 같은 경험을 위해 마이그레이션한 것이 아닙니다. ZimaCube 2는 내가 사용하던 구형 DIY ZimaOS 박스가 따라올 수 없던 세 가지 업그레이드를 제공합니다:

2.5GbE 전송. 사진 라이브러리는 계속 커집니다. 모든 전체 백업, 대용량 가져오기, 마이그레이션은 표준 기가비트 대비 2.5배의 대역폭 혜택을 누립니다. ZimaCube 2의 듀얼 2.5GbE 덕분에 백업을 포화 상태로 만들면서도 네트워크는 원활하게 유지됩니다.

데이터베이스용 NVMe 스토리지. Immich PostgreSQL 데이터베이스는 회전식 하드디스크보다 NVMe에서 훨씬 뛰어난 성능을 발휘합니다. 썸네일 생성, 스마트 검색 쿼리, 얼굴 인식 등 모든 작업이 pgdata에서 읽어옵니다. ZimaCube 2 NVMe 풀에서는 HDD에서 지연되던 데이터베이스 작업이 이제 즉시 처리됩니다.

6베이 확장성. 오늘은 134 GiB. 내년은 어떨까요? ZimaCube 2는 6개의 SATA 베이와 7번째 베이의 4개 M.2 슬롯을 갖추고 있어 이 사진 라이브러리는 수년간 저장 공간 한계 없이 성장할 수 있습니다.

IceWhale ZimaCube 2 6베이 NAS, 고성능 셀프 호스팅 스토리지를 위한 전면 핫스왑 드라이브 베이 표시

포토 라이브러리를 ZimaCube 2로 마이그레이션하기 →

셀프 호스팅 사진 설정을 구축 중이신가요? 개인 클라우드 스토리지 장치 가이드, ZimaCube 2에서의 Docker & CI/CD 심층 분석, 그리고 ZimaCube 2 Pro 개봉기를 읽어보세요.

자주 묻는 질문

앨범과 얼굴 태그를 잃지 않고 Immich를 ZimaCube 2로 마이그레이션할 수 있나요?

— 하지만 사진 파일과 pgdata 디렉터리(PostgreSQL 데이터베이스)를 모두 복사해야 합니다. 데이터베이스는 모든 앨범, 얼굴 벡터, 사람 클러스터, 메타데이터를 저장합니다. 사진만 옮기면 조직화되지 않은 파일만 얻습니다. 두 디렉터리를 함께 복사해야 라이브러리가 온전하게 유지됩니다.

Immich 데이터를 ZimaCube 2로 가장 빠르게 전송하는 방법은 무엇인가요?

두 머신이 같은 LAN에 있고 ZimaOS를 실행 중이라면, 내장된 파일 앱의 LAN 스토리지 마운트를 사용하세요. ZimaCube 2의 2.5GbE 연결을 통해 134 GiB를 약 10~15분 만에 전송할 수 있습니다. 더 큰 라이브러리나 다른 네트워크에 있는 머신은 외장 USB 드라이브가 다음으로 좋은 옵션입니다.

마이그레이션 시 Immich 앱 스토어 버전이 중요한가요?

네 — 매우 중요합니다. ZimaOS 앱 스토어에는 여러 Immich 변형(공식 버전 vs BigBearCasaOS)이 표시될 수 있습니다. 이들은 서로 다른 docker-compose 변수—postgres 자격 증명, 데이터베이스 이름, 네트워크 설정을 사용하므로 호환되지 않습니다. 소스 머신과 정확히 같은 변형을 설치해야 복원된 데이터베이스가 연결됩니다.

복사 전에 소스에서 Immich를 중지해야 하나요?

네. 실행 중인 PostgreSQL 인스턴스는 지속적으로 기록합니다. 라이브 데이터베이스를 복사하면 일관성 없는 상태가 될 위험이 있습니다. 소스 머신에서 Immich를 중지한 후 폴더를 복사하고 대상에서 시작하세요. 소스 머신은 마이그레이션 확인 전까지 꺼두거나 백업용으로 켜둘 수 있습니다.

Immich가 ZimaCube 2에서 필요한 저장 공간은 얼마인가요?

포토 라이브러리 크기와 PostgreSQL 데이터베이스(라이브러리와 함께 성장), 썸네일 캐시 및 트랜스코딩된 비디오 버전을 위한 공간을 계획하세요. 14,500장의 사진이 있는 134 GiB 라이브러리는 오버헤드를 포함해 대략 150~160 GiB를 사용합니다. ZimaCube 2의 6개 SATA 베이는 확장 공간을 제공합니다.

지마 캠페인 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.