2012年7月18日 星期三

Unison file-synchronization tool SOP


Unison file-synchronization tool SOP


1.       下載相關套件 (請注意OS版本)
OCaml compiler : http://caml.inria.fr/download.en.html
Unison : http://www.cis.upenn.edu/~bcpierce/unison/download.html

2.       安裝套件 (unison若為使用同一份source,請先執行make clean)
OCaml compiler : 直接RPM安裝即可

Unison : 解TAR之後修改Makefile下的INSTALLDIR = /usr/local/unison/bin/
修改完後存檔離開,先建立資料夾mkdir –p /usr/local/unison/bin/,建立資料夾後直接make;make install

※     /usr/local/unison/bin/資料夾要自行手動建立,程式不會自動產生,注意Makefile的路徑後面不要有空格,否則make install時會出現錯誤,檢查方式為/usr/local/unison/bin/下若只有一個檔案,表示Makefile的路徑有問題,造成檔案無法正常複製到路徑下

3.       copy script範本並修改

Script內容 (注意紅字部分的修改,每個網站不同)
#!/bin/bash

DATE=`date +'%Y%m%d'`
TIME=`date +'%H%M'`
HOSTNAME=`hostname -a | tr -d " "`
REMOTE_DIR=/pda
LOCALHD=/backuphd/pdawb
HOME=/root
LOG=/var/log/unison.log
SNAPSHOT=/backuphd/pdawb/.snapshot/$DATE/$TIME
UNISON=/usr/local/unison/bin/unison
OLDDATE=`date -d '7 day ago' +%Y%m%d`
OLDSNAPSHOT=/backuphd/pdawb/.snapshot/$OLDDATE
DU=`du -s -h $LOCALHD`

##### Create Snapshot Directory
if [ ! -d "$SNAPSHOT" ];then
    mkdir -p $SNAPSHOT
fi
##### Create Snapshot
TIME=`date +'%Y%m%d %H:%M:%S'`
echo "Start Create Snapshot at $TIME" > $LOG
cp -apl $LOCALHD/* $SNAPSHOT
TIME=`date +'%Y%m%d %H:%M:%S'`
echo " " >> $LOG
echo "Create Snapshot Done at $TIME" >> $LOG
echo " " >> $LOG
##### run unison
echo "Change File List: " >> $LOG
$UNISON -silent -batch -owner -group -times $REMOTE_DIR $LOCALHD -force $REMOTE_DIR -logfile $LOG >> /var/log/messages 2>&1
echo " " >> $LOG
#####delete old snapshut
rm -rf $OLDSNAPSHOT
##### check backup status
DATE=`date +'%Y%m%d'`
TIME=`date +'%Y%m%d %H:%M:%S'`
TIME1=`date +'%H%M'`
FOLDERPATH=/backuphd/pdawb/.snapshot/$DATE
FOLDERLIST=`ls -lh /backuphd/pdawb/.snapshot/$DATE/ | awk '{print $6,$7,$8,$9}'`
echo "Folder List: " >> $LOG
ls -lh $LOCALHD | awk '{print $5"\t"$6"\t"$7"\t"$8"\t"$9}' >> $LOG
echo " " >> $LOG
echo "Total Usage: $DU" >> $LOG
echo " " >> $LOG
echo "Unison Done at $TIME" >> $LOG
echo " " >> $LOG
echo "Check Folder Path : $FOLDERPATH" >> $LOG
echo " " >> $LOG
echo "Check Folder List :" >> $LOG
echo "$FOLDERLIST" >> $LOG
##### mail to
HOURSET=`date +'%H'`
TIME=`date +'%Y%m%d-%H:%M:%S'`
MAILLIST= "XXXX@XXX.XXX"
if [ $HOURSET -eq 4 ] || [ $HOURSET -eq 8 ] || [ $HOURSET -eq 12 ] || [ $HOURSET -eq 16 ] || [ $HOURSET -eq 20 ] || [ $HOURSET -eq 00 ]; then
   mail -s ''$HOSTNAME' unison Backup Status-'$TIME'' $MAILLIST < $LOG
fi

修改完畢存檔後建立備份資料夾 mkdir /backuphd/pdawb
並手動執行一次unison,讓/root/.unison/default.prf產生

執行完畢之後,編輯/root/.unison/default.prf,加入要排除的資料夾
ex:
        ignore = Name {.snapshot}
        ignore = Name {public}


修改完畢後,手動執行一次unison,做第一次同步
/usr/local/unison/bin/unison -batch -owner -group -times /pda /backuphd/pdawb -force /pda -logfile /var/log/unison.log
語法:
/usr/local/unison/bin/unison -batch -owner -group -times /pda /backuphd/pdawb -force /pda -logfile /var/log/unison.log
Unison command [預設回應] [同步onwer權限] [同步group權限] [同步檔案時間] [遠端資料夾] [目的資料夾] [強制設定來源] [log檔案路徑]

加入crontab,重啟service


注意事項:
1.       若不指定執行時的profile,unison預設會採用/root/.unison/default.prf當成profile,若有多個資料夾要備份,可編輯不同的profile,執行時加入profile name即可,此處以managermx為範例說明,請注意紅字部分

#!/bin/bash
DATE=`date +'%Y%m%d'`
TIME=`date +'%H%M'`
HOSTNAME=`hostname -a | tr -d " "`
REMOTE_DIR=/manager
LOCALHD=/backuphd/manager
HOME=/root
PROFILE=manager.prf
LOG=/var/log/unison-manager.log
SNAPSHOT=/backuphd/manager/.snapshot/$DATE/$TIME
UNISON=/usr/local/unison/bin/unison
OLDDATE=`date -d '7 day ago' +%Y%m%d`
OLDSNAPSHOT=/backuphd/manager/.snapshot/$OLDDATE
DU=`du -s -h $LOCALHD`
##### Create Snapshot Directory
if [ ! -d "$SNAPSHOT" ];then
    mkdir -p $SNAPSHOT
fi
##### Create Snapshot
TIME=`date +'%Y%m%d %H:%M:%S'`
echo "Start Create Snapshot at $TIME" > $LOG
cp -apl $LOCALHD/* $SNAPSHOT
TIME=`date +'%Y%m%d %H:%M:%S'`
echo " " >> $LOG
echo "Create Snapshot Done at $TIME" >> $LOG
echo " " >> $LOG
##### run unison
echo "Change File List: " >> $LOG
$UNISON $PROFILE -silent -batch -owner -group -times $REMOTE_DIR $LOCALHD -force $REMOTE_DIR -logfile $LOG >> /var/log/messages 2>&1
echo " " >> $LOG

沒有留言:

張貼留言