백업과 복구 · tar 와 rsync · 이론
tar 와 rsync 를 정확히 쓰기
한 줄 요약
tar 는 시점을 담는 도구이고 rsync 는 상태를 맞추는 도구다. 백업 설계에서 둘은 경쟁이 아니라 역할 분담이다.
왜 이게 필요했나
"백업은 tar 로 하나요 rsync 로 하나요?" 라는 질문에는 답이 정해져 있지 않다. 세대별 아카이브가 필요하면 tar, 최신 상태의 사본이 필요하면 rsync 다. 그리고 대부분의 실무 구성은 둘 다 쓴다.
어떻게 동작하나
tar
tar -czf /backup/etc-$(date +%F).tar.gz --acls --xattrs --selinux --numeric-owner -C / etctar -tzf /backup/etc-2026-08-20.tar.gz | headtar -xzf /backup/etc-2026-08-20.tar.gz -C /restore/옵션의 정확한 의미.
-c(생성),-x(추출),-t(목록),-f(파일)가 기본 조합이다.- 압축은
-z(gzip),-j(bzip2),-J(xz),--zstd. -C는 작업 전에 디렉터리를 바꾼다. 절대 경로를 아카이브에 넣지 않기 위해 반드시 쓴다.tar -czf x.tgz /etc는 아카이브 안에/etc/...를 넣고, 복원할 때 경로 선택권을 뺏는다.-p(권한 보존)와--numeric-owner는 복원 시 권한과 소유자를 정확히 되살린다.--acls,--xattrs,--selinux는 각각 ACL, 확장 속성, SELinux 컨텍스트를 포함한다. SELinux 를 쓰는 시스템에서 이 옵션 없이 복원하면 서비스가 뜨지 않는다.--one-file-system은 다른 파일시스템으로 넘어가지 않는다. 마운트된 네트워크 스토리지까지 딸려 오는 사고를 막는다.--listed-incremental=<스냅샷파일>은 증분 백업을 관리한다. 스냅샷 파일이 상태를 들고 있으므로 그 파일도 함께 보관해야 한다.--strip-components=N은 복원 시 앞쪽 경로 요소를 제거한다.
복원 시 경로를 반드시 확인하라. -C / 로 바로 풀면 현재 시스템 설정을 덮어쓴다. 안전한 절차는 임시 경로로 풀어 내용을 확인한 뒤 필요한 파일만 옮기는 것이다.
mkdir -p /restore/etc-checktar -xzf /backup/etc-2026-08-20.tar.gz -C /restore/etc-checkdiff -r /restore/etc-check/etc/nginx /etc/nginx | head -40GNU tar 와 BSD tar(bsdtar)는 옵션 처리와 일부 동작이 다르다. macOS 에서 만든 아카이브를 리눅스에서 풀 때 확장 속성 관련 파일이 함께 나오는 문제가 대표적이다. 백업 스크립트는 실제 운영 배포판에서 검증해야 한다.
rsync
rsync -aHAX --numeric-ids --delete --dry-run /srv/data/ backup@10.0.9.2:/backup/prod/data/-a는-rlptgoD와 같다. ACL(-A), 확장 속성(-X), 하드 링크(-H)는 포함되지 않는다.--numeric-ids는 이름 대신 숫자 UID/GID 를 쓴다. 다른 시스템으로 복원할 때 소유자가 엉뚱하게 매핑되는 것을 막는다.-i(itemize)는 어떤 변경이 일어나는지 한 줄씩 보여 준다.-n과 함께 쓰는 것이 습관이 되어야 한다.--bwlimit과ionice -c 3 nice -n 19로 운영 부하를 낮춘다.
세대 백업은 하드 링크로 값싸게 만든다.
rsync -aHAX --numeric-ids --delete --link-dest=/backup/prod/daily.1 /srv/data/ /backup/prod/daily.0/각 세대가 전체 스냅샷처럼 보이지만 디스크는 변경분만 차지한다.
두 도구의 역할 분담
| 필요 | 도구 |
| --- | --- |
| 특정 시점의 아카이브 파일 하나 | tar |
| 오프사이트로 옮길 단일 객체 | tar (+ 압축, 암호화) |
| 최신 상태의 사본 유지 | rsync |
| 세대별 스냅샷을 값싸게 | rsync --link-dest |
| 대역폭을 아껴 원격 동기화 | rsync (델타 전송) |
현장에서 만나는 모습
--delete 사고. 원본이 비어 있거나 마운트가 풀린 상태에서 실행되면 대상 데이터를 전부 지운다. 실무에서 실제로 반복되는 사고다. 가드가 필수다.
세대 백업을 하드 링크 모르는 도구로 복사해 용량이 3배가 되는 사고. -H 는 -a 에 포함되지 않는다.
다음 실습에서 할 것
tar 로 전체·증분·제외·분할을 다루고, rsync 로 dry-run·가드·세대 백업·부하 제어를 다룬다. 두 실습 모두 마지막에 결과를 검증한다.