# 백업
`frost backup`은 폴더를 지금 바로 백업합니다. 지난 백업 이후 바뀐 부분만 업로드합니다.
## 백업 실행하기
```sh
frost backup
```
Frost는 무엇이 바뀌었는지, 얼마나 업로드했는지, 표본 검사 결과가 어떤지 보여 줍니다.
```text
┌ backup sftp://me@nas.local/~/frost
│
│ changes 3 added, 1 changed
│ files 1,204 (2.1 GB)
│ new data 14.2 MB in 9 chunks (9.8 MB uploaded after compression)
│ verified ok, 21 random objects re-downloaded and checked
│
└ Saved snapshot maple-absurd-3f1c
```
파일의 내용, 크기, 권한, 수정 시각 중 하나라도 바뀌면 변경된 파일로 칩니다. 폴더의 수정 시각만 바뀐 경우는 세지 않습니다. 임시 파일이 수시로 바꾸기 때문입니다.
아무것도 바뀌지 않았다면 Frost는 새 스냅샷을 저장하지 않습니다.
```text
┌ backup sftp://me@nas.local/~/frost
│
│ files 1,204 (2.1 GB)
│ verified ok 3h ago, 21 objects checked
│
└ Already backed up. No changes detected since snapshot maple-absurd-3f1c, saved 3h ago.
```
Permafrost 계정, 서버의 디스크, 로컬 드라이브가 거의 찼을 때처럼 스토리지에 주의가 필요하면, 백업이 끝날 때 `storage` 경고가 표시됩니다.
자동 백업을 켜 두면 이 명령어를 직접 실행할 일은 거의 없습니다. 자세한 내용은 [자동 백업](#scheduling)을 참고하세요.
## 백업 미리 보기
```sh
frost backup --dry-run
```
시험 실행은 새 데이터를 업로드할 파일과 그 합계를 보여 주지만, 아무것도 업로드하지 않고 스냅샷도 저장하지 않습니다. `-n`은 `--dry-run`의 짧은 형태입니다.
## 옵션
| 옵션 | 동작 |
| --- | --- |
| `-n`, `--dry-run` | 무엇을 업로드할지 보여 주기만 하고 실제로는 업로드하지 않습니다 |
| `--path
` | 평소 폴더 대신 이 폴더를 백업합니다. 여러 번 써서 폴더를 더 추가할 수 있습니다 |
| `--exclude ` | 이번에만 이 패턴도 제외합니다. 여러 번 써서 패턴을 더 추가할 수 있습니다 |
| `--no-verify` | 백업 후 표본 검사를 건너뜁니다 |
매번 백업할 폴더를 바꾸려면 `frost init`을 다시 실행하거나 [설정 항목](#settings)을 참고하세요.
## 백업 대상
Frost는 일반 파일, 폴더, 심볼릭 링크를 권한, 수정 시각과 함께 백업합니다.
- 심볼릭 링크는 가리키는 파일이 아니라 링크 자체로 저장됩니다.
- 하드 링크로 연결된 파일은 서로 별개의 파일로 백업되고 복원됩니다.
Frost는 다음 항목을 백업하지 않습니다.
- 제외 목록에 있는 모든 항목. 자세한 내용은 [파일 제외](#excluding-files)를 참고하세요.
- 소켓, 장치, 파이프.
- 파일 소유자, ACL, 확장 속성.
- macOS에서 iCloud가 온라인에만 보관하는 파일. Frost는 이런 파일을 내려받지 않고 건너뛴 뒤 목록에 표시합니다.
- 중단된 복원이 남긴 `.frost-partial-...` 파일.
## 문제가 생겼을 때
| 상황 | Frost의 처리 |
| --- | --- |
| 권한이 없거나, 백업 중에 삭제되었거나, iCloud에만 있어서 파일이나 폴더를 읽을 수 없음 | 건너뛰고 목록에 표시합니다. 스냅샷은 그대로 저장되며, `frost status`에 건너뛴 항목 수가 표시됩니다 |
| 목록에 있는 폴더가 없음(연결하지 않은 드라이브의 폴더 등) | 그 폴더는 건너뛰고 나머지를 백업합니다. `frost backup`과 `frost status`에 없는 폴더가 표시됩니다 |
| 목록의 폴더가 하나도 없거나, 있지만 전혀 읽을 수 없는 폴더가 있음 | 백업 전체를 실패로 처리합니다. 아무것도 저장하지 않았는데 성공한 것처럼 보이는 일을 막기 위해서입니다 |
| 사용 중인 데이터베이스, 실행 중인 가상 머신의 디스크, 내려받는 중인 파일처럼, Frost가 읽는 동안 파일이 바뀜 | 백업이 끝날 때 다시 읽습니다. 그래도 계속 바뀌고 있으면 스냅샷에는 이전 사본을 남기고, Frost가 그 파일을 목록에 표시합니다. 한 번도 온전하게 백업되지 못한 파일은 건너뜁니다 |
Frost는 파일 시스템이나 데이터베이스의 스냅샷 기능을 쓰지 않습니다. 늘 사용 중인 파일은 그 파일을 쓰는 프로그램을 닫은 상태에서 백업하세요.
macOS에서는 일부 폴더를 Frost가 읽으려면 사용자의 허락이 필요합니다. 자세한 내용은 [macOS 권한](#macos-permissions)을 참고하세요.
## 표본 검사
스냅샷을 저장한 백업이 끝나면 Frost는 무작위로 고른 청크 몇 개(기본값 20개)를 내려받아 확인합니다. 새 내용이 없는 백업에서는 마지막 검사가 하루 이상 지났거나 문제를 발견했을 때만 다시 검사합니다. 검사에 실패하면 백업이 오류를 보고합니다. 자세한 내용은 [백업 확인](#checking-backups)을 참고하세요.
## 중단된 백업
연결이 끊기거나, 노트북을 덮거나, `Ctrl+C`를 눌러서 백업이 도중에 멈춰도 이미 업로드한 내용은 헛되지 않습니다. Frost는 업로드하는 대로 청크를 기록하므로, 다음 백업에서는 그 청크를 건너뜁니다.
## 예약 백업 앞뒤로
예약 백업이 1시간 안에 시작되거나 지난 1시간 안에 끝났다면, `frost backup`이 이를 알리고 시작하기 전에 물어봅니다.
```text
┌ backup sftp://me@nas.local/~/frost
│
│ A scheduled backup starts in 40m, at 15:00.
│ Back up now anyway? [Y/n]
```
그래도 백업하려면 Enter를 누르고, 멈추려면 `n`을 입력하세요. 간격이 4시간보다 짧은 일정에서는 이 시간 범위가 간격의 4분의 1입니다. 끝난 예약 백업은 성공했고 그 뒤로 직접 백업하지 않았을 때만 따집니다. Frost는 터미널에서만 물어보며, 미리 보기나 `--path`, `--exclude`를 쓸 때는 묻지 않습니다.
## 한 번에 하나씩
백업이나 명령줄 복원은 실행 중에 로컬 캐시를 잠급니다. 다른 명령어가 같은 캐시를 필요로 하면 Frost는 "a backup or restore operation is already in progress; try again when it completes"(이미 백업이나 복원이 실행 중이니 끝난 뒤 다시 시도하세요)라고 표시합니다. 다른 쪽이 예약 백업이면 "a scheduled backup is already running"(예약 백업이 이미 실행 중입니다)라고 표시하고 언제 시작했는지 알려 줍니다. 반대로 예약 백업이 잠긴 캐시를 만나면 최대 1시간까지 기다립니다. 스냅샷 브라우저는 캐시 잠금을 해제하므로, 백업 중에도 열어 두거나 복원할 수 있습니다. 캐시 폴더나 컴퓨터가 다르면 잠금도 별개입니다.