우분투 실전 명령어 | rsync 증분 백업 동기화

언제 쓰는가

운영 서버에서 파일을 주기적으로 백업해야 하는데, 매번 전체를 다시 복사하면 시간과 트래픽이 너무 클 때 쓴다.
원본은 계속 바뀌고 백업본은 최신 상태를 유지해야 할 때 rsync가 가장 깔끔하다.

바로 쓰는 명령어

# 로컬 디렉터리 증분 백업
rsync -avh --delete /srv/app/data/ /backup/app-data/

# 진행률 포함(대용량 전송 확인)
rsync -avh --delete --info=progress2 /srv/app/data/ /backup/app-data/
# 원격 서버로 SSH 증분 백업
rsync -avh --delete -e "ssh -p 22" /srv/app/data/ [email protected]:/data/backup/app-data/

# 변경점만 먼저 확인하는 드라이런
rsync -avh --delete --dry-run /srv/app/data/ /backup/app-data/

핵심 옵션/패턴

  • -a는 권한, 타임스탬프, 심볼릭 링크 등 속성을 최대한 보존한다.
  • -v-h를 같이 쓰면 로그를 사람이 읽기 쉬운 형태로 확인할 수 있다.
  • --delete는 원본에서 지운 파일을 백업본에서도 정리한다. 미러링 목적일 때만 붙인다.
  • 대용량 전송은 --info=progress2를 붙여 전체 진행률을 한 줄로 보는 편이 편하다.

명령 출력 예시

$ rsync -avh --delete /srv/app/data/ /backup/app-data/
sending incremental file list
./
config.yml
logs/
logs/app.log

sent 12.41M bytes  received 1.02K bytes  8.27M bytes/sec
total size is 1.84G  speedup is 148.23
$ rsync -avh --delete --dry-run /srv/app/data/ /backup/app-data/
sending incremental file list
deleting old-cache.tmp
reports/2026-02-18.json

sent 2.11K bytes  received 38 bytes  4.30K bytes/sec
total size is 1.84G  speedup is 856301.40 (DRY RUN)

자주 하는 실수

  • 소스 경로 끝의 /를 빼먹는다. 디렉터리 자체가 한 단계 더 생겨서 경로가 꼬인다.
  • --delete를 검증 없이 바로 실서버에 쓴다. 잘못된 소스 경로면 백업본 파일이 대량 삭제될 수 있다.
  • 원격 백업에서 SSH 키/권한 점검 없이 크론부터 건다. 실패 로그만 쌓이고 실제 백업은 안 된다.
  • 백업 후 무결성 확인을 생략한다. 복사는 성공했는데 파일 권한이나 소유권이 틀어져 복구 때 막히는 경우가 있다.

검증 방법

# 실제 반영 전 변경점 검토
rsync -avh --delete --dry-run /srv/app/data/ /backup/app-data/
# 백업 후 파일 수/용량 비교
find /srv/app/data -type f | wc -l
find /backup/app-data -type f | wc -l

du -sh /srv/app/data /backup/app-data
# 샘플 파일 체크섬 비교
sha256sum /srv/app/data/config.yml
sha256sum /backup/app-data/config.yml

운영 팁

처음엔 --dry-run 결과를 팀 채널에 공유하고 승인받은 뒤 실제 동기화를 돌리면 사고를 크게 줄일 수 있다.
주기 작업은 크론에 넣되, 표준 출력/에러를 로그 파일로 남겨 두면 장애 분석이 빨라진다.

출처

  • rsync man page
  • Ubuntu Server Guide
  • ArchWiki rsync