대상 OS: Rocky Linux 9
`rsync`는 파일 및 디렉터리를 효율적으로 동기화하는 강력한 명령줄 유틸리티입니다. 네트워크를 통해 로컬과 원격 시스템 간 또는 두 로컬 디렉터리 간 파일 복사 및 동기화에 널리 사용됩니다. `rsync`의 핵심은 '델타 전송 알고리즘'으로, 변경된 파일의 변경된 부분만 전송하여 대역폭 사용량을 최소화하고 전송 속도를 높입니다. 이 글에서는 Rocky Linux 9 환경에서 `rsync`를 활용한 실질적인 운영 팁을 소개합니다.
1. **기본 동기화: 모든 파일 복사 및 업데이트**
가장 기본적인 사용법으로, 소스 디렉터리의 내용을 대상 디렉터리로 복사합니다. `-a` (archive) 옵션은 권한, 소유권, 타임스탬프 등을 보존하며 재귀적으로 파일을 복사합니다. `-v` (verbose)는 진행 상황을 보여주고, `--progress`는 각 파일의 전송 진행률을 표시합니다.
# 로컬 디렉터리 동기화
rsync -av --progress /path/to/source/ /path/to/destination/
# 원격 서버로 동기화 (SSH 사용)
rsync -av --progress /path/to/source/ user@remote_host:/path/to/destination/
**주의**: 소스 디렉터리 경로 끝에 `/`를 붙이면 디렉터리 *안의* 내용만 복사하고, 붙이지 않으면 디렉터리 *자체*를 복사합니다.
2. **증분 백업: 변경된 파일만 안전하게 백업**
`rsync`의 `-u` (update) 옵션은 대상에 존재하는 파일이라도 소스 파일의 수정 시간이 더 최신인 경우에만 전송합니다. `--delete` 옵션을 함께 사용하면 소스 디렉터리에서 삭제된 파일도 대상에서 삭제하여 완벽한 미러링을 만듭니다. `--backup`과 `--backup-dir` 옵션은 삭제되거나 덮어쓰기 전에 이전 버전을 보존하는 데 사용됩니다.
# 원격 서버로 매일 저녁 증분 백업 (이전 버전을 /backup/YYYYMMDD 디렉터리에 보관)
TIMESTAMP=$(date +%Y%m%d)
rsync -avuz --progress --delete --backup --backup-dir=/backup/rsync_snapshots/${TIMESTAMP} /home/myuser/data/ user@remote_host:/backup/rsync_data/
* `-u`: Update transfer mode (skip files that are newer on the receiver)
* `-z`: Compress file data during the transfer
3. **SSH 키 기반 인증으로 보안 강화 및 자동화**
SSH 키를 설정하면 패스워드 입력 없이 `rsync`를 실행할 수 있어 자동화에 적합합니다.
# SSH 키 기반으로 원격 서버에 백업
rsync -avz -e "ssh -i /home/myuser/.ssh/id_rsa" /local/data/ user@remote_host:/remote/backup/
* `-e "ssh -i /path/to/key"`: 사용할 SSH 키 파일을 지정합니다.
4. **권한, 심볼릭 링크, 디렉터리 동기화 제어**
* `-a` (archive) 옵션은 `-rlptgoD`에 해당합니다.
* `-r`: 재귀적 복사 (디렉터리)
* `-l`: 심볼릭 링크 복사
* `-p`: 권한 보존
* `-t`: 수정 시간 보존
* `-g`: 그룹 보존
* `-o`: 소유자 보존 (root 권한 필요)
* `-D`: 장치 및 특수 파일 보존
* `--no-g` 또는 `--no-o`: 소유권/그룹 보존 방지
* `--links` / `--copy-links`: 심볼릭 링크 처리 방식 제어
5. **파일/디렉터리 제외 (Exclude)**
특정 파일이나 디렉터리를 동기화에서 제외할 때 사용합니다. `--exclude` 옵션은 여러 번 사용할 수 있으며, `--exclude-from`으로 파일 목록을 지정할 수도 있습니다.
# 특정 파일 및 디렉터리 제외
rsync -av --exclude '*.log' --exclude 'cache/' /path/to/source/ /path/to/destination/
# 제외 목록 파일 사용
# exclude-list.txt:
# *.tmp
# temp_dir/
rsync -av --exclude-from 'exclude-list.txt' /path/to/source/ /path/to/destination/
6. **전송 속도 제한**
네트워크 대역폭을 과도하게 사용하지 않도록 전송 속도를 제한할 수 있습니다. `--bwlimit` 옵션은 KB/s 단위로 속도를 지정합니다.
# 초당 1024KB (1MB/s)로 속도 제한
rsync -avz --bwlimit=1024 /path/to/source/ user@remote_host:/path/to/destination/
rsync는 다양한 옵션을 통해 유연하고 효율적인 파일 동기화 및 백업 솔루션을 제공합니다. 운영 환경에 맞게 옵션을 조합하여 사용하면 시스템 관리 효율을 크게 높일 수 있습니다.