rsync using backup from active nas

rsync 사용하기   http://dev.jpblog.co.kr/21

Linux & Solaris 2009/08/04 05:34 posted by JP™

백업하기에 유용한 rsync에 대해서 올려봅니다~
백업에는 여러 가지가 있겠지만 여기선 간단히 cron을 이용한 rsync 백업에 대해 설명하겠습니다.rsync란?
rcp(remote file copy)의 강화형으로 “rsync 알고리즘” 이라는 원격상의 파일의 전송이나
동기화를 가장 빠른 속도로 구현하는 방법을 쓰는 오픈 소스 유틸리티로 GPL에 기초해
자유로이 이용이 가능합니다.1. rsync의 특징
1) 디렉토리 트리나 파일시스템 전체를 갱신할 수 있습니다
2) 옵션에 따라 소프트 링크나 파일 소유자, 퍼미션, 디바이스, 타임스태프 유지가
가능합니다.
3) 내부 파이프라인이 복잡한 파일의 레이턴시를 줄입니다.
4) 전송에 rsh, ssh 혹은 다이렉트 소켓을 쓰는것이 가능합니다.
5) 이상적 미러링을 가능케 하는 anonymous rsync를 지원합니다.
6) 특별한 권한 없이도 실행이 가능합니다.

2. rsync 설치
redhat 배포판 에는 rsync-2.x.x가 기본으로 설치되어 있습니다.
설치가 안 되어 있다면 http://rsync.samba.org/ftp/rsync/에서 최신버전을 다운받습니다.
1) 설치 확인(redhat 배포판의 경우)
# rpm -qa |grep rsync
rsync-2.5.6-20
위와 같이 해당 서버에 rsync가 설치되어 있는지를 확인합니다.
2) 소스 설치(소스로 설치하는 경우)
# tar zxvf rsync-2.4.6.tar.gz
# ./configure && make && make install

3. rsync 설정
rsync가 사용하는 프로토콜은 rsh나 ssh인데 이것을 원치 않는 경우는 873포트를 이용
할 수 있습니다. rsync가 873포트를 사용하느냐, rsh나 ssh를 사용하느냐에 따라 설정
내용이 약간 틀려집니다.
873포트를 사용할 경우 /etc/inetd.conf(redhat7.0 이전) or
/etc/xinetd.d/rsync(redhat7.0이후)을 설정하고 /etc/rsyncd.conf를 만들어 줍니다.

1) 873포트를 사용할 경우
가) /etc/inetd.conf 설정(redhat7.0 이전일 경우)
rsync stream tcp nowait root /usr/bin/rsync rsyncd –daemon
–> /etc/rc.d/init.d/inetd start 서비스를 restart 해준다.
나) /etc/xinetd.d/rsync 설정(redhat7.0 이후일 경우)
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}

–> /etc/rc.d/init.d/xinetd restart 서비스를 restart 해준다
다) /etc/services파일에도 아래와 갈은 내용이 없으면 추가해 주도록 한다.

phonebook 767/tcp
rsync 873/tcp
rsync 873/udp
telnets 992/tcp

라) 데몬확인(netstat -tap)

# netsyat -tap

tcp 0 0 linux4:32774 *:* LISTEN
tcp 0 0 *:rsync *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN

마) /etc/rsyncd.conf

[www]
path = /home/www
comment = webserver1
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = 192.168.10.3
max connections = 3
timeout 600

[www] 서비스명
path 서비스할 디렉토리위치
comment 설명
uid 파일전송하는 사용자의 id. 기본값은 nobody
gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody
use chroot 위의 path를 root 디렉토리로 사용. (보안상 필요)
read only 읽기전용(클라이언트에서 서버로 올리는 경우에는 read only=no 로 설정)
hosts allow 호스트별 접속허용. 기본값은 all host입니다. 접근 허용할 호스트의 ip를
적어주시면 됩니다.(보안상 필요)
max connections 동시접속자수.
timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을
해야 클라이언트가 죽었을 때 서버에서 접속을 해제할 수 있음.

2) ssh, rsh 포트를 사용하는 경우
inetd나 xinetd를 수정하지 않아도 되고, /etc/rsyncd.conf를 만들어 주지 않아도
됩니다. 특별한 설정없이 클라이언트에서 사용하면 됩니다.

