本文介绍如何在CentOS上完成目录级文件备份,并通过rclone上传至Google云盘、阿里云盘等,实现重要文件每日快照备份,便于在新机器或VW虚拟机中还原。

部署rclone

  1. 安装所需工具rclone:curl https://rclone.org/install.sh | bash
  2. 按提示执行rclone config,输入n(New remote)新建
  3. 输入名称:gdrive
  4. 选择存储类型:20Google Drive
  5. 根据流程创建client_id:https://rclone.org/drive/#making-your-own-client-id
  6. 选择权限:1完整访问权限
  7. 使用服务账户SA:Enter默认不使用
  8. 高级配置:n不使用
  9. 授权Google账户:n手动复制授权链接
  10. 在有图形界面的机器上,执行rclone authorize "drive" "……"完成账户授权,如提示尚未完成 Google 验证流程,则需在Google Auth Platform>目标对象中添加自己为测试用户,授权后终端返回的token填入下文!
  11. 共享云端硬盘:n不使用
  12. 最后保存配置

    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
  13. 测试连接: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')"

定时任务

  1. 创建 Systemd 服务单元 /etc/systemd/system/backup.service

    [Unit]
    Description=Encrypted root filesystem backup
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/system-backup.sh
  2. 创建 Systemd 定时器 /etc/systemd/system/backup.timer

    [Unit]
    Description=Run backup every 7 days
    
    [Timer]
    OnCalendar=weekly
    Persistent=true
    
    [Install]
    WantedBy=timers.target
  3. 启用并启动定时任务:

    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl enable --now backup.timer

还原文件

        下载备份文件并解压tar -xzp -C / -f centos-backup.tar.gz