(Linux) rsync 명령어

1.  파일 전송 결정


기본적으로 rsync는 파일의 크기와 수정시간을 비교하는 것으로 파일을 전송할지 말지를 결정한다.
이 방법은 아주 적은 CPU자원을 소모하지만 실수가 발생할 수 있다. 일반적으로 파일의 내용을 변경하면 크기와 수정시간이 변하지만 항상 그렇다고 단정할 수는 없기 때문이다.

--checksum 옵션을 이용하면 비교방법을 개선할 수 있다. 이 옵션을 켜면, 파일의 checksum을 비교한다. 크기/시간을 이용한 비교방법보다 안전하지만 더 느리고 더 많은 자원을 사용한다.


2. 전송할 파일 부분 결정


파일 전송을 결정했다고 가정하자. 파일을 전송하기 위한 간단한 방법은 "전체 파일을 그대로 복사"하는 것이다. 쉬운 방법이지만 파일의 크기가 경우 효율적이지 않다.
1G 크기의 파일이 있다고 보자. 여기서 바뀐부분은 1k라고할때, 1k때문에 1G를 복사하게 될 것이다.

Rsync는 파일의 변경된 부분만 효과적으로 복사하기 위한 알고리즘을 가지고 있다.
Rsync는 파일을 고정 크기를 가지는 청크(chunk) 로 나눈다음에 checksum을 계산한다.
이 checksum을 서로 계산해서, 다를 경우 해당 부분의 청크만을 복사한다.

만약 파일의 앞 부분의 정보가 수정돼서 정보들이 밀린다면 모든 청크의 checksum이 어긋날것이다. 이 문제를 피하기 위해서 "Rollish hash"를 사용한다.




1. 로컬 컴퓨터에서 파일과 디렉토리 복사 및 동기화


#aaa.tar파일을 /var/user 디렉토리로 복사
$ rsync -avzh aaa.tar /var/user



#wiki 디렉토리를 /var/user 디렉토리로 복사
$rsync -avzh wiki/ /var/user



댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기