问题描述:

将本地工作站(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
[]