前不久因 CloudCone VPS 故障,导致我的 VPS 无法使用。万幸的是我一直有设置备份,恢复一下数据都还在。看来数据备份的确很重要,按照 3-2-1 原则,我再增加一个备份方式,增加一层保险。
之前的脚本是从 VPS 推送到备份服务器,这次的脚本是从备份服务器向远程拉取。
准备
先配置无密码 ssh 登录成功。
脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #!/bin/bash
set -euo pipefail
REMOTE_SOURCE_DIRS=("/root" "/etc")
LOCAL_DEST_BASE="/mnt/disk/backups"
REMOTE_HOST="remote_host"
SSH_PORT=22
SSH_USER="root"
DEST_DIR="${LOCAL_DEST_BASE}/${REMOTE_HOST}"
TODAY=$(date +'%Y%m%d')
YESTERDAY=$(date -d "yesterday" +'%Y%m%d')
EXPIRED_DAYS=7
echo "## [$(date +'%Y-%m-%d %H:%M:%S')] Starting backup from [${REMOTE_HOST}]..."
mkdir -p "${DEST_DIR}"
for REMOTE_SRC in "${REMOTE_SOURCE_DIRS[@]}"; do
rsync -avzh --ignore-missing-args --delete --link-dest="${DEST_DIR}/${YESTERDAY}/" -e "ssh -p ${SSH_PORT}" "${SSH_USER}@${REMOTE_HOST}:${REMOTE_SRC}" "${DEST_DIR}/${TODAY}/"
done
echo "## [$(date +'%Y-%m-%d %H:%M:%S')] Data transferred. Deleting expired files..."
find "${DEST_DIR}" -maxdepth 1 -daystart -mtime +"${EXPIRED_DAYS}" -exec rm -rvf {} \+
echo "## [$(date +'%Y-%m-%d %H:%M:%S')] Job done!"
|
Author
winsphinx
LastMod
2026-02-16
(2daa816b)
[原创] backup
License