4. rsync의 사용법
우선 rsync서버설정이 된 것을 webserver1(www1.linuxone.co.kr)이라고 하고,
그 서버로부터 정보를 가져와 동기화 시킬 서버를 webserver2(www2.linuxone.co.kr)
라고 가정
1) 873포트 사용시
# rsync – 옵션 서버::디렉토리 동기화 위치
가) webserver2의 /home/www로 webserver1의 /home/www내용을 동기화 시키려고
한다면, 이렇게 하면 됩니다.
예) webserver2에서
# rsync -avz www1.linuxone.co.kr::/home/www /home/www
– avz옵션은 아래와 같습니다.
-a 는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존)
-v verbose (상세하게 보여줌)
-z compress (전송시 압축을 함)
나) webserver2에서 webserver1의 내용을 가져오면서 webserver1에 없는
내용은 webserver2에서 삭제함
예) webserver2에서
# rsync -avz -delete www1.linuxone.co.kr::/home/www
2) ssh, rsh 사용시
클라이언트에서 다음과 같이 사용만 하면 됩니다.
# rsync – 옵션 -e ssh(rsh) 서버:디렉토리 동기화 위치
가) webserver2의 /home/www로 webserver1의 /home/www내용을 동기화 시키려고
한다면, 이렇게 하면 됩니다.
예) webserver2에서
# rsync -avz -e ssh www1.linuxone.co.kr:/home/www /home/www

나) ssh를 사용하려면 비밀번호를 입력해야하는데 이것은 인증키를 생성해서 번거로움을
없앨 수 있습니다.
예) ssh-keygen -d 라고한면
~/.ssh/id_dsa.pub 라는 파일이 생성됨
이걸 원본 데이터가 있는 서버에 저장함
scp -p .ssh/id_dsa.pub root@호스트명:~/.ssh/authorized_keys라고
등록하면 가능합니다.

※ crontab 에 다음과 같이 등록하면 더욱 좋습니다.
rsync -avPz –delete –stats -l -t -e ssh root@webserver1:/home/ /backup
– 저렇게 할 경우 압축을 하고, 퍼미션 및 소유권은 그대로 유지하며, 심벌릭 링크는
심벌릭 링크 그대로 백업하고, 전송 속도 및 시간을 출력해주고, 마지막에 전송된
상태를 출력 해줌.
–delete는 옵션은 원본에는 없지만 그 전에 받은 백업본에 있을 경우 삭제해줌.
그래서, 원본과 항상 똑같이 백업이 되도록 함
5. crontab에 등록
모든 내용을 crontab에 등록합니다.
# crontab -e
10 04 * * * “rsync -avz -e ssh www1.linuxone.co.kr:/home/www /home/www”
매일 04시 10분에 www1.linuxone.co.kr의 /home/www 를 자신의 home/www로
동기화 시킵니다.

6. rsync의 주요옵션
-v 진행상황을 상세히 보여줌
-r 지정한 디렉토리의 하위 디렉토리까지 재귀적으로 실행
-l 소프트링크 보존
-H 하드링크 보존
-p 버전속성 보존
-o 소유속성 보존(루트)
-g 그룹속성 보존
-t 타임스탬프 보존
-D 디바이스 파일보존(루트)
-z 데이터압축 전송
-u 추가된 파일만 전송
-b 낡은 파일은 ~가 붙음
-u 새로운 파일을 덮어쓰지 않음
-c 서버와 클라이언트 파일크기를 세밀히 체크
-e ssh(rsh) 전송암호화
–existing : 추가된 파일은 전송하지않고 갱신된 파일만 전송
–delete : 서버에 없는 파일은 클라이언트에서도 삭제
–exclude ‘PATTERN’ : 패턴과 맞는 파일만 전송
–stats : 결과를 보고
–daemon : 대몬모드로 운영함(이건 inetd.conf에 지정할 때 필요함)

※ 참고사항
☞ -e 옵션은 rsh나 ssh를 사용할 때 써주는 옵션입니다.
☞ 873포트를 사용할 때는 :: 두 개를, rsh나 ssh를 사용할 때는 : 한 개만 써줍니다.
☞ rsync -avz www1.linuxone.co.kr:home/www1/ /home/www2 의 내용은
☞ www1.linuxone.co.kr의/home/www1 안의 내용을 /home/www2 디렉토리로 옮기는
것인데 만약 /home/www1/ 라고하면 원래 www1은 그 디렉토리 자체까지 포함해서
가져옵니다. 그렇지만 www1 뒤에 / 가붙어서 /home/www1/ 라고 표시하면 그 디렉
토리안에 있는 내용만 가져옵니다.