출처 : http://www.oss.kr/oss_repository9/14540


일련의 컴퓨팅 작업을 진행하다 보면, 백업이 필요한 경우가 많이 있을 거라고 생각된다.

필자의 경우에도 여러가지 작업 후에는 자료를 백업 시키는데, 여러가지 툴들을 사용해 보았지만, 이래저래 신경이 너무 많이 쓰인다.

그리하여...어떻게 하면 신경 안쓰고 백업을 할 수 있을까...하고 많은 고민을 해보았다.

그러다가 다음과 같은 방법을 찾았는데, 개인적으로 매우 유용하다고 생각하여 공유하고자 한다.

글을 작성하기 전에 이 툴은 인터넷을 검색해보면 수많은 자료가 나오는 매우 유명한 툴임을 사전에 밝혀두는 바이다.


[사용 예 1]

사용OS: 윈도우

작업서버: 리눅스(파일서버)

백업서버: 리눅스


[사용예 2]

사용OS: 리눅스

작업서버: 리눅스(파일서버)

백업서버: 리눅스


여기서는 아직까지는 대부분의 사람들이 주 OS로 사용하고 있을거라고 예상되는 윈도우 OS를 사용하는 [사용예 1]을 기준으로 설명해 보도록 한다. 필자는 사용중인 PC에서 리눅스 파일서버를 네트워크 하드로 연결하여 쓰고 있다. 

※ 실제적으로 백업은 파일서버->백업서버 로 진행되므로, 작업자가 사용하는 PC에 어떤 OS를 사용하는가는 상관이 없다.


백업을 위해 필요한 툴: rsynccron

- rsync는 원격 서버의 파일 및 디렉터리를 동기화 해주는 툴이다.

- cron은 지정된 시간에 작업을 반복적으로 수행할수있도록 도와주는 리눅스 스케쥴링 툴이다.


rsync는 쉽게 말해서 파일을 동기화 시켜주는 프로그램이다. 우리는 앞으로 이 rsync를 사용하여 작업을 진행할 것이다.


우선 백업을 하고자 하는 파일서버(192.168.128.102)에 다음과 같은 설정을 해준다.

※ rsync는 왠만한 리눅스에는 기본 설치가 되므로, 여기서 설치법은 생략하도록 하겠다.


1) /etc/services를 열어서 rsync 873/tcp, rsync 873/udp 내용이 없으면 추가해준다.


2) xinetd.d의 rsync 파일을 수정해준다. 최초에는 사용안함으로 설정되어 있으므로, 아래의 그림과 같이 disable=yes를 disable=no로 수정해 준다.


[root@fileserver]# vi /etc/xinetd.d/rsync


xinet.d.rsyncd.jpg


3) 백업할 디렉터리 경로를 지정해 준다. 최초에는 이 파일이 없으므로, 당황하지 말고 새로 만들면 된다.


[root@fileserver]# vi /etc/rsyncd.conf


rsyncd.confd.jpg 


위 내용을 간단히 설명해 보면 다음과 같다.


[backup] : 백업대상 이름

path : 공유할 디렉터리

comment : 설명

uid : 유저 ID

gid : 그룹 ID

use chroot : 상기에 지정한 path를 루트 디렉터리로 사용할 것인지 설정

read only : 읽기전용 설정

host allow : 접근 가능한 호스트 설정

max connection : 최대 연결 가능한 커넥션

timeout : 타임아웃 시간 설정


이것으로 파일서버의 설정이 모두 끝이났다.


이제 백업서버(192.168.128.101)로 이동하여 백업을 진행해 보겠다.

백업서버에서는 아무런 설정이 필요없다. 아래와 같이 명령만 실행하면 된다.

백업 될 디렉터리는 backuptest 로 임의로 설정하였다.


[root@fileserver]# rsync -avz --delete 192.162.128.102::backup /backuptest


옵션 내용은 다음과 같다. 이 외에도 더 다양한 옵션들이 있으나, 여기서는 사용하지 않으므로 설명은 생략하도록 하겠다.


: archive mode - 심볼릭 링크, 퍼미션, 속성, 소유권 등을 보존

: verbose - 상세설명

: compress - 파일압축

--delete : 서버와 클라이언트의 데이터를 비교하여 더이상 원본에 존재하지 않는 파일을 백업서버에서 제거

192.168.128.102::backup : 파일서버 IP의 rsyncd.conf에 등록된 백업대상

/backuptest : 백업서버에 저장할 위치


상기의 명령을 실행하고 디렉터리를 확인해 보니 모든 데이터가 백업되었음을 알 수 있다.

192.162.128.102 서버의 자료가 192.162.128.101 서버의 backuptest 디렉터리에 백업되었다.


[백업 전]

ls.jpg 


[백업 후]

rsync.finale.jpg


그런데, 여기까지만 해놓으면 백업할 때마다 일일이 명령어를 쳐주어야 한다.

그래서 간단하게 backup.sh라는 쉘파일을 만들어서 사용하기로 하겠다.


[root@fileserver]# vi backup.sh


sh.jpg 


이제부터는 backup.sh 파일을 실행하면, 백업을 수행 할 것이다.

그런데, 그냥 파일만 만들면 퍼미션 에러가 나올 것이다.

이때는 퍼미션을 변경해 주자.


[root@fileserver]# chmod 755 backup.sh


이제 backup.sh로 한결 쉽게 백업을 수행할 수 있게되었다.

한번 실행해보자.


sh.exe-x.jpg 


잘된다. 그런데 변경된 내용이 없으니 별일이 일어나진 않았다.

궁금하니 한번 변경해 보자. 파일서버에서 파일 1개를 삭제해 봤다.


sh.delete.jpg 


파일서버에서 삭제된 파일을 백업서버에서도 삭제하여 내용이 똑같아 졌다.

그런데 이것도 좀 수월해 졌을 뿐이지, 자동으로 해주는것은 아니다.


이 때 필요한 것이 cron이다.

cron은 상기에서 설명하였듯이 반복적인 스케쥴링을 관리해주는 툴이다.

※ cron 역시 왠만한 리눅스에는 기본 설치가 되므로, 여기서 설치법은 생략하도록 하겠다.


cron 설정을 위해서 다음과 같이 입력한다.


[root@fileserver]# crontab -e


그러면 vi 편집기가 실행되고 다음과 같이 입력하고 저장한다.


crontab.jpg 


위 내용을 간단히 설명해 보면 다음과 같다. 이 외의 다양한 기능 및 옵션들은 여기서는 사용하지 않으므로 검색을 통해 확인하기 바란다.


30 : 분 (0~59)

00 : 시간 (0~23)

* : 일 (1~31)

* : 월 (1~12)

* : 요일 (0~7 - 0과 7은 일요일)

/backuptest/backup.sh 를 실행


즉 매요일 매월 매일 00시 30분에 backup.sh를 실행하라는 의미이다.

이제부터는 매일 00시 30분에 backup.sh 가 자동으로 실행되서 원격지에 있는 파일서버에 지정해 놓은 디렉터리에서 변경된 파일을 가져와 백업서버에 저장해 놓을 것이다. 원본 서버에서 파일이 삭제되었을 경우에는 백업서버의 파일도 삭제하여 두 내용을 동기화 할것이다.

물론 설정은 본인 마음이다.


지금부터는 만일의 사태에 벌어질 상황에서도 마음이 편해졌다.

매일 외장하드에 데이터를 보관할 필요도 없어졌고, 내 할일에만 집중할 수 있어 편하다.