rsync를 이용한 원격 백업

A서버에 있는 데이터를 물리적으로 다른 위치에 있는 B서버로 데이터를 백업 할때 rsync를 이용하면 편리합니다.

rsync는 백업할 원본데이터를 가져올때

자신이 가지고 있는 파일과 비교해서 새로 생성된 파일들만 가져오기 때문에 좀 더 효율적으로 백업이 가능합니다.

rsync 명령어는 대략 이렇게 됩니다.


rsync [option] [service ip] [backupdirectory]

-a : 심볼릭링크, 속성, 퍼미션, 소유권 등 보존
-v : 진행상황을 상세하게 보여줌
-z : 전송시 압축을 함
-u : 새로운 파일을 덮어쓰지 않음
--delete : 서버쪽에 없고 클라이언트 쪽에만 있는 파일을 백업시 지움
--progress : 진행을 %로 보여줌


rsync 명령어는 원본데이터가 있는 서버에서 백업서버로 하는 것이 아닌

백업서버에서 원본데이터가 있는 서버로 접근하는 방식입니다.


$ rsync -avPz --delete --stats -l -t -e ssh 계정명@원본데이터서버아이피:/백업할원본데이터디렉토리/ /백업된데이터를저장할디렉토리


이렇게 입력하면 원본데이터를 가지고 있는 서버에 SSH로 접속한 다음에

해당 서버의 백업할 디렉토리와 백업서버의 백업된 데이터를 담고 있는 디렉토리와 파일 동기화를 하게 됩니다.

이미 가지고 있는 파일의 경우에는 다시 다운로드하지 않고, 새로 생성된 파일을 다운로드 합니다.

그리고 --delete 옵션이 적용되어 있기 때문에 원본데이터에서 사라진 파일은 백업서버에서도 삭제합니다.

백업 할 원본데이터 디렉토리를 적을땐, 항상 /home/ 식으로 끝에 슬래쉬를 적어 줘야 합니다.


만약 SSH로 접속하는 원본데이터가 있는 서버의 포트가 기본포트 22번을 사용하지 않는다면 아래와 같이 명령어를 사용하시면 됩니다.


$ rsync -avPz --delete --stats -l -t -e "ssh -p 포트번호" 계정명@원본데이터서버아이피:/백업할원본데이터디렉토리/ /백업된데이터를저장할디렉토리


반드시 큰따옴표로 묶어주세요.


예를 들어 192.168.0.7 IP를 가지고 있는 서버의 /home/user/ 디렉토리를 백업서버의 /backup 폴더와 싱크를 맞추는 경우 명령어는 이런식이 되겠네요.

$ rsync -avPz --delete --stats -l -t -e ssh user@192.168.0.7:/home/user/ /backup


SSH접속시 22번 포트가 아닌 다른 포트(예시 : 1526번포트)를 쓴다면

$ rsync -avPz --delete --stats -l -t -e "ssh -p 1526" user@192.168.0.7:/home/user/ /backup

이렇게 쓰면 되겠고요.


그리고, 위의 같이 명령어를 입력할 경우 ssh접속할때 처럼 사용자의 비밀번호를 물어보는데요

비밀번호를 입력하면 rsync가 동작합니다.



이 과정을 자동화하는 스크립트를 만들기 위한 방법은 여러가지가 있겠는데요.

그중 expect를 사용한 방법을 설명해드리겠습니다.

expect는 콘솔상에서 interactive한 입력을 처리하는데 있어서 매우 유용한 도구입니다.

http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/scripting/5.html


centOS의 경우는 expect를 yum을 통해 설치합니다.

# yum install expect


그리고 아래의 스크립트 파일을 만듭니다.

#!/usr/bin/expect
set timeout  -1
log_user 0
spawn rsync -avPz --delete --stats -l -t -e ssh user@192.168.0.7:/home/user/ /backup
expect "password: "
send "비밀번호\n"
log_user 1
interact



원본서버에 SSH로 접속하여 묻는 비밀번호에 응답하는 과정을 자동화한 스크립트 입니다.

rsync는 백업뿐만 아니라 다른 여러 용도로도 유용하게 사용할수 있습니다.


한가지 참고하셔야 할 것은 위의 스크립트를 crontab에 등록하면 정상적으로 실행이 되지 않습니다.

맨마지막 명령어인 interact가 사용자에게 권한을 반환하는 명령어라서 crontab으로 스크립트가 실행되면 오류가 납니다.

그렇기 때문에 이 스크립트를 crontab에 등록하여 사용하시려면

맨 마지막 interact 명령어 대신에

expect eof

를 넣으면 됩니다.



| 1 | ··· | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | ··· | 1788 |