rsync?

rsync?

rsync는 원격에 있는 파일과 디렉토리를 복사하고 동기화 하기 위해서 사용하는 툴이며, 네트워크 프로토콜이다. 백업 용도로 많이 사용된다. cron에 올리는 것 만으로 쉽게 백업 혹은 미러 시스템을 구축할 수 있다.

쉽게 말해서, 두 개의 디렉터리를 동기화시키는 명령어라고 할 수 있다.

장점

  • 원격 시스템으로부터 파일을 효율적으로 복사하거나 동기화할 수 있다(물론 동일한 시스템의 파일도 가능).
  • link, device, 파일의 소유자와 그룹권한 등 파일의 부가정보도 복사할 수 있다.
  • remote-update 프로토콜을 이용해서 차이가 있는 파일만 복사하기 때문에 속도가 빠르다(처음에는 디렉토리 등 모든 파일을 복사한다).
  • 데이터를 압축해서 송/수신하기 때문에 더 적은 대역폭을 사용한다.
  • 어떠한 리모트 전송 쉘에서 사용 가능하다(rsh, ssh 포함).
  • 루트권한 없이도 동작.
  • 파일전송에 파이프라인을 사용하기 때문에 latency 비용 최소화.

알고리즘

기본적으로 rsync는 파일의 수정 시각과 크기를 가지고 전송할지 말지를 결정하는데, 특정 상황에서는 이런 알고리즘도 문제가 생길 수 있다. 그래서 –checksum 옵션을 통해 파일을 비교할 수 있다. 그렇지만 이런 방법은 더 느리고 더 많은 자원을 소모한다.

이렇게 변경할 파일을 결정했다고 하더라도, 조금의 정보만 수정된 파일을 전부 가져오면 자원의 낭비가 있기 마련이다. 그래서, 파일을 고정 크기를 가지는 chunk로 나누고 checksum을 계산한다. 그리고 계산한 부분들 중 다른 부분의 chunk만을 복사한다.

만일 앞에서 변경된 chunk가 있는 경우, 뒤에 chunk들이 밀릴 수도 있기 때문에 rolling hash라는 방법을 사용해서 chunk가 밀리는 현상을 방지한다.

설치

1
2
# yum install rsync
# apt-get install rsync

사용법

1
rsync [-v] [-q] [-a] [-r] [-b] [-u] [-l] [-p] [-o] [-g] [-D] [-t] [-n] [-e=Command] [–del|–delete] [-z] [–exclude] [–stats] [–progress] Source [[USER@]HOST:]DIST

inline-image1 inline-image2

1
2
3
4
5
6
7
8
9
10
#동일 호스트내에서 백업하기

rsync -a SRC DIST
rsync -av /home/user/html/ /home/user/backup/


#리모트 호스트에 백업하기

rsync -a SRC 유저명@호스트명:DIST디렉토리
rsync -av -e ssh /home/user/html/ www@remotehost.com:/home/user/backup/

참고: https://www.joinc.co.kr/w/Site/Tip/Rsync