rsync 고급 활용법
rsync는 파일 동기화의 표준 도구로, 델타 전송 알고리즘을 통해 변경된 부분만 효율적으로 전송합니다. 기본 사용법을 넘어 실전에서 유용한 고급 패턴을 알아봅니다.
핵심 옵션 정리
| 옵션 | 의미 | 용도 |
|---|---|---|
| -a | 아카이브 모드 (-rlptgoD) | 권한/소유자 보존 |
| -v | 상세 출력 | 디버깅 |
| -z | 전송 중 압축 | 원격 전송 시 |
| --delete | 소스에 없는 파일 삭제 | 미러링 |
| --partial | 중단된 전송 이어받기 | 대용량 파일 |
| --progress | 전송 진행 표시 | 모니터링 |
| --bwlimit | 대역폭 제한 (KB/s) | 트래픽 관리 |
| --exclude | 파일/폴더 제외 | 불필요 파일 제거 |
서버 간 동기화 패턴
# 기본 원격 동기화
rsync -avz --progress \
/var/www/html/ \
user@remote:/var/www/html/
# 미러링 (소스와 완전 동일하게)
rsync -avz --delete --delete-excluded \
--exclude='.env' \
--exclude='node_modules/' \
--exclude='*.log' \
/var/www/app/ \
user@backup:/backup/app/
# SSH 포트 지정 + 키 인증
rsync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" \
/data/ user@remote:/backup/data/
# 대역폭 제한 (10MB/s)
rsync -avz --bwlimit=10240 \
/large-data/ user@remote:/backup/
증분 백업 (하드링크 기반)
#!/bin/bash
# incremental-backup.sh
BACKUP_SRC="/var/www"
BACKUP_DST="/backup/www"
DATE=$(date +%Y-%m-%d_%H%M%S)
LATEST="$BACKUP_DST/latest"
CURRENT="$BACKUP_DST/$DATE"
if [ -d "$LATEST" ]; then
rsync -avz --delete \
--link-dest="$LATEST" \
"$BACKUP_SRC/" "$CURRENT/"
else
rsync -avz "$BACKUP_SRC/" "$CURRENT/"
fi
rm -f "$LATEST"
ln -s "$CURRENT" "$LATEST"
find "$BACKUP_DST" -maxdepth 1 -type d -mtime +30 \
-not -name "latest" -exec rm -rf {} ;
echo "Backup completed: $CURRENT"
필터 파일 활용
# /etc/rsync-filter.txt
- .git/
- node_modules/
- __pycache__/
- *.pyc
- .env
- .env.*
- *.log
- tmp/
- cache/
# 필터 파일 적용
rsync -avz --filter="merge /etc/rsync-filter.txt" \
/ user@backup:/full-backup/
rsync 데몬 모드
# /etc/rsyncd.conf
uid = nobody
gid = nogroup
use chroot = yes
max connections = 4
log file = /var/log/rsyncd.log
[backup]
path = /backup
comment = Backup Storage
read only = no
auth users = backupuser
secrets file = /etc/rsyncd.secrets
hosts allow = 10.0.0.0/24
# 데몬 시작
rsync --daemon
# 클라이언트에서 데몬 접속
rsync -avz /data/ backupuser@server::backup/data/
실전 자동화 스크립트
#!/bin/bash
MAX_RETRIES=3
RETRY_DELAY=30
SRC="/var/www/"
DST="user@remote:/backup/www/"
for i in $(seq 1 $MAX_RETRIES); do
rsync -avz --partial --timeout=60 "$SRC" "$DST"
if [ $? -eq 0 ]; then
echo "Sync completed successfully"
exit 0
fi
echo "Attempt $i failed, retrying in ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
done
echo "ERROR: Sync failed after $MAX_RETRIES attempts"
exit 1
--dry-run으로 실행 전 반드시 시뮬레이션하여 예상 결과를 확인합니다--link-dest를 활용한 증분 백업은 디스크를 크게 절약합니다- cron과 조합하여 자동 백업 체계를 구축합니다
--partial --progress로 대용량 전송의 중단/재개를 지원합니다
rsync는 단순해 보이지만 옵션 조합에 따라 강력한 백업/동기화 시스템을 구축할 수 있습니다. 하드링크 기반 증분 백업은 별도 백업 소프트웨어 없이도 효율적인 시점 복구를 가능하게 합니다.
댓글 0