ftp 로 계속 업로드하지 않고, 동기화 하고 싶었드아.
드롭박스는 드롭박스 안에 htdocs 가 있어야 해서 탈락.
copy 와 같다 생각하면 됨.
rsync -avz 원본위치 복사위치
rsync -avz kang@ip주소:/var/www/sirasony/public_html /var/www/html
옵션(-avz)
- a :
(-r)지정된 원본디렉토리 이하의 모든 디렉토리와 파일,
심볼릭 링크(-l), 장치파일(-D)까지 모두 사본생성경로로 원래 권한(-p), 시간(-t),그룹(-g), 소유자(-o) 권한을 유지한채 복사하란 뜻입니다. 다음과 동일. rsync -r -l -p -t -g -o -D
-v : verbose 실행과정 내용을 가능한 상세히 보여 달라는 뜻입니다.
-z : 전송데이터 량을 줄이기 위해 전송중 압축을 하라는 내용입니다. 최종 복사된 파일이 압축되는 것은 아닙니다.
정기적 백업의 자동화 cron
cron 의 실행하는 스케쥴표는 crontab 명령으로 작성할 수 있습니다.
$crontab -e
아마도 처음 crontab을 실행한다면 어떤 에디터를 사용할지 물어 볼겁니다. 익숙한 에디터를 선택하시면 됩니다. 그러면 crontab은 하나의 설정파일을 열어 줍니다.
해당 파일에 작업 command 를 추가 해주면 되는 데 형식은 다음과 같습니다.
#분 시 일 달 요일 command
#30 1 2 3 * rsync ... # 3월 2일 1시 30분에 rsync ...를 실행한다. (특정일 실행)
#10 2 * * 1 rsync ... # 매주 첫날 2시 10분에 rsync...를 실행한다. (주 단위 실행)
#0 3 * * * rsync ... # 매일 3시 정각에 rsync... 를 실행한다. (매일 실행)
즉 위처럼 원하는 스케쥴에 rsync 실행줄을 넣어 주면 되는 겁니다. (맨앞 # 코멘트 표시는 제거해야죠 ^^)
여기에 좀더 세련된 관리 방법을 넣어 보겠습니다.
7일 단위 증분 백업하면서 동기화하기
위 말이좀 헷갈리죠?
이 말뜻은 매일 동기화를 해서 원본과 맞추되. 만약에 특정 변경된 파일이 문제가 있어 복원 필요한 경우 해당 파일을 적어도 일주일 전까지는 되돌릴 수 있도록 따로 변경분만 별도 백업 한다는 뜻입니다.
어떻게?
--backup 이란 옵션을 사용하면 됩니다.
이 옵션을 사용하게 되면 원본에 동기화를 할때 변경이 발생해서 덮어쓰이게 되는 경우 이전파일을 다른 이름으로 바꾸거나(--suffix 옵션) 다른 디렉토리로(--backup-dir)로 옮겨 놓을 수 있도록 하는 명령 입니다.
즉, 바뀌게 되는 파일만 또 다른 공간으로 살려두게 되는 것이죠.
그런데 이 옵션만으로는 좀 세련되게 하기가 안되므로 간단히 스크립트를 만들고 이 스크립트를 실행하는 명령을 crontab 으로 등록하겠습니다.
아래 스크립트입니다. http://rsync.samba.org/examples.html 있는 예제를 좀더 간단하게 바꾸었습니다.
#!/bin/sh
SRCPATH=/src
BACKUPHOME=/backup
#동기화 제외 대상 목록을 넣을 파일
EXCLUDES=$BACKUPHOME/exclude_files.txt
# 일요일, 월요일, 화요일 ... 토요일 또는 영문으로 (sunday ... )
BACKUPSUB=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=$BACKUPHOME/$BACKUPSUB -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
rm -rf $BACKUPHOME/$BACKUPSUB/*
# 동기화 실행 진행
rsync $OPTS $SRCPATH $BACKUPHOME/current
이 파일을 /backup/runrsync.sh 실행가능한 파일로 저장합니다.
그리고 요일별로 변경분만 백업될 디렉토리를 미리 만들어 주어야 합니다.
$mkdir /backup/일요일 /backup/월요일 /backup/화요일 /backup/수요일 /backup/목요일 /backup/금요일 /backup/토요일
$crontab -e
실행 후 아래 처럼 추가해줍니다.
#0 2 * * * /backup/runrsync.sh
출처: https://funnylog.kr/439 [퍼니로그]
# 한 서버에서 다른 서버의 디렉토리 동기화 하기
1) ssh 또는 rsh를 사용하는 방법(데이터 전송시 암호화 적용)
$ rsync -avz root@호스트네임:/AAA/fies /BBB
또는
$ rsync -avz 호스트아이피:/AAA/files /BBB
2) rsync 데몬을 사용하는 방법(데이터 전송시 암호화 없음. inetd 서비스가 실행상태여야함)
$ rsync -avz 호스트아이피::/AAA/files /BBB
만약 rsync를 사용해서 /AAA/files의 어떤 파일을 삭제했을 때 destination 디렉토리에서도 지워지길 원하는 경우 아래와 같은 명령어 사용.
$ rsync -av --delete /AAA/files /BBB
서버간 동기화를 해야 하는 경우 아래의 사항 참고
[Source 서버용]
1. rsync 설치
2. rsync 설정(/etc/default/rsync)
3. rsync.conf 생성 및 아래 구문 복사 후 붙여넣기
$ sudo nano /etc/rsyncd.conf
log file = /var/log/rsync.log # 로그 파일 경로
[source] # 부르고 싶은 명칭
path = /var/www/omeka1/files # 소스 디렉토리 설정
uid = root # rsync 사용 가능한 사용자
gid = root # rsync 사용 가능한 그룹
use chroot = yes # chroot 사용여부
host allow = x.x.x.x # 해당 호스트 아이피만 접근 가능
max connection = 100 # 최대 연결 개수
timeout 300 # 타임아웃 시간 설정
[Destination 서버용]
1. rsync 설치
2. rsync 설정(/etc/default/rsync)
3. rsync 명령어 실행
문법은 rsync -avz 소스서버아이피 또는 도메인주소::부르고싶은명칭 목적지경로
아래와 같이 작성하고 엔터.
$ rsync -avz 소스서버아이피::source /var/www/omeka2
내가 사용한 명령어는 아래와 같다. rsync -av --exclude=.svn --delete --delete-excluded /source /destination
위와 같은 명령어를 사용할 수 있다.
각 옵션은 rsync -h 로 설명을 보고 꼭 확인해 보기 바란다. 일단 위에 쓴 것만 설명하면,
-a : 설명을 보면 아카이브 모드라고 써 있다. 이 옵션을 빼고 실행하니까 -r이나 -d 옵션을 주지 않으면 실행이 안 된다고 에러가 떴다. -r은 디렉토리로 재귀한다(recurse into directories)고 설명돼 있다. 하위 폴더까지 복사한다는 말이다. -d는 재귀하지 않고 디렉토리를 옮긴다(transfer directories without recursing)고 써 있다. 하위 디렉토리를 복사하지 않는다는 걸로 이해된다. 이렇게 하면 디렉토리‘만’ 옮기는 것 같다. 여튼 다른 블로그에서 봤을 때 -a가 옵션으로 붙어 있었으므로 나도 사용했다. 그 뿐이다.
-v : -av는 a 옵션과 v 옵션을 동시에 사용한 거다. v 옵션은 작업 상황을 텍스트로 보여주라는 옵션이다. 이 옵션을 주지 않으면 작업이 성공했다는 메세지도 안 나온다. 원래 쉘은 그런 거다. 아무 반응이 없으면 성공인 거다.
--exclude=.svn : .svn은 빼고 동기화 하라.
--delete : 원본 소스에 없는 놈은 목표 폴더에서도 지워라.(원본 폴더에서 지운 파일이 있다면 백업쪽에도 반영시키라는 말이겠죠?)
--delete-excluded : --exclude에 지정된 놈도 목표 폴더 쪽에서 지워라.(백업할 필요 없는 놈은 백업하지 말라는 말이죠 ㅋ)
이상이다.
윈도우에서 사용하기
자료를 백업하기 위해서 1테라짜리 하드를 하나 사 뒀다.
이놈을 네트워크 드라이브인 z로 잡아 뒀다.
처믐엔 allway sync 같은 프로그램을 이용하려고 했지만, 이놈은 처음엔 무료고 일정 용량 이상 싱크를 하면 더이상 사용을 하지 못하는 놈이었다. 당했다 ㅡㅡ;;
그래서 이놈저놈 찾다가 그냥 rsync를 이용하기로 했다. 최고로 안정적인 무료 프로그램 아닌가 ㅡㅡ;;
그리고 난 프로그래머! cui따위 두렵지 않아!!! ㄷㄷㄷ;;
그래서 일단 윈도우에서 rsync를 사용하기 위해 cygwin을 설치했다.
cygwin은 윈도우에서 unix 프로그램들을 사용할 수 있게 해 주는 프로그램이다. 좀 눈이 돌아갔지만 무사히 설치했다.
그리고 아래 명령어를 이용해서 깔끔하게 끝냈다.
rsync -av --delete /cygdrive/c/backup /cygdrive/z
이상!
원격에서 하기
원격 rsync 는 ssh를 사용한다. 서버컴에서 192.168.0.2 의 ~/backup 폴더로 백업할 때 아래 명령을 사용하면 된다. 192.168.0.2 원격 컴퓨터의 사용자 이름은 mytory 라고 가정한다.
rsync -avzO /serverComputer/backup mytory@192.168.0.2:~/backup
-z 옵션은 전송시 압축을 해서 보내라는 거다. 그럼 받는 쪽에서 압축을 푼 다음에 받게 될 거다.(아마)
~/backup 에서 ~ 기호는 home 폴더를 의미한다. cd ~ 라고 터미널에 쳐 보라.
위 명령을 치면 암호를 입력하라고 나온다. 암호 입력 과정을 생략하고 싶다면, ssh 사용시 암호 입력 과정을 생략할 수 있도록 키를 생성하는 방법을 참고하라.
# Crontab을 활용한 주기적이고 자동적인 파일 동기화
크론탭을 열고 아래의 명령어 예시와 같이 원하는 시점으로 작성
분/시/일/월/요일 순으로 작성
$ crontab -e
[명령어 입력 예시]
15 2 30 7 * rsync -avz /AAA/files /BBB # 7월 30일 2시 15분에 rsync 실행
15 2 * * 1 rsync -avz /AAA/files /BBB # 매주 첫날 2시 15분에 rsync 실행
0 1 * * * rsync -avz /AAA/files /BBB # 매일 1시 정각에 rsync 실행
0-59/1 * * * * rsync -avz 소스서버아이피::source /var/www/omeka2 # 1분마다 rsync 실행
댓글