[Shell] rsync 사용법
- Rsync는 원격에 있는 파일과 디렉토리를 복사하고 동기화 하기 위해서 사용하는 툴
Rsync의 기능
- 원격 시스템으로부터 파일을 효율적으로 복사하거나 동기화 가능
- Linux, device, 파일의 소유자와 그룹 권한(Permissions)등 파일의 부가정보도 복사 가능
- scp보다 빠름, rsync는 remote-update 프로토콜을 이용해서 차이가 있는 파일만 복사
(처음에는 모든 파일과 디렉토리를 복사 그 후부터는 차이가 있는 파일만 복사하기 때문에 더 빠르고 효율적)
- 데이터를 압축해서 송/수신하기 때문에 더 적은 대역폭을 사용
Rsync의 동기화 알고리즘
1. 파일 전송 결정
1) 파일의 크기와 수정시간(modification)을 비교하는 것으로 파일을 전송 할지 말지를 결정
(일반적으로 파일의 내용을 변경하면 크기와 수정시간이 변하지만 항상 그렇다고 단정할 수는 없다는 예외가 있다.)
2) "--checksum" 의 옵션을 통해 비교 방법을 개선
(크기 / 시간을 이용한 비교 방법보다 안전하지만 더 느리고 더 많은 자원을 사용)
2. 전송할 파일 부분의 결정
1) 파일을 고정 크기를 가지는 청크(chunk)로 나누어 checksum을 계산
2) checksum을 서로 계산하여, 다를 경우 해당 부분의 청크만을 복사
(만일 파일의 앞 부분의 정보가 수정되어 정보가 밀릴 경우, 모든 chunk의 checksum이 어긋남)
3) Rolling hash를 통해 위의 문제를 해결
Rsync의 사용법
# 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
Rsync의 주요 옵션
옵션
|
설명
|
-v
|
verbosity를 높이는 옵션으로 복사하는 과정을 더 자세하게 보여줌
|
-z
|
compress를 주는 옵션으로 파일을 복사할 때 압축해서 복사 |
-h
|
사람이 읽기 쉬운 형태로 복사 결과물들을 출력
|
-a
(same as -riptgoD)
|
archive 모드로 -riptgoD 옵션을 적용한 것과 같음 (symlink, 권한, timestamp와 같은 속성을 그대로 복사)
|
-r
|
디렉토리를 복사 할 때 사용하는 옵션
|
-l
|
symlink는 symlink 형태로 복사하는 옵션
|
-p
|
파일과 디렉토리들의 권한을 유지하는 옵션
|
-t
|
수정시간을 유지하는 옵션
|
-g |
그룹 속성을 유지하는 옵션
|
-o |
소유자 속성을 유지하는 옵션 |
-D
(same as --devices --specials)
|
--devices --specials 옵션과 같음
|
--devices |
root 권한이 필요하며 Device 관련된 파일들을 복사해서 생성 |
--specials
|
name socket이나 fifo와 같은 특수한 파일들도 복사하는 옵션 |
Rsync 로컬에서 파일과 디렉토리 복사 및 동기화
1. 원격 파일 복사 프로그램이지만 로컬 컴퓨터에서 사용도 가능
rsync -zvh {source} {destination}
2. 로컬 컴퓨터에서 디렉토리 복사 및 동기화
rsync -avzh {source} {destination}
Rsync 서버로부터 파일과 디렉토리를 복사 혹은 동기화
1. 로컬 서버에서 원격 서버로 디렉토리 복사
rsync -avz {domain}@{targetIP}:{targetPath} {localPath}
2. 원격 서버의 디렉토리를 로컬 서버로 복사
rsync -avzc {domain}@{targetIP}:{targetPath} {localPath}
Rsync SSH 사용
- Rsync는 -e 옵션을 이용해서 ssh, rsh와 같은 remote shell 프로그램을 선택 가능
- -e 옵션이 없다면 ssh 사용 (default)
Rsync server 모드
Rsyn 데몬 프로그램 설정
- "--darmon" 옵션을 이용하여 서버 모드로 작동
- xinetd를 이용해서 시스템 서비스로 등록
[ xinetd 패키지 설치 ]
1. /etc/xinetd.d/rsync 설정 파일 만들기
2. rsync 설정파일은 /etc/rsyncd.conf (설정파일이 없는 경우 직접 만들어야 함)
1) 복사(동기화) 디렉토리로 /home/share를 선택
2) 읽기/쓰기 모두 가능 설정
3) 디렉토리에 대한 소유자는 nobody.nogroup, /home/share 소유자를 nobody.nogroup로 변경
4) 접속 허용 유저로 user을 추가
5) auth users에 대한 설정파일은 /etc/rsyncd.secrets에 저장
* /etc/rsyncd.serets 파일에 접속유저이름과 패스워드를 지정할 수 있다. (패스워드는 plain/text)
3. 읽기 테스트
4. 쓰기 테스트
Rsync 데이터 복사 진행 상황 확인
- "--progesss" 옵션 (진행정도를 화면에 출력)
Rsync Include exclude 옵션
1. include
2. exclude
- 복사할 파일을 제외
# data 디렉토리를 복사에서 제외
rsync -avz --exclude 'data' {domain}@{targetIP}:{targetPath} {localPath}
# (*)를 사용하여 .bak 확장자를 포함하는 파일만 제외
rsync -avz --exclude '*.bak' {domain}@{targetIP}:{targetPath} {localPath}
Rsync delete 옵션
# "--delete" 옵션을 사용하여 삭제 후 복사
rsync -avz --delete {domain}@{targetIP}:{targetPath} {localPath}
Rsync 전송할 파일의 최대 크기 정하기
# "--max-size" 옵션을 이용해서 전송할 파일의 최대 크기를 정함
rsync -avz --max-size='10k' {doamin}@{targetIP}:{targetPath} {localPath}
Rsync 성공적으로 전송 후 원본파일 지우기
#"--remove-source-files"이용하여 전송이 끝난 후 원본 파일 삭제
rsync --remove-source-files -zvh {file} {경로}
Rsync Bandwidth 제한 설정
# "--bwlimit" 옵션을 이용하여 파일전송에 사용할 네트워크 대역폭을 제한
# 인터넷 서비스중인 서버에서, 다른 서비스에 영향을 주지 않는 범위내에서 파일 복사를 원할 경우 유용하게 사용
rsync --bwlimit=100 -avzhe ssh {localPath} {domain}@{targetIP}:{targetPath}
[참고]
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/