why
上次写的备份 VPS 的那个脚本,采用的是 tar 打包。虽然节省了空间,但每次全量传输,比较费流量。故此这次采用了 rsync 的增量传输,只传送变动的文件。
how
直接上脚本:
#!/bin/bash
set -euo pipefail
# 设置变量
SOURCE_DIRS=("$HOME" "/etc")
DEST_DIR="/mnt/disk/backup/${HOSTNAME%%.*}/"
REMOTE_HOST="host"
SSH_PORT=22
TODAY=$(date +'%Y%m%d')
YESTERDAY=$(date -d "yesterday" +'%Y%m%d')
EXPIRED_DAYS=7
echo "### Starting backup..."
for SOURCE_DIR in "${SOURCE_DIRS[@]}"; do
rsync -avzh --delete --link-dest="$DEST_DIR$YESTERDAY" -e "ssh -p $SSH_PORT" "$SOURCE_DIR" "root@$REMOTE_HOST:$DEST_DIR$TODAY"
done
echo "### Data transferred. Deleting expired files..."
ssh -p "$SSH_PORT" "root@$REMOTE_HOST" "cd $DEST_DIR && find . -maxdepth 1 -mtime +$EXPIRED_DAYS -exec rm -rvf {} \+"
echo "### Job done!"

