本文介绍如何在CentOS上完成目录级文件备份,并通过rclone
上传至Google云盘、阿里云盘等,实现重要文件每日快照备份,便于在新机器或VW虚拟机中还原。
部署rclone
- 安装所需工具rclone:
curl https://rclone.org/install.sh | bash
- 按提示执行
rclone config
,输入n
(New remote)新建 - 输入名称:
gdrive
- 选择存储类型:
20
Google Drive - 根据流程创建client_id:https://rclone.org/drive/#making-your-own-client-id
- 选择权限:
1
完整访问权限 - 使用服务账户SA:
Enter
默认不使用 - 高级配置:
n
不使用 - 授权Google账户:
n
手动复制授权链接 - 在有图形界面的机器上,执行
rclone authorize "drive" "……"
完成账户授权,如提示尚未完成 Google 验证流程,则需在Google Auth Platform>目标对象中添加自己为测试用户,授权后终端返回的token填入下文! - 共享云端硬盘:
n
不使用 最后保存配置
name> gdrive Storage> 20 client_id> OAuth获取 client_secret> OAuth获取 scope> 1 service_account_file> Edit advanced config? y/n> n Use web browser to automatically authenticate rclone with remote? y/n> n config_token> 终端获取 Configure this as a Shared Drive (Team Drive)? y/n> n Keep this "gdrive" remote? y/e/d> y
- 测试连接:
rclone lsd gdrive:/
,返回根目录文件夹
定时备份任务
备份脚本
保存以下内容并添加权限chmod +x /usr/local/bin/system-backup.sh
#!/bin/bash
set -e
# 配置项
DATE=$(date +%F)
BACKUP_DIR="/backup"
BACKUP_FILE="$BACKUP_DIR/system-backup-$DATE.tar.gz"
LOG_FILE="/var/log/backup.log"
MAX_RETRY=3
# 日志输出
mkdir -p "$(dirname "$LOG_FILE")"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "[*] $(date '+%F %T') 开始备份任务"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 使用 tar 备份根目录(排除不必要的挂载点)
for ((i=1; i<=MAX_RETRY; i++)); do
echo "[*] 第 $i 次尝试打包备份..."
if tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/mnt --exclude=/media --exclude=/lost+found --exclude="$BACKUP_DIR" -czpf "$BACKUP_FILE" /; then
echo "[✓] 备份成功:$BACKUP_FILE"
break
else
echo "[!] 第 $i 次备份失败,600 秒后重试..."
sleep 600
fi
done
if [ $i -gt $MAX_RETRY ]; then
echo "[✗] 所有尝试均失败,终止脚本"
exit 1
fi
# 上传到 Google Drive
echo "[*] 上传至 Google Drive..."
rclone copy "$BACKUP_FILE" gdrive:/backup/
# 删除本地 7 天前的旧备份
echo "[*] 清理本地 7 天前的备份..."
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
# 删除 Google Drive 中 14 天前的旧备份
echo "[*] 清理 Google Drive 中 14 天前的旧备份..."
rclone delete --min-age 14d gdrive:/backup/ --include "*.tar.gz"
echo "[✓] 任务完成:$(date '+%F %T')"
定时任务
创建 Systemd 服务单元
/etc/systemd/system/backup.service
:[Unit] Description=Encrypted root filesystem backup [Service] Type=oneshot ExecStart=/usr/local/bin/system-backup.sh
创建 Systemd 定时器
/etc/systemd/system/backup.timer
:[Unit] Description=Run backup every 7 days [Timer] OnCalendar=weekly Persistent=true [Install] WantedBy=timers.target
启用并启动定时任务:
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable --now backup.timer
还原文件
下载备份文件并解压tar -xzp -C / -f centos-backup.tar.gz
评论已关闭