2008. 12. 26. 21:18

rsync 활용 미러링 백업 대역폭 제한, 특정파일만 백업

1. rsync하는 대역폭의 제한, 그리고 --progress 옵션

네트웍이 허락하는 한도내에서 백업을 할 경우에 디스크 액세스가 많아져서 서비스에 지장을 초래할 수
있다면 대역폭 제한 옵션을 사용해보자.

 
# rsync -av --progress conf.tar.gz 192.168.123.11::conf_bak
building file list ...
1 file to consider
conf.tar.gz
    70633661 100%   11.05MB/s    0:00:06  (1, 100.0% of 1)

sent 70642382 bytes  received 36 bytes  10868064.31 bytes/sec
total size is 70633661  speedup is 1.00
 


위는 대역폭이 허용하는 한도내(11.05MB/s)에서 rsync가 이뤄졌다. --bwlimit= 의 단위는 KBPS 이며,
--progress 는 sync되는 진행상태를 보여준다.

 
# rsync -av --bwlimit=1024 --progress conf.tar.gz 192.168.123.11::conf_bak
building file list ...
1 file to consider
conf.tar.gz
    70633661 100% 1017.27kB/s    0:01:07  (1, 100.0% of 1)

sent 70642382 bytes  received 36 bytes  1031276.18 bytes/sec
total size is 70633661  speedup is 1.00
 


2. 특정 시간 이후(또는 특정월)의 파일만 sync하는 방법

하나의 디렉토리에 년월일 구분없이 데이터가 계속 쌓이고 있다고 가정해보자.
그러나 백업을 할 때는

1) 최근 30일 동안 추가 및 변경된 파일만 sync되기를 원하거나
2) 2006년 5월 자료와 6월 자료를 별도 디렉토리로 sync되기를 원한다면

find 명령과 rsync의 --files-from= 옵션을 함께 사용하여 구현해볼 수 있다. --files-from= 옵션은
rsync 2.6.0 버전부터 추가되었으니 이전 버전을 사용하면 http://rsync.samba.org/ 에서 받아 업그레이드
하면 된다.

 
원본 ----> 백업본

DIR  ----> BAK_DIR/01/ (2006.1월 자료)
     ----> BAK_DIR/02/ (2006.2월 자료)
     ----> BAK_DIR/03/ (2006.3월 자료)
     ----> BAK_DIR/04/ (2006.4월 자료)
     ----> BAK_DIR/05/ (2006.5월 자료)
     ----> BAK_DIR/06/ (2006.6월 자료)
 



1) 최근 30일 자료만 모아서 dest/ 로 sync 할 때

 
find . -type f -mtime -30 -print | rsync -av --files-from=- . dest/
 


2) 2006.6월 파일들(수정일 기준)만 특정 서버로 sync를 할 때

 
find . -type f -printf "%TY_%Tm %p\n"|grep "^2006_06"|sed "s/^2006_06 //g" | rsync -av --files-from=- . 192.168.123.2::bak_dir/06
 


find 명령으로 목록을 얻은 후 -> 2006.6월 파일 목록만 grep으로 목록을 뽑아 -> rsync를 한다.
192.168.123.2 서버에는 rsync 데몬이 동작하고, rsyncd.conf에 [bak_dir] 이름의 설정이 있어야 한다.
위에서 사용한 find 의 -printf 옵션에 대해서는 find man 페이지나
http://coffeenix.net/board_view.php?bd_code=36 (유용한 find 명령어 예 모음, 글 좋은진호)을 참고한다.

이를 간단한 스크립트로 작성한 예이다. 년월지정없이 전날의 년월을 기준으로 sync를 한다.

 
#!/bin/bash
#
# by 좋은진호(truefeel)
                                                                                                  
# 하루 전날의 YYYY_MM
DATE=`date --date '1 days ago' '+%Y_%m'`
MM=`  date --date '1 days ago' '+%m'`
                                                                                                  
#
SRC_DIR="/data"
DEST_DIR="192.168.123.2::bak_dir/$MM"
                                                                                                  
#
cd $SRC_DIR
find . -type f -printf "%TY_%Tm %p\n"| grep "^$DATE"|sed "s/^$DATE //g" |rsync -av --files-from=- . $DEST_DIR
 


3. 특정 파일 크기 이하 또는 이상의 파일은 제외하는 방법

--max-size=, --min-size= 옵션으로 특정 크기 이상의 파일은 제외(--max-size=)하거나 이하의 파일은 제외
(--min-size=)할 수 있다. --max-size= 는 rsync 2.6.4부터, --min-size= 는 2.6.7부터 추가된 옵션이다.

Trackback 0 Comment 0