우분투 실전 명령어 | rsync로 서버 파일 동기화/백업
언제 쓰는가
서버 간에 파일을 옮길 때 scp만 쓰면 매번 전체를 다시 보내서 오래 걸릴 때가 많습니다.
rsync는 변경된 부분만 전송해서 배포, 로그 백업, 정적 파일 동기화 같은 반복 작업에 특히 유리합니다.
네트워크가 불안정한 환경에서도 이어받기(--partial)와 압축(-z)을 조합하면 훨씬 안정적으로 운영할 수 있습니다.
바로 쓰는 명령어
# 로컬 디렉터리를 원격 서버로 동기화
rsync -avz --delete ./dist/ [email protected]:/var/www/app/
# 원격 로그를 로컬 백업 디렉터리로 가져오기
rsync -avz [email protected]:/var/log/nginx/ ./backup/nginx/
# 대역폭 제한 + 중단 대비
rsync -avz --partial --bwlimit=5000 ./archive/ [email protected]:/data/archive/
# 전송 전에 어떤 파일이 바뀌는지 미리 보기
rsync -avzn --delete ./dist/ [email protected]:/var/www/app/
자주 하는 실수
--delete를 검증 없이 바로 쓰는 실수- 대상 경로 오타가 있으면 원격 파일이 대량 삭제될 수 있습니다. 먼저
-n(dry-run)으로 결과를 확인하세요.
- 대상 경로 오타가 있으면 원격 파일이 대량 삭제될 수 있습니다. 먼저
- 경로 끝 슬래시(
/) 의미를 헷갈리는 실수./dist와./dist/는 동작이 다릅니다. 보통 “디렉터리 내용”만 동기화하려면 끝 슬래시를 붙입니다.
- SSH 포트를 바꿔 둔 서버에서 기본 포트(22)로 시도하는 실수
- 연결이 안 되면
-e "ssh -p 2222"처럼 명시해야 합니다.
- 연결이 안 되면
검증 방법
# 동기화 후 파일 개수/용량 비교
find ./dist -type f | wc -l
ssh [email protected] 'find /var/www/app -type f | wc -l'
# 특정 파일 해시 비교
sha256sum ./dist/main.js
ssh [email protected] 'sha256sum /var/www/app/main.js'
# 최근 전송 로그 확인
rsync -avz --itemize-changes ./dist/ [email protected]:/var/www/app/
실행 결과 예시
$ rsync -avzn --delete ./dist/ [email protected]:/var/www/app/
sending incremental file list
./
index.html
assets/app.3f2a1c.js
total size is 8,421,992 speedup is 143.77 (DRY RUN)
$ rsync -avz --itemize-changes ./dist/ [email protected]:/var/www/app/
sending incremental file list
>f.st...... index.html
>f+++++++++ assets/app.3f2a1c.js
sent 412,918 bytes received 2,104 bytes 276,681.33 bytes/sec
total size is 8,421,992 speedup is 20.26
출처
- Ubuntu Manpages
- GNU rsync Documentation
- OpenSSH Manual