A. rsync

1. 개요

rsync 는 Remote Sync 의 약자로, 빠른 증분 파일 전송을 제공하는 오픈소스 유틸리티입니다. 전송 시 네트워크 대역폭을 최소화하는 delta encoding algorithm 을 구현하여 rcp나 scp 보다 훨씬 빠르고 효율적으로 데이터를 동기화할 수 있습니다.

  • rsync 를 통해 서버 간의 동기화나 백업을 진행할 수 있습니다.
  • root 권한이 필요 없고, 익명 사용자(anonymous)를 지원합니다.
  • 심볼릭 링크, 디바이스, 소유자, 그룹, 허가권 등을 복사할 수 있고, exclude, exclude-from 옵션 또한 지원합니다.
  • client와 server 프로그램이 모두 포함되어 있으며, server로 구동 시 TCP의 873 포트를 사용합니다.

server 구동 시 SSH 나 RSH 같은 Remote Shell protocol 기반에서 동작할 수도 있으므로 ssh 기반으로 rsync 를 사용하면 방화벽 오픈을 할 필요 없이 편리하게 사용 가능합니다. (SSH 추천)

 

2. 사용 방법

$ rsync options src dest

# 주요 옵션
-a, --archive : 압축 모드. -rlptgoD와 동일
				-r, -t(타입스탬프 보존), -l (심볼릭 링크 보존), -p(permission 보존), -g(g그룹 보존), -o(소유자 보존 - root 만 가능), -D(device, special 파일 보존)
				일반적으로 -a 옵션에 -z 옵션을 추가하면 충분
-v, --verbose : 상세한 정보 출력
-r, --recursive : 하위 디렉터리까지 재귀적으로 실행
-z : 데이터 압축
-h : human-readable, output numbers in a human-readable format

# 기타 옵션
-A, --acls : ACLs를 보존한다(-p 옵션과 함께).
-b, --backup : 백업을 만든다(--suffix 나 -backup-dir 참조).
-c, --checksum : 시간이나 크기가 아니라 체크섬으로 파일을 비교한다.
-d, --dirs : 하위 디렉터리를 포함하지 않고 전달한다.
-e, --rsh=COMMAND : 원격 셸을 지정한다.
-E, --executability : 실행 권한을 보존한다.
-g, --group : 그룹을 보존한다.
-H, --hard-links : 하드 링크를 보존한다.
-k, --copy-dirlinks : 디렉터리의 심볼릭 링크는 원본 디렉터리로 변경한다.
-K, --keep-dirlinks : 디렉터리의 심볼릭 링크는 심볼릭 그대로 취급한다.
-l, --links : 심볼릭 링크는 심볼릭 링크 형태 그대로 복사한다.
-L, --copy-links : 심볼릭 링크의 원본 파일이나 디렉터리로 변경한다.
-o, --owner : 소유자를 보존한다(슈퍼유저만 해당).
-p, --perms : 퍼미션을 보존한다.
-q, --quiet : 에러가 아닌 메시지는 출력하지 않는다.
-t, --times : 변경 시간을 보존한다.
-u, --update : 새로운 파일은 덮어쓰지 않는다.
-X, --xattrs : 확장 속성(externded attributes)을 보존한다.
--backup-dir=DIR : 지정한 디렉터리(DIR)에 백업을 만든다.
--bwlimit : 전송 대역폭을 제한한다. (KByte 기준)
--chmod=CHMOD : 파일이나 디렉터리 퍼미션(CHMOD)을 지정한다.
--copy-unsafe-links : “unsafe” 심볼릭 링크만 변경한다.
--delete : 서버 쪽에는 없고 클라이언트에만 있는 파일은 지운다.
--devices : 디바이스 파일을 보존한다(슈퍼유저만 해당).
--existing : 추가된 파일은 전송하지 않고 업데이트된 파일만 전송한다.
--exclude : 풀필요한 파일을 제외한다.
--no-motd : 데몬 모드(MOTD)를 출력하지 않는다.
--specials : 스페셜 파일을 보존한다.
--suffix=SUFFIX : 디렉터리(SUFFIX) 위치에 백업한다.
-4, --ipv4 : IPv4
-6, --ipv6 : Ipv6
--version : 버전 번호를 출력한다.
(-h) --help : 사용법을 출력한다.

 

* rsync [option ...] [source] [target] (사용 구문)

 

기본적인 사용 구문은 위와같으며 상황과 사용하는 옵션에 따라 몇가지로 구분해서 사용할수있습니다.

 

[주요 옵션]

