最近服务器不太稳定,有点担心里面的数据会不会丢失,于是写了下面这个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
!/usr/bin/env bash

SRC="user@example.com:dir1 :dir2 :dir3"
DST=/dir/to/backups

rm -rf $DST/backup.3

mv -f $DST/backup.2 $DST/backup.3

mv -f $DST/backup.1 $DST/backup.2

mv -f $DST/backup.0 $DST/backup.1

rsync -aLK --delete --progress --link-dest=$DST/backup.1 --log-file=$DST/log.txt $SRC $DST/backup.0

脚本很简单,滚动备份,保留最近3次的历史备份,并且使用硬链接来减少不必要的磁盘空间消耗。其中 rsync 各个选项意义如下:-L 表示将符号链接转换为实际文件或目录,-K表示将本地的符号链接视作文件/目录,--delete 表示删除本地多余的文件。

使用前最好先创建好 $DST/backup.{0,1,2,3} 的空目录,不然 mv 会报错。

用 crontab 设置好定时任务即可定时备份:

1
@weekly /dir/to/backup.sh