作者nknudragon (阿扁下台!)
看板Linux
标题[心得] Snapshot型 增量备份 backup
时间Fri May 11 12:59:41 2007
最近一直在烦恼linux 的备份方案
由於备份起来 要能够支援即时备援 所以弄起来特别烦恼
由於公司是使用NFS做档案集中管理 为了怕NFS server 档案故障
所以需要做每日 每天 甚至每小时的备份 不能压缩起来是因为怕NFS SERVER挂点了以後
要能够马上顶替着用
下面是CEO帮我写 然後我在改写一部份的script 与大家参考
#!/bin/csh -f
## this script is written by David
set DES = "/db/snapshot"
set DATE = `date +%H%M_%m%d%y`
set domain = `domainname`
set SNAP = "weekily.0/daily"
if ($#argv != 0) then
echo " "
if ( "$1" == "-h" ) then
echo " working in Hourily mode"
set SNAP = "hourily"
endif
if ( "$1" == "-d" ) then
echo " working in Daily mode"
set SNAP = "weekily.0/daily"
endif
if ( "$1" == "-w" ) then
echo " working in Weekily mode"
set SNAP = "weekily"
endif
endif
### test dir
if ( $user != "root" ) then
echo " ERROR: The Task must run by root "
exit
endif
if ( ! -d $DES ) then
echo " ERROR: Datebase cannot be seen, check snapshot dir "
exit
endif
if (! -f /stor13/In_d64 ) then
echo " ERROR: Datebase lost, check stor13 "
exit
endif
if (! -f /users/In_rh64 ) then
echo " ERROR: Datebase lost, check users"
exit
endif
if ( -d $DES/${SNAP}.5 ) then
echo " delete the oldest version of snapshot "
rm -rf $DES/${SNAP}.5 ## delete 5
echo " move the snapshot dir name + 1 "
endif
if ( -d $DES/${SNAP}.4 ) then
mv $DES/${SNAP}.4 $DES/${SNAP}.5 ## 4 --> 5
endif
if ( -d $DES/${SNAP}.3 ) then
mv $DES/${SNAP}.3 $DES/${SNAP}.4 ## 3 --> 4
endif
if ( -d $DES/${SNAP}.2 ) then
mv $DES/${SNAP}.2 $DES/${SNAP}.3 ## 2 --> 3
endif
if ( -d $DES/${SNAP}.1 ) then
mv $DES/${SNAP}.1 $DES/${SNAP}.2 ## 1 --> 2
endif
if ( -d $DES/${SNAP}.0 ) then
mv $DES/${SNAP}.0 $DES/${SNAP}.1 ## 0 --> 1
endif
## make hard link from snapshot DIR 1 --> 0
echo "make hard link from $DES/${SNAP}.1/to $DES/${SNAP}.0/"
cp -al $DES/${SNAP}.1/. $DES/${SNAP}.0/
echo " clear sync log for all mode"
rm -rf $DES/${SNAP}.0/snapshot_*
################################################
## now , start the backup
################################################
## in all mode , sync the users and ccase/ccase.tw
set task = "rsync -av --delete /users/ $DES/${SNAP}.0/users"
echo $task
$task
echo " " >! $DES/${SNAP}.0/snapshot_users_${DATE}
## in domain rdwic , sync the ccase
if ( $domain == "rdwic" ) then
set task = "rsync -av --delete /ccase/ $DES/${SNAP}.0/ccase"
echo $task
$task
echo " " >! $DES/${SNAP}.0/snapshot_ccase_${DATE}
endif
## in domain twrdwic , sync the ccase.tw
if ( $domain == "twrdwic" ) then
set task = "rsync -av --delete /ccase.tw/ $DES/${SNAP}.0/ccase.tw"
echo $task
$task
echo " " >! $DES/${SNAP}.0/snapshot_ccase.tw_${DATE}
endif
### in daily moe sync the rf mx
if ( $SNAP == "weekily.0/daily" ) then
set task = "rsync -av /mx/ $DES/${SNAP}.0/mx"
echo $task
$task
echo " " >! $DES/${SNAP}.0/snapshot_mx_${DATE}
endif
## in Weekily Mode , sync the stor13
if ( $SNAP == "weekily" ) then
set task = "rsync -av --delete /stor13/ $DES/${SNAP}.0/stor13"
echo $task
$task
echo " " >! $DES/${SNAP}.0/snapshot_stor13_${DATE}
endif
目前的缺点是
1. 在 hourily daily weekily 都会保留六份备份 weekily太多了
2. hourily 与 daily 的备份会事先取前一天的备分做一份所有档案的Hard link
再与伺服器资料作更新 这样子的作法是为了节省磁碟空间
假设 users 总共有 10G 那snapshot 下来的
hourily.0/users 与 hourily.1/users 各自有10G 但是却是指到同一份inode
daily 也是
但是 .... 要是inode挂掉的话 那备份全毁 所以
weekily的备份是不可以用hard link
可以先将上个星期的资料另外本机自己 sync一份到weekily.0
然後再与server 做RSYNC
其实这个用rsync的参数究可以办到了 但是我试验了很多事 都做不起来....
3. rsync的过程中是会print出来 希望用tee command同步抄写到
snapshot_stor13_${DATE} 档案里面 这样子就可以清楚知道SYNC了多少资料量
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.150.178
1F:推 tomex:小修正 daily,hourly, weekly, monthly, quarterly 05/17 00:50