VPS backup

why

VPS的家目录和一些重要目录很有必要备份,因此写了个脚本来实现。

how

以下代码说明:

  • 要备份目录可以设置多个,放在 SOURCE_DIRS 数组变量中
  • 定义好远端主机或设备的地址、端口和目录,提前设置好允许 ssh
  • 保留最近7个备份,自动删除旧的
#!/bin/bash

set -euo pipefail

# 设置变量
SOURCE_DIRS=("$HOME" "/etc")
DEST_DIR="/mnt/disk/backup/${HOSTNAME%%.*}/"
REMOTE_HOST="host"
SSH_PORT=22
TMP_BACKUP="/tmp/backup_$(date +'%Y%m%d%H%M%S').tar.gz"
EXPIRED_DAYS=7

echo "### Starting backup..."
tar -caf $TMP_BACKUP --absolute-names --transform "s|^/||" ${SOURCE_DIRS[@]} || true

echo "### Backup finished. Transferring data..."
rsync -avzh --remove-source-files -e "ssh -p $SSH_PORT" $TMP_BACKUP root@$REMOTE_HOST:$DEST_DIR

echo "### Data transferred. Deleting expired files..."
ssh -p $SSH_PORT root@$REMOTE_HOST "cd $DEST_DIR && (ls -t | tail -n +$[EXPIRED_DAYS+1] | xargs --no-run-if-empty rm -rvf)"

echo "### Job done!"

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注