DevOps/Linux

rsync : 파일 백업과 동기화

okbear3 2025. 4. 9. 20:57

rsync는 Remote Sync의 약자로, 로컬과 원격 시스템 간 파일을 빠르게 전송하고, 변경된 부분만 동기화해주는 유틸리티입니다.

 

rsync의 특징

  • rsync는 기본적으로 변경된 부분만 복사하기 때문에, 대용량 파일을 효율적으로 관리할 수 있습니다.
    파일의 크기와 수정 시간을 비교해서 변경 여부를 판단하고, 파일 내부의 일부만 바뀐 경우에도, 바뀐 블록만 전송합니다.
  • 압축 전송으로 네트워크 효율성 향상
  • Permision, Timestamp, 소유자 등 메타 데이터 유지
  • SSH 프로토콜 기반의 안전한 파일 전송

 

rsync 패키지 설치 및 설정

# rsync 패키지 설치 여부 확인
rsync -qa | grep rsync

# rsync 설치
yum install -y rsync

# rsync 설정 파일 경로
# rsync 데몬(rsyncd)을 구동시켜서 사용하는 방식으로 rsyncd.conf에 정의된 정책에 의해 동기화 작업이 진행된다.
/etc/rsyncd.conf

# rsync 데몬서비스 등록
systemctl enable rsyncd.service
systemctl start rsyncd.service

# rsync 방화벽 설정
firewall-cmd --permanent --add-service rsyncd
firewall-cmd --reload

 

rsync 사용 방법

rsync [option] [source] [target]

 

옵션

옵션 설명
-a archive 모드로 퍼미션, 심볼릭 링크, 타임스탬프 등을 유지
-v verbosity 옵션으로 진행 과정을 자세하게 출력
-z compress 옵션으로 파일을 압축해서 복사
-h 사람이 읽기 쉬운 형태로 복사결과를 출력
-l symbolic 형태로 복사하는 옵션
-p 파일과 디렉터리들의 권한을 유지하는 옵션
-g 그룹 속성을 유지하는 옵션
-r 디렉터리를 복사할 때 사용하는 옵션
--update 새 파일/수정된 파일만 복사
--delete 목적지에서 소스에 없는 파일 삭제
--progress 실시간 전송상태, 속도, 예상시간 등을 확인
--partial 중단된 전송을 이어받을 수 있습니다.
-P --progress --partial

 

사용 방법

# local -> local
rsync -avh ./app ./app-backup

# local -> remote
rsync -avh ./app root@192.168.10.12:/app-backup

# remote -> local
rsync -avh root@192.168.10.12:/app ./app-backup

# 특정 파일 제외
rsync -avh --exclude '*.txt' home/ etc/
rsync -avh --exclude={'*.txt', '*.iso'} home/ etc/

# 디렉터리 동기화
rsync -avh --delete ./app ./app-backup

 

 

rsync 양방향 동기화 방법

rsync는 기본적으로 단방향(one-way) 동기화 도구이지만, 스크립트로 작성하여 양방향 동기화 방식으로 사용할 수 있습니다.

단, 두 곳에서 동시에 동일한 파일을 수정한 경우에는 충돌이 발생할 여지가 있어, 유의하여 사용이 필요합니다.

#!/bin/bash

SRC="/home/user/folderA/"
DEST="/mnt/usb/folderB/"
LOG="/tmp/sync-log.txt"

# 1. A → B 동기화
rsync -av --update --delete "$SRC" "$DEST" >> $LOG

# 2. B → A 동기화
rsync -av --update --delete "$DEST" "$SRC" >> $LOG

 

외장하드 - 로컬 폴더, 테스트 환경 - 운영 환경 간 실험적 동기화 등의 작업 시 양방향 방식으로 사용할 수 있습니다.