问题描述:
将本地工作站(Ubuntu)的数据向NAS备份,数据目前2T,扩充之后最大到12T。 虽然NAS上有一些可以实现备份的套件,但是均不好用(比如,active backup for business),传输速率慢,并且容易中断。 经过一番尝试之后,发现最基本的rsync反而最可行。
##### variables #####
NOW=$(date +%Y.%m.%d.%H:%M:%S) # time when script is run
RSYNCOPT=av # /usr/bin/rsync options
SERVER=10.0.0.1 # server ID
SCR=/media/data8t # the source directory
backup=/volume1/data8t # the destination directory
USER=yy #the user name at the server
HOSTNAME=purple # the name of the server
##### begin script #####
if ping -c 1 "$SERVER" ; then #测试服务器IP是否连通,是,返回1
if [[ -e "$SCR" ]] ; then #如果source文件夹存在,返回1
if ssh "$HOSTNAME" "[[ ! -e ${backup} ]]" ; then #登录服务器,如果备份文件夹不存在,返回1
ssh "$USER"@"$SERVER" "mkdir -p ${backup}" #登录服务器,创建备份文件夹
fi
if ssh "$HOSTNAME" "[[ -e ${backup}/current ]]" ; then #登录服务器,如果最近存在最近本分版本的链接,返回1
rsync -"$RSYNCOPT" --link-dest "$backup"/current/ "$SCR/" "$HOSTNAME":"$backup"/"$NOW"
#增量备份,将source文件夹和最近版本的本分对比,将新增文件存在备份文件中,注意是否在文件名后加/
ssh "$HOSTNAME" "rm -rf ${backup}/current" #登录服务器,删除已经比较过的current链接
else
rsync -"$RSYNCOPT" "$SCR" "$HOSTNAME":"$backup"/"$NOW" #如果current链接不存在,实现完整备份。
fi
ssh "$HOSTNAME" "ln -s ${backup}/${NOW} ${backup}/current" #登录服务器,创建最新备份的软连接
fi
fi
##### end script #####
在本地工作站中执行上面的bash文件
. backup.sh
另外,可以用crontab 命令实现定时执行上面的脚本。
参考:
https://www.linuxquestions.org/questions/linux-server-73/incremental-backups-with-rsync-link-dest-4175603276/">https://linuxconfig.org/how-to-create-incremental-backups-using-rsync-on-linux">
https://mp.weixin.qq.com/s/70KgkPXIjrt132sQaAxbpQ