Frost의 작동 방식

Frost는 폴더의 스냅샷을 만들고, 파일을 암호화된 청크로 나눈 뒤, 스토리지에 아직 없는 청크만 업로드합니다.

#요약

  1. 스캔. Frost는 폴더를 살펴보며 제외 목록에 있는 항목은 건너뜁니다. 지난 백업 이후 크기와 수정 시각이 바뀌지 않은 파일은 Frost 캐시에 필요한 청크가 모두 기록되어 있는 한 다시 읽지 않습니다.
  2. 분할. 바뀐 파일은 약 1 MiB 크기의 청크로 나뉩니다. 나누는 위치는 내용에 따라 정해지므로, 큰 파일의 중간을 수정해도 그 주변의 청크만 바뀝니다.
  3. 암호화. 새 청크는 압축해서 작아지면 압축한 다음, 키로 암호화합니다.
  4. 업로드. 스토리지에 아직 없는 청크만 업로드합니다.
  5. 스냅샷 저장. Frost는 파일 목록과 각 파일을 이루는 청크 정보를 새 스냅샷으로 저장합니다.
  6. 점검. Frost는 청크를 무작위로 몇 개 내려받아 확인합니다.

#스냅샷

스냅샷은 백업이 실행된 순간의 폴더를 기록한 것입니다. 모든 파일과 폴더의 내용, 권한, 수정 시각이 들어 있습니다. 각 스냅샷은 그 자체로 완전하므로, 다른 스냅샷 없이도 어느 것이든 복원할 수 있습니다.

스냅샷끼리는 청크를 공유합니다. 1년 동안 바뀌지 않은 파일은 몇 개의 스냅샷에 들어 있든 한 번만 저장됩니다. 그래서 스냅샷을 많이 남겨도 추가로 드는 공간은 거의 없습니다.

지난 백업 이후 아무것도 바뀌지 않았다면 Frost는 새 스냅샷을 저장하지 않고, 폴더가 이미 백업되어 있다고 알려 줍니다.

스냅샷 ID는 maple-absurd-3f1c처럼 단어 두 개와 문자 네 개로 이루어집니다. ID나 시각으로 스냅샷을 고르는 방법은 파일 복원에서 설명합니다.

Frost는 아직 오래된 스냅샷을 삭제하지 못하므로 모든 스냅샷이 스토리지에 남습니다. 스토리지에 있는 Frost 폴더에서 객체를 직접 삭제하거나, 객체를 만료시키는 규칙을 추가하지 마세요. 스냅샷끼리 청크를 공유하므로, 객체 하나만 지워도 많은 스냅샷이 망가질 수 있습니다.

#키

frost init은 컴퓨터에서 무작위 256비트 키를 만들고, 이를 24단어 복구 문구로 보여 줍니다. 키는 절대 컴퓨터 밖으로 나가지 않습니다. Frost가 업로드하는 모든 내용은 파일 이름과 폴더 구조를 포함해 먼저 이 키로 암호화됩니다.

복구 문구와 스토리지 접근 권한을 모두 가진 사람은 백업을 읽을 수 있습니다. 복구 문구가 없으면 누구도 읽을 수 없습니다. 자세한 내용은 복구 문구를 참고하세요.

#리포지토리

Frost는 스토리지의 폴더 하나에 백업을 보관하며, 이 폴더를 리포지토리라고 부릅니다. 리포지토리에는 네 종류의 객체가 있습니다.

객체 내용
frost.repo 리포지토리 ID와 형식 버전
chunks/ 암호화된 파일 데이터와 파일 목록
snapshots/ 스냅샷마다 하나씩 있는 작은 암호화 헤더. 생성 시각, 컴퓨터, 대상 폴더가 들어 있습니다
trees/ 각 스냅샷의 파일 목록이 어떤 청크에 들어 있는지

객체 이름은 무작위처럼 보이는 ID라서, 스토리지를 운영하는 쪽은 파일 이름을 볼 수 없습니다. 스토리지가 볼 수 있는 내용은 보안 및 개인정보 보호에 정리되어 있습니다.

셀프 호스팅 서버나 로컬 드라이브에서는 각 객체가 리포지토리 폴더 안에 그 이름의 파일로 저장됩니다. S3 버킷에서는 같은 이름의 객체가 되므로, 리포지토리를 이들 사이에서 복사할 수 있습니다. 자세한 내용은 백업 옮기기를 참고하세요.

#로컬 캐시

Frost는 이미 업로드한 내용을 컴퓨터의 캐시 폴더에 기록해 둡니다. 덕분에 백업할 때마다 스토리지 전체를 조회하지 않아도 됩니다. 이 기록은 일주일에 한 번, 또는 스토리지 위치가 바뀌거나 검사에서 데이터 누락을 발견한 뒤에 스토리지와 대조합니다.

캐시는 없어져도 괜찮습니다. 캐시가 사라지면 다음 백업에서 스토리지를 바탕으로 다시 만들고 파일을 다시 읽습니다. 복원에는 캐시가 전혀 필요하지 않습니다.

#백그라운드 서비스 없음

Frost는 백그라운드에서 계속 실행되지 않습니다. 자동 백업은 운영 체제 스케줄러(launchd, systemd, cron, 작업 스케줄러)에 등록된 평범한 작업입니다. 이 작업이 Frost를 실행해 백업을 한 번 하고 종료합니다. 자세한 내용은 자동 백업을 참고하세요.

#스스로 점검

스냅샷을 저장한 백업이 끝나면, Frost는 청크를 무작위로 몇 개 내려받아 각 청크가 복호화되고 ID와 일치하는지 확인합니다. 새 내용이 없는 백업에서는 마지막 점검이 하루 이상 지났을 때만 다시 점검합니다. 자세한 내용은 백업 확인을 참고하세요.