option  
-v verbosity를 높이는 옵션으로 과정을 더 자세하게 출력
-z compress를 주는 옵션으로 파일을 압축해서 복사
-h 사람이 읽기 쉬운 형태로 복사결과를 출력
-a archive 모드로 -rlptgoD 옵션을 적용한것과 같이 symlink, 권한과 같은 속성을 그대로 복사하는 옵션
-l symlink 형태로 복사하는 옵션
-p 파일과 디렉토리들의 권한을 유지하는 옵션
-g 그룹 속성을 유지하는 옵션
-o 소유자의 속성을 유지하는 옵션
-r 디렉토리를 복사할때 사용하는 옵션

 

rsync 설치

* rsync -qa | grep rsync  (rsync 패키지 설치 여부 확인)

* yum install -y rsync (rsync 설치)

 

rsync 설정 파일 경로

* cd /etc/rsyncd.conf (rsync 설정 파일)

rsync 설정 파일

* rsync  데몬 (rsyncd) 을 구동시켜서 사용하는 방식의 예로 rsyncd.conf 에 정의된 정책에 의해서

  동기화 작업이 진행됩니다.

 

rsync 설정 파일 

* vi /etc/rsyncd.conf

처음 설치시 default 상태이며 root 가 아닌 운영계정 사용시 아래와같이 수정해서 사용하시면 됍니다.

사용자 계정 및 그룹 추가

 

rsync  데몬 및 네트워크 설정

* systemctl enable rsyncd.service (rsync 서비스 활성화)

* systemctl start rsyncd.service (rsync 서비스 시작)

* firewall-cmd --permanent --add-service rsyncd (방화벽 서비스 추가)

* firewall-cmd --reload (방화벽 리로드)

서비스 시작상태 확인 (방화벽 사용시 위 명령어와같이 서비스 등록이 필요합니다.)

3. 사용 예시

- Local 파일을 Local 에 복제

# /home 디렉토리를 압축하여 /backup 디렉토리에 상세한 정보와 함께 백업
$ rsync -av /home /backup

 

- Local 파일을 Remote에 복제

# /home/lesstif/data/ 디렉토리를 압축하여 example.com 서버의 /home/lesstif/backup/ 디렉토리에 복제
$ rsync -av /home/lesstif/data/ lesstif@example.com:/home/lesstif/backup/

 

- Remote 파일을 Local에 복제

옵션 미지정 시 rsync에서 데이터 삭제는 진행되지 않는다. 삭제를 원한다면 delete 옵션 사용하면 된다.

# example.com 서버의 /home/lesstif/data 디렉토리를 로컬 서버의 /home/lesstif/backup/ 디렉토리에 백업
# -delete : example.com 서버의 /home/lesstif/data 디렉토리 목록에 존재하지 않는 항목을 로컬에서 삭제
$ rsync -avzr -delete lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

 

- 목적지(destination) 파일이 변경 된 경우 덮어 쓰지 않음

 

destination 파일이 수정된 경우 rsync 를 수행하면 기본적으로 source 파일로 덮어써 버린다.
이 상황을 원치않을 경우 rsync 에 -u 옵션을 추가하여 실행하면 파일이 변경 되었을 경우 덮어쓰지 않는다.

# -u, --update : 새로운 또는 수정된 파일은 덮어쓰지 않는다.
$ rsync -avuz lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

 

- 디렉터리 구조만 복제

# -d, --dirs : 원본의 디렉터리 구조만 복제하고 안의 파일들은 복제하지 않는다.  
$ rsync -vd [lesstif@example.com](mailto:lesstif@example.com):/home/lesstif/ .

 

- 진행 내역 보기

# --progress : 전송시 진행 내역을 볼 수 있다.
$ rsync -av --progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

 

- ssh가 22가 아닐 경우 연결

 

보안때문에 SSH 를 다른 포트(예: 10022) 를 사용하는 서버에 연결시 아래와 같이 -e 뒤에 ssh와 연결할 포트를 추가하고 실행 가능

$ rsync -avz --progress -e 'ssh -p 10022' lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

 

- 불필요한 파일 제외

 

USB 를 마운트해서 복사할 경우 휴지통이나 미리보기 데이타등의 불 필요한 파일은 --exclude 옵션으로 명시적으로 지정해서 제외해야 한다.

$ rsync -avpz --delete --exclude="lost+found" 192.168.10.100::TEST/ /home/

 

- 대역폭 제한하기

 

bwlimit 옵션을 사용하여 대역폭 제한 가능 (KByte 기준)

$ rsync -avpz --delete --exclude-from=/tmp/rsync-exclude.txt --bwlimit=10240 192.168.10.100