| 기존에 svn저장소를 gmail로 백업을 구성 했을 때는 저장소를 항상 전체 백업을 하도록 했었다. 아직은 저장소가 크지 않아서 큰 문제는 없지만 백업후 압축을 하는데 너무 많은 시간이 걸려서 증분백업을 하도록 구성 했다. 일단 증분백업은 하루단위로 백업을 수행하고, 전체 백업은 일주일에 한번만 백업하도록 구성했다. 증분백업을 하기 위해서는 백업을 한 리비전 정보를 저장해 놓아야지만 다음 백업시 이를 이용하여 추가된 리비전만 백업이 가능하다. 그런 일을 해주는 것에 svnlook이라는 것이 있다. 이를 이용하면 인자로 주어지는 저장소의 최근 리비전을 출력해준다. 이 리비전을 이용하여 저장소 덤프시 전에까지 저장한 리비전과 svnlook이 리턴한 리비전까지 백업을 수행해주면 된다. 아래는 이를 이용한 쉘스크립트이다. #!/bin/sh svnrepos="/var/svn/chadr" lastrevfile="svnbackup_lasttrev" date="$(date +%y%m%d)" lastrev=`svnlook youngest ${svnrepos}` prevrev=`cat ${lastrevfile}` nextrev=`expr ${prevrev} + 1` md5sumfile="svnbackup_inc.md5" backupdir="tmp_svnbackup_inc" emailaddr="chadr@a.com" adminemailaddr="chadr@a.com" dumpfile="dumpfile_${nextrev}_${lastrev}.${date}" if [ $nextrev -gt $lastrev ] then mutt -F .mutt-local -s svnbackup_skipped_inc_norev_${date} ${adminemailaddr} < svn_muttbody echo "dose not exist more revision to backup." exit fi echo "next revision : ${nextrev}" echo "last revision : ${lastrev}" mkdir ${backupdir} echo "dumping svn repositary..." svnadmin dump --incremental --revision ${nextrev}:${lastrev} ${svnrepos} > ${dumpfile} echo "dump completed." touch ${md5sumfile} oldMD5=`cat ${md5sumfile}` newMD5=`md5sum ${dumpfile}` newMD5=${newMD5:0:32} echo "oldMD5 : ${oldMD5}" echo "newMD5 : ${newMD5}" if [ $oldMD5 = $newMD5 ] then mutt -F .mutt-local -s svnbackup_skipped_inc_${date} ${adminemailaddr} < svn_muttbody echo "already backuped revision... exit." else echo "compressing..." 7za a -mx9 -mmt -v9m ${backupdir}/[dev.dalmuri.net.var.svn.chadr]${dumpfile}_inc_${nextrev}_${lastrev}.7z ${dumpfile} cd ${backupdir} echo "" echo "file list of sending." count=0 for file in $(ls) do echo "${file}" count=`expr $count + 1` done echo "" i=1 #send email for file in $(ls) do echo "sending to ${emailaddr}...(${i}/${count}) ${file}" mutt -F ../.mutt-local -a ${file} -s svnbackup_inc_${nextrev}_${lastrev}_${date}_[${i}/${count}] ${emailaddr} < ../svn_muttbody echo "sending completed. ${file}" i=`expr $i + 1` done mutt -F ../.mutt-local -s svnbackuped_inc_${nextrev}_${lastrev}_${date} ${adminemailaddr} < ../svn_muttbody echo "all sending completed." cd .. echo "${newMD5}" > ${md5sumfile} echo "${lastrev}" > ${lastrevfile} fi #delete tmp dir rm -rf ${backupdir} rm ${dumpfile} |





댓글을 달아 주세요
perl로 만들어놓은 것도 있는데...
나도 증분 백업으로 cron 돌려놓으려다가...
그냥 mirror disk 믿고, 한달에 한번만 백업하는 중 -_-;