동기화 작업의 기본 개념
rsync 의 핵심 목적은 소스 (Source) 와 대상 (Destination) 간 데이터 일관성을 유지하는 것입니다. 이 과정에서는 '기준'이 되는 파일을 정의해야 합니다. 일반적으로 로컬 데이터를 서버로 푸시할 때는 로컬 파일이 기준이 되며, 서버 데이터를 로컬로 끌어올 때는 서버 파일이 기준이 됩니다.
동기화 절차는 크게 두 단계로 나뉩니다:
- 검증 단계: 기본적으로 파일 크기 (size) 와 수정 시간 (mtime) 을 비교하여 전송이 필요한 파일을 선정합니다. '--size-only' 옵션 등을 통해 검증 로직을 커스터마이징할 수 있습니다.
- 실행 단계: 실제로 데이터를 전송하는 방식입니다. 기존 파일 보존 여부, 링크 처리 방식, 삭제 정책 등이 이 단계에서 결정됩니다.
- 경로// 없는 경우: 디렉토리 자체와 그 내용물이 이동됩니다 (예:
/src/dir를 전송하면/dest/src/dir생성). - 경로// 있는 경우: 디렉토리의 내용물만 이동됩니다 (예:
/src/dir/를 전송하면/dest/dir_content바로 배치).
작동 모드별 명령어 구조
rsync 는 환경에 따라 세 가지 주요 통신 방식을 지원합니다. 각 상황별로 명령어 문법이 달라지므로 정확히 구분해야 합니다.
# 1. 로컬 동기화
rsync [옵션] 소스_경로 목표_경로
# 2. 원격 쉘을 통한 통신 (보통 SSH)
rsync [옵션] [사용자@]호스트:소스_경로 [목표_경로]
# 3. rsync 데몬 서비스 연결
rsync [옵션] [사용자@]호스트::모듈명:경로
rsync [옵션] rsync://[사용자@]호스트:포트/모듈명/경로
주요 옵션 상세 설명 및 예제
복잡한 rsync 기능 중 가장 빈번하게 사용되는 옵션들을 중심으로 설명합니다. 일반적인 아카이빙 모드는 '-a' 플래그로 요약되며, 이는 재귀적 전송(-r), 소유권(-o), 그룹(-g), 퍼미션(-p), 타임스탬프(-t), 하드링크(-H), 심볼릭 링크(-l) 등을 모두 유지하도록 설정합니다.
1. 압축 및 진행 상황 모니터링
네트워크 트래픽을 줄이기 위해 '-z' 옵션으로 압축하고, '-P' 옵션으로 전송 진행률과 중단 복구 기능을 동시에 활성화하는 것이 일반적입니다.
# 로컬 /var/log/nginx 을 원격 호스트 192.168.1.50 으로 백업
rsync -avzP /var/log/nginx/ user@192.168.1.50:/backup/nginx_logs/
2. 테스트 및 드라이런 (--dry-run)
실제 전송 없이 어떤 파일이 이동될지 확인하려면 '-n' 또는 '--dry-run' 옵션을 사용합니다. 복잡한 규칙 적용 전에 반드시 권장되는 절차입니다.
# 실제 전송 없이 동작만 시뮬레이션
rsync -avn /data/project/ user@remote_server:/deploy/project/
3. 파일 필터링 및 제외 (--exclude)
특정 패턴의 파일이나 디렉토리를 전송 목록에서 제외하고 싶을 때 사용합니다. 하나의 '--exclude' 는 하나의 규칙만 처리하므로 여러 개가 필요할 경우 반복 사용하거나 '--exclude-from' 을 통해 파일에서 읽습니다.
# temp 디렉토리와 모든 .log 파일을 제외하고 전송
rsync -av --exclude="/temp/" --exclude="*.log" /data/source/ /data/dest/
4. 삭제 전략 (--delete)
'--delete' 는 대상 디렉토리에서 소스에 존재하지 않는 불필요한 파일을 제거하여 완벽한 동기화를 수행합니다. 이때 중요한 점은 제외 규칙과의 상호작용입니다.
- 기본 동작: 소스에 없고 대상에만 있는 파일 삭제.
- 제외 규칙와의 충돌: 일반적으로 '--exclude' 로 표시된 파일은 삭제되지 않습니다 (보호됨). 하지만 '--delete-excluded' 를 함께 사용하면 강제로 삭제할 수도 있습니다.
# 대상 디렉토리를 소스와 완전히 일치시키되, 특정 패턴은 제외
rsync -av --delete --exclude="*.bak" /source/ /dest/
# 제외된 파일도 무조건 삭제하고자 할 때
rsync -av --delete --delete-excluded --exclude="*.bak" /source/ /dest/
rsync 데몬 모드 구성
SSH 키 인증 없이도 FTP 나 SFTP 와 유사한 인터페이스를 제공하려면 rsync 데몬을 실행해야 합니다. 이는 별도의 포트를 열고 클라이언트 요청을 수신하는 서비스 형태입니다.
구성 파일 (/etc/rsyncd.conf)
데몬 설정은 모듈 단위로 이루어집니다. 각 모듈은 고유한 이름과 물리적 경로를 가지며, 접근 제어 및 인증 설정이 가능합니다.
[global_settings]
port = 8730
uid = rsync_user
gid = rsync_group
max_connections = 10
log_file = /var/log/rsyncd.log
[secure_backup]
path = /mnt/data/secure
comment = 보안 백업 영역
read only = false
list = no
auth users = admin_sync
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.1.0/24
위 설정 중 중요한 포인트는 다음과 같습니다:
- path: 해당 모듈이 참조할 실제 서버 파일시스템 경로입니다.
- auth users: 접속이 허용되는 가상 사용자 목록입니다.
- secrets file: 해당 사용자의 비밀번호를 정의한 파일입니다. 이 파일의 권한은 엄격히 제한되어야 하며 (600), 다른 사용자가 읽거나 쓸 수 없어야 합니다.
- hosts allow: 접속 가능한 IP 주소 범위를 지정하여 보안을 강화합니다.
데몬 실행 및 인증
CentOS 계열 시스템에서는 'systemctl start rsyncd'로 실행할 수 있으며, 수동 실행 시에는 rsync --daemon --config=/etc/rsyncd.conf 명령어를 사용합니다.
클라이언트 측에서 비밀번호를 매번 입력하지 않으려면 비밀번호 파일을 준비해 --password-file 옵션과 함께 전달합니다.
# 클라이언트 설정
echo "your_password" > ~/.rsync_pass
chmod 600 ~/.rsync_pass
# 모듈 연결 및 목록 조회
rsync --list-only rsync://admin_sync@192.168.1.50:8730/secure_backup --password-file=~/.rsync_pass
고급 시나리오: 원본 파일 자동 정리
대용량 로그 파일 등을 전송한 후 원본 서버의 저장공간을 확보하고자 할 때 --remove-source-files 옵션이 유용합니다. 이 옵션은 전송이 성공적으로 완료된 파일만 삭제 대상으로 삼으며, 전송 실패나 제외된 파일은 원위치에 남게 되어 데이터 손실을 방지합니다.
# 전송 완료 후 원본 로그 파일 삭제 (성공한 것만)
rsync -av --remove-source-files /var/log/app/*.log user@archive_server:/cold_storage/logs/
또한 특정 조건에서만 업데이트하려는 경우에는 --existing(이미 있는 파일만 업데이트) 또는 --ignore-existing(새로운 파일만 추가) 옵션을 활용할 수 있습니다. 이를 조합하여 증분 배포나 초기 설치 시나리오를 분할 처리하는 것이 가능합니다.