rsync?
rsync
는 원격에 있는 파일과 디렉토리를 복사하고 동기화 하기 위해서 사용하는 툴이며, 네트워크 프로토콜이다. 백업 용도로 많이 사용된다. cron에 올리는 것 만으로 쉽게 백업 혹은 미러 시스템을 구축할 수 있다.
쉽게 말해서, 두 개의 디렉터리를 동기화시키는 명령어라고 할 수 있다.
장점
- 원격 시스템으로부터 파일을 효율적으로 복사하거나 동기화할 수 있다(물론 동일한 시스템의 파일도 가능).
- link, device, 파일의 소유자와 그룹권한 등 파일의 부가정보도 복사할 수 있다.
- remote-update 프로토콜을 이용해서 차이가 있는 파일만 복사하기 때문에 속도가 빠르다(처음에는 디렉토리 등 모든 파일을 복사한다).
- 데이터를 압축해서 송/수신하기 때문에 더 적은 대역폭을 사용한다.
- 어떠한 리모트 전송 쉘에서 사용 가능하다(rsh, ssh 포함).
- 루트권한 없이도 동작.
- 파일전송에 파이프라인을 사용하기 때문에 latency 비용 최소화.
알고리즘
기본적으로 rsync
는 파일의 수정 시각과 크기를 가지고 전송할지 말지를 결정하는데, 특정 상황에서는 이런 알고리즘도 문제가 생길 수 있다. 그래서 –checksum 옵션을 통해 파일을 비교할 수 있다. 그렇지만 이런 방법은 더 느리고 더 많은 자원을 소모한다.
이렇게 변경할 파일을 결정했다고 하더라도, 조금의 정보만 수정된 파일을 전부 가져오면 자원의 낭비가 있기 마련이다. 그래서, 파일을 고정 크기를 가지는 chunk로 나누고 checksum을 계산한다. 그리고 계산한 부분들 중 다른 부분의 chunk만을 복사한다.
만일 앞에서 변경된 chunk가 있는 경우, 뒤에 chunk들이 밀릴 수도 있기 때문에 rolling hash라는 방법을 사용해서 chunk가 밀리는 현상을 방지한다.
설치
1 |
|
사용법
1 |
|
1 |
|
참고: https://www.joinc.co.kr/w/Site/Tip/Rsync