rsync(Remote Sync)는 원격 또는 로컬 컴퓨터 간에 파일과 디렉터리를 효율적으로 동기화하는 데 사용한다
1. 기본 사용법 및 핵심 옵션
rsync [옵션] [소스 경로] [목적지 경로]
가장 보편적으로 사용하는 아카이브 모드 예시
# source_directory/의 내용을 destination_directory/로 동기화한다.
rsync -avz source_directory/ destination_directory/
-a(archive): 아카이브 모드. 권한(-p), 소유권(-o,-g), 심볼릭 링크(-l), 타임스탬프(-t) 등 파일의 주요 속성을 대부분 그대로 보존한다. 내부적으로-rlptgoD옵션을 합친 것과 동일하게 동작한다.-v(verbose): 동기화 진행 상황을 터미널에 상세하게 출력한다.-z(compress): 데이터를 전송하는 과정에서 압축하여 전송한다. 텍스트 파일 등 압축 효율이 좋은 데이터를 전송할 때 네트워크 부하를 줄여 속도를 향상시킬 수 있다.
2. 변경분 동기화
rsync의 핵심 기능은 델타 전송이다. 별도의 옵션 없이도 기본적으로 소스와 목적지 파일의 수정 시간 및 크기를 비교하여 변경된 파일만 전송한다. 만약 파일 내용의 일부만 변경되었다면, 파일 전체가 아닌 변경된 부분(delta)만을 전송하여 효율적인 동기화가 가능하다.
정밀도를 더 높이고 싶다면 --checksum (-c) 옵션을 사용할 수 있다. 파일의 수정 시간이나 크기 대신, 파일 내용 전체에 대한 체크섬을 직접 비교하여 변경 여부를 판단한다. 더 정확하지만, 모든 파일의 내용을 읽어야 하므로 동기화 시작 전 파일 시스템에 부하가 증가하고 속도가 느려질 수 있다.
3. 원격 호스트와 동기화
rsync의 가장 강력한 기능 중 하나는 SSH 프로토콜을 통해 원격 서버와 파일 및 디렉터리를 동기화하는 것이다. 원격 경로는 사용자@호스트:경로 형식으로 지정한다.
1) 로컬 → 원격으로 전송
# 로컬의 /local/data/ 디렉터리 내용을 remote_server의 /remote/backup/ 디렉터리로 전송한다.
rsync -avz /local/data/ user@remote_server:/remote/backup/
2) 원격 → 로컬로 가져오기
# remote_server의 /var/log/ 디렉터리 내용을 로컬의 /local/logs/ 디렉터리로 가져온다.
rsync -avz user@remote_server:/var/log/ /local/logs/
팁: 스크립트 등을 통해 rsync를 자동화하려면 SSH 키 기반 인증을 설정하는 것이 좋다.
4. 시스템 자원 사용량 제한
대용량 데이터를 동기화할 때 rsync가 시스템의 CPU나 디스크 I/O 자원을 과도하게 점유하여 다른 서비스의 성능에 영향을 줄 수 있다. 이때 nice, ionice 명령어와 rsync 옵션을 조합하여 자원 사용량을 제어할 수 있다.
nice: 프로세스의 CPU 스케줄링 우선순위를 조절한다. (값이 높을수록 우선순위가 낮아진다)ionice: 프로세스의 디스크 I/O 스케줄링 우선순위를 조절한다.--bwlimit:rsync자체 옵션으로, 네트워크 대역폭 사용량을 제한한다. (단위: KB/s)
사용 예시:
# CPU와 I/O 우선순위를 가장 낮은 등급으로 설정하여 rsync를 실행한다.
nice -n 19 ionice -c 3 rsync -avz /source/ /destination/
# 네트워크 대역폭을 1MB/s (1024 KB/s)로 제한하여 실행한다.
rsync -avz --bwlimit=1024 /source/ user@remote_server:/destination/
# 모든 제한 옵션을 함께 사용한다.
nice -n 19 ionice -c 3 rsync -avz --bwlimit=1024 /source/ /destination/
nice -n 19: CPU 우선순위를 가장 낮게 설정한다.ionice -c 3: I/O 우선순위를 "Idle" 등급으로 설정한다. 이는 다른 프로세스의 디스크 I/O 작업이 없을 때만 I/O를 사용하도록 하여 시스템 영향을 최소화한다.
'Linux' 카테고리의 다른 글
| mtail을 활용한 prometheus metric 생성 (0) | 2025.10.01 |
|---|---|
| Mit kerberos with Openldap backend (0) | 2024.04.18 |
| Redhat8 swappiness 설정 이슈 (0) | 2024.04.05 |