우분투 실전 명령어 | 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