[ https://www.lesstif.com/pages/viewpage.action?pageId=12943658 ]

rsync 정리
전송시에 네트웍 대역폭을 최소화하는 delta encoding algorithm 을 구현하여 rcp 나 scp 보다 훨씬 빠르고 효율적으로 site 간의 데이타를 동기화한다.
rsync는 client와 server 프로그램이 모두 포함되어 있으며 server 로 구동시 TCP의 873 포트를 사용한다. 
server 구동시 SSH 나 RSH 같은 Remote Shell protocol 기반에서 동작할 수도 있으므로 ssh 기반으로 rsync 를 사용하면 방화벽 오픈을 할 필요가 없이 편리하게 사용할 수 있다.(SSH 추천)
주요 용도로는 전통적인 rcp, scp를 대치하는 용도로 사용할 수 있으며 원격 사이트 미러링(Remote Site mirroring), 데이타 백업(data backup) 등의 용도로도 사용할 수 있다.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
수행전 config파일 copy(백업)

-설치패키지
서버 (xinetd, rsync)
클라이언트 (rsync)

※ ssh 포트로 수행할 경우는 서버쪽에서 설정 불필요, 패키지만 설치되어 있으면 됨 
  (rsync명령을 ssh로 수행하려면, 클라이언트 rsync 명령 수행할때 ----> # rsync -avz IP:/소스디렉토리 /클라이언트 디렉토리 ) --> 패스워드입력필요

===================================== rsync 873번 포트로 수행하기 ==============================================================================================================
-rsync 873번포트로 수행할때 장점 : 
클라이어트 수십대가 파일 copy하는 환경에서 source 디렉토리가 변할 경우, 서버쪽의 /etc/rsyncd.conf 파일에서 source디렉토리를 별칭(아래에서는 www)으로 관리함, ---> 별칭으로 관리되는 실제 source 디렉토리 변경하면, 클라이언트 쉘에서 변경 불필요
=======================================================================================================================================================================
- 서버설정
--------------------------------------------
vi /etc/xinted.d/rsync
service rsync
{
	disable = no 로 변경
.....
--------------------------------------------
# /etc/rsyncd.conf
[www]
comment=www
path=/home/user/www
host allow=클라이언트 IP
uid=접근시사용자 
gid=접근시사용자그룹명
use chroot=yes
read only=yes
max connections=1
tmeout=600
--------------------------------------------
-설정파일설명
uid, gid      :  root 또는 nobody로 설정하는것 같음
use chroot  : 설정디렉토리를 최상위 root 디렉토리 사용
path 	     : 데이터 원본의 경로를 설정
exclude : 전송할때 제외할 형식(파일 or 디렉토리)
=======================================================================================================================================================================
[OS방화벽 open]
OS방화벽  (※ 풀어도 될안될경우 selinux중지 ---> setenforce 0 ; vi /etc/sysconfig/selinux를 SELINUX=disabled)
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 873 -j ACCEPT
# service iptables stop
# service iptabes start
# iptables -L (확인)
------------------------------------------------------------------------------------------------------------------------------------------------
OS방화벽 II
# vi /etc/firewalld/zones/public.xml
<!-- rsync -->
<port protocol="tcp" port="873"/>
# systemctl restart firewalld
=======================================================================================================================================================================
[포트오픈확인방법]
# telnet IP 873
※ telnet 설치 : yum install telnet 
                  yum install telnet-server
   설치후 /etc/xinetd.d/telnet 파일 disable=no 로 수정 후, service xinetd restart
또는, nmap이라는 패키지 설치 후, 
# nmap localhost 수행하면 확인가능
=======================================================================================================================================================================
[rsync 명령수행]
1) 기본적인 명령어 2가지 예 

(첫번째는 별칭을 이용하여, rsync 873포트로 수행)
# rync -avz 서버IP::www /target_pathS

(두번째는 ssh포트로 rsync 수행)
# rsync -avz 서버IP:/source_path /target_path

!!수행전 반드시 주의사항
 1) # rsync -avz --progress --delete 서버IP::/source_path /target_path  : 소스의 데이터가 삭제되면, 차후 sync시에 target에도 삭제시킴
※ --delete 옵션을 줄경우 rsync를 다운받는 target에 다른 용도의 대상 데이터가 함께 있을 경우, 소스의 정보와 동기화 시키기 위해, 모두 삭제됨 ;;; 주의필요
  (예를들자면, 위의명령어의 /target_path에 rsync 수행과 관련없는 aa.txt cc.txt  파일이 존재할 경우, rsync를 수행하면 해당파일도 삭제됨 ---> 원본에 없는 파일이기 때문에)

2) 개인계정으로 클라이언트에서 rsync 수행할때 --->  Source에 존재하는 root권한의 file이 ---> 클라언트에서는 개인계정의 소유권한으로 만들어짐 (root로 실행해야 실제 소유권으로 생성되는것을 확인함)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[rysnc 사용 TIP 및 특징 정리] 
1) ssh로 rsync 수행할때, 패스워드입력없이 수행방법
- 클라이언트에서
# ssh-keygen -t dsa
# cat ~/.ssh/id_dsa.pub 의 파일을 ----> 서버의 ~/.ssh/authorized_keys에 추가
# ssh 서버 (접속테스트 수행)

2) rsync 명령어에 source path 끝에  / 가 있을 경우 동작 방식
source path 에 trailing slash 가 있을 경우 rsync 는 목적지에 폴더를 생성하지 않으니 주의해야 한다.
위와 같이 / 가 있는지 여부에 따라 동작이 다르므로 rsync 로 백업시 주의해야 하며 다음 rsync 명령어는 둘 다 동일한 동작을 수행한다.
$ rsync -azvh /var/lib/mysql  /home/backups
$ rsync -azvh /var/lib/mysql/ /home/backups -----> /home/backups 하위에 mysql 디렉토리를 생성하지 않고, 바로 데이터를 쌓아짐

3) 디렉터리 구조만 복제
rsync 에 -d(소문자) 옵션을 추가하면 원본의 디렉터리 구조만 복제하고 안의 파일들은 복제하지 않는다.
$ rsync -vd  lesstif@example.com:/home/lesstif/ .

4) 진행 내역 보기
--progress 옵션을 추가하면 전송시 진행 내역을 볼 수 있다.
$ rsync -avz --progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/

5) sh가 22가 아닐 경우 연결
보안때문에 SSH 를 다른 포트(예: 10022) 를 사용하는 서버에 연결시 아래와 같이 -e 뒤에 ssh와 연결할 포트를 추가하고 실행하면 된다.
$ rsync -avz --progress -e 'ssh -p 10022' lesstif@example.com:/home/lesstif/data /home/lesstif/backup/