个人自用数据备份脚本 (Rclone)

一个强大、灵活且高度可配置的命令行工具,通过 Rclone 将您的重要数据安全地备份到多个云端。

核心备份流程

📁

本地文件

⚙️

脚本处理

压缩 / 同步

🚀

Rclone

☁️

多云存储

⏱️

智能自动备份

只需设置一次备份间隔天数,配合 Cron Job,脚本即可智能判断并自动执行备份,无需手动干预。

🚀

一键手动备份

需要立即备份?通过菜单选择“手动备份”,即可随时触发一次完整的备份上传流程。

☁️

多云存储支持

全面支持 S3 兼容存储(如 Cloudflare R2)和通用的 WebDAV 协议,通过 Rclone 实现更多服务。

🔔

Telegram 消息通知

备份过程、成功或失败,以及保留策略执行结果,都会通过 Telegram 机器人实时通知。

🗑️

智能备份保留策略

支持按数量或按天数自动清理云端旧备份,有效管理存储空间,避免占用过多资源。

🖥️

友好的命令行界面

清晰的菜单结构和详细的提示信息,即使是命令行新手也能轻松上手,告别复杂命令。

归档模式 vs. 同步模式

该图表直观地比较了两种核心备份模式在不同维度上的优劣势,帮助您根据需求做出最佳选择。

安装与设置

请按照以下步骤将脚本安装到您的系统并进行初步设置。

第一步:保存脚本文件

在您的终端中,创建一个名为 `personal_backup_rclone.sh` 的文件。例如,将其保存在您的主目录 (`~`) 下:

nano ~/personal_backup_rclone.sh

将脚本的最新代码完整复制并粘贴到 `nano` 编辑器中。保存并退出 `nano`:按下 `Ctrl + X`,输入 `Y`,然后按 `Enter`。

第二步:给予脚本执行权限

在终端中执行以下命令,使脚本可运行:

chmod +x ~/personal_backup_rclone.sh

第三步:设置快捷启动 (可选,但推荐)

为了方便每次输入 `bf` 即可运行脚本,请在您常用的 Shell 配置文件(如 `~/.bashrc` 或 `~/.zshrc`)中添加一个别名:

nano ~/.bashrc  # 或 nano ~/.zshrc

滚动到文件底部,添加以下行:

alias bf='bash ~/personal_backup_rclone.sh'

注意:如果 `personal_backup_rclone.sh` 文件不在您的主目录,请替换为其实际的完整路径。保存并退出 (`Ctrl + X`, `Y`, `Enter`)。使配置立即生效:

source ~/.bashrc  # 或 source ~/.zshrc

或者,直接关闭并重新打开终端。

第四步:安装脚本依赖

首次运行脚本时,它会检测并提示您安装缺失的依赖项。您也可以手动安装。

Debian/Ubuntu 系统:

sudo apt update && sudo apt install zip unzip tar realpath coreutils curl rclone less -y

CentOS/RHEL 系统:

sudo yum install zip unzip tar coreutils curl rclone less -y

sudo dnf install zip unzip tar coreutils curl rclone less -y

macOS 系统 (使用 Homebrew):

brew install zip unzip tar coreutils curl rclone less

在执行安装命令时,系统可能会要求输入 `root` 密码。

Rclone 的安装也可以通过脚本的 `[8. Rclone 安装/卸载]` 菜单选项来完成。

第五步:设置 Cron Job (实现自动备份)

为了让自动备份功能生效,您需要设置一个 Cron Job,让它每天定期运行您的脚本来检查是否到了备份时间。

在终端中打开 Cron 表编辑器:

crontab -e

如果之前有设置过旧的备份 Cron 任务,请务必将其删除。在文件底部添加以下一行新的 Cron Job 条目:

0 0 * * * bash /root/personal_backup_rclone.sh check_auto_backup > /dev/null 2>&1

重要:请务必将 `/root/personal_backup_rclone.sh` 替换为您脚本的**实际完整路径**。这行 Cron Job 的含义是:每天的午夜 00:00,执行您的备份脚本并带上 `check_auto_backup` 参数。脚本会根据您设定的间隔智能判断是否需要备份。保存并退出 Cron 表 (`Ctrl + X`, `Y`, `Enter`)。

解释这行 Cron Job:

  • `0 0 * * *`: 这表示每天的午夜 00:00(即凌晨 12 点)执行。
    • 第一个 `0`: 每小时的第 0 分钟。
    • 第二个 `0`: 每天的第 0 小时。
    • `* * *`: 每天、每月、每周的每一天。
  • `bash /root/personal_backup_rclone.sh check_auto_backup`: 这是要执行的命令,即运行您的 Bash 脚本,并传递 `check_auto_backup` 参数,让脚本以自动备份模式运行。
  • `> /dev/null 2>&1`: 这会将脚本的所有标准输出 (stdout) 和标准错误 (stderr) 重定向到 `/dev/null`,意味着这些输出将不会显示在终端或邮件中,以避免 Cron 任务产生过多的输出。

使用方法

安装完成后,您可以在终端中输入 `bf` 来启动脚本。了解脚本菜单中每一个选项的功能和用法。

脚本启动后,您将看到一个清晰的主菜单(在终端中将带有颜色和边框效果):

================ 个人自用数据备份 (Rclone) ================
━━━━━━━━━━━━━━━━━━━ 状态总览 ━━━━━━━━━━━━━━━━━━━
上次备份: 202X-XX-XX XX:XX:XX 或 从未
下次预估: 202X-XX-XX XX:XX:XX 或 取决于间隔设置
备份模式: 归档模式/同步模式    备份源: X 个    已启用目标: X 个
━━━━━━━━━━━━━━━━━━ 功能选项 ━━━━━━━━━━━━━━━━━━
 1. 自动备份与计划任务 (间隔: X 天)
 2. 手动备份
 3. 自定义备份路径与模式
 4. 压缩包格式与选项 (当前: ZIP/TAR.GZ 或 ZIP (有密码))
 5. 云存储设定 (Rclone)
 6. 消息通知设定 (Telegram, 当前: 已启用/已禁用)
 7. 设置备份保留策略 (当前: 无保留策略/保留 X 个/保留 X 天)
 8. Rclone 安装/卸载 (Rclone 版本信息或未安装)
 9. 从云端恢复到本地 (仅适用于归档模式)
 10. [助手] 配置导入/导出
 11. 日志与维护
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 0. 退出脚本
 99. 卸载脚本
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
请输入选项:

您可以通过输入对应的数字选项来执行功能。

此功能是实现“无人值守”备份的核心。您需要进行两步设置:

  • 设置自动备份间隔:定义脚本两次自动备份之间的天数。例如,设置为 7,则脚本每隔 7 天会自动执行一次备份。
  • 配置 Cron 定时任务:设置一个系统级的定时任务,让它每天(通常在凌晨)运行一次脚本。脚本被触发后,会检查距离上次备份是否已达到您设定的间隔天数,从而决定是否执行备份。脚本内置了助手来简化 Cron 任务的添加。

选择此选项会立即触发一次完整的备份流程,不受自动备份间隔的限制。这对于在进行重要更改后立即备份数据非常有用。脚本会按照您当前的所有配置(备份模式、路径、压缩、云端目标等)执行操作,并将详细的日志实时输出到终端。

这是配置备份“什么”和“如何备”的关键。您可以:

  • 添加/管理备份路径:指定一个或多个要备份的文件或文件夹的绝对路径。
  • 设置备份模式:在“归档模式”(打包压缩后上传)和“同步模式”(直接同步文件结构)之间切换。
  • 设置打包策略 (仅归档模式):当有多个备份源时,选择将它们分别打包(生成多个文件),还是将所有源合并打包成一个大包。

在“归档模式”下,您可以精细控制压缩行为以平衡效率和安全性:

  • 切换压缩格式:在 `.zip` 和 `.tar.gz` 之间选择。
  • 设置压缩级别:范围从 1(最快,压缩率低)到 9(最慢,压缩率高)。
  • 设置 ZIP 密码:为您的 `.zip` 备份文件添加一层额外的密码保护。

这是脚本的“大脑”,负责连接和管理所有云端目的地。一个“备份目标”由两部分组成:`远程端名称:路径`。

  • 管理备份目标:添加、删除、修改和启用/禁用您的云端备份路径。您可以同时向多个已启用的目标进行备份。
  • Rclone 远程端创建助手:一个交互式向导,能帮助您快速配置 S3、WebDAV、SFTP 等多种常见的云存储服务,无需深入了解 Rclone 的复杂命令。
  • 连接测试:验证您配置的远程端是否可以正常连接。
  • 带宽限制:如果您的服务器带宽有限,可以设置此项来限制备份时占用的上传/下载速度。
  • 完整性校验:强烈建议开启。上传完成后,脚本会再次检查云端文件与本地文件是否一致,确保数据在传输过程中没有损坏。

配置此功能后,脚本会在关键步骤(如备份开始、成功、失败、保留策略执行等)通过您的 Telegram 机器人发送实时通知。您需要从 `@BotFather` 获取一个 Bot Token,并找到您的 Chat ID 来完成设置。

获取 Bot Token:

  • 通过 Telegram 搜索 `@BotFather`,并按照提示创建一个新的机器人,它会提供给您 Bot Token。

获取 Chat ID:

  • 向您的机器人发送一条消息,然后访问 `https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates`(将 `<YOUR_BOT_TOKEN>` 替换为您的 Bot Token)。在返回的 JSON 中查找 `chat` 对象里的 `id` 字段,这就是您的 Chat ID(通常以 `-` 开头)。

选择此选项以配置云端备份文件的保留策略,帮助您管理存储空间并自动清理旧的备份。

您可以选择以下两种策略之一:

  • 按数量保留:只保留最新的 N 个备份文件。例如,设置为 5,则在每次新备份完成后,如果总数超过 5 个,最旧的备份将被删除。
  • 按天数保留:只保留最近 N 天内的备份文件。例如,设置为 30,则任何创建时间超过 30 天的备份文件都将被删除。

您也可以选择关闭保留策略,这意味着所有上传到云端的备份都将一直保留,直到您手动删除。此设置会保存到 `~/.personal_backup_config` 文件中。

此菜单提供 Rclone 程序的管理选项:

  • 安装或更新 Rclone:自动从 `rclone.org` 下载并执行官方安装脚本,安装或更新 Rclone。
  • 卸载 Rclone:从系统中移除 Rclone 程序本体。

如果发生数据丢失,您可以使用此功能轻松地从云端恢复数据。该功能仅适用于“归档模式”下创建的备份文件。

  • 脚本会列出您所有已启用的 Rclone 目标。
  • 选择一个目标后,脚本会列出该目标下的所有归档备份文件(`.zip` 或 `.tar.gz`)。
  • 选择您要恢复的文件,脚本会将其下载到本地。
  • 您可以选择将下载的文件解压到指定目录,或仅查看其内容。如果 ZIP 文件已加密,系统会提示您输入密码。

此功能允许您导出或导入脚本的所有配置设置:

  • 导出配置到文件:将当前的所有设置保存到一个 `.conf` 文件中,方便迁移或备份。
  • 从文件导入配置:从指定的 `.conf` 文件中加载配置,覆盖当前设置。

管理脚本的日志行为和查看日志文件:

  • 设置日志级别:分别为终端输出和文件记录的日志详细程度(DEBUG, INFO, WARN, ERROR)。
  • 查看日志文件:使用 `less` 命令分页查看脚本的运行日志。

安全退出脚本。

此选项会提示您是否确认卸载脚本。如果确认,脚本将删除自身文件、配置文件 (`~/.config/personal_backup_rclone/config`) 和日志文件 (`~/.local/share/personal_backup_rclone/log.txt`)。

注意:如果您通过别名 (`alias bf=...`) 或将脚本移动到 `PATH` 目录来启动它,您需要手动删除这些别名或文件。

常见问题与故障排除

遇到问题了?在这里查找解决方案。

原因: 这通常是由于在复制粘贴脚本代码时,引入了不可见的特殊字符(如不间断空格 `\u00A0`),或者文件编码/换行符格式问题(例如在 Windows 系统下编辑后上传到 Linux)。Bash 无法识别这些隐藏字符。

解决方案:

  • 重新复制粘贴:最彻底的方法是再次从 GitHub 仓库中复制 `personal_backup_rclone.sh` 的内容。
  • 使用 `nano` 编辑器:在 Linux 终端中,用 `nano ~/personal_backup_rclone.sh` 打开文件。
  • 清空内容:在 `nano` 中按住 `Ctrl + K` 连续删除所有旧代码。
  • 粘贴新代码:使用 `Ctrl + Shift + V` (Linux) 或 `Cmd + V` (macOS) 粘贴最新、干净的代码。
  • 清除换行符 (可选):保存并退出后,可以尝试运行 `dos2unix ~/personal_backup_rclone.sh` 命令(如果系统没有,先安装 `sudo apt install dos2unix`)。
  • 避免跨系统编辑:尽量避免在 Windows 系统上编辑此脚本,直接在 Linux 终端中操作。

原因: 您的系统缺少运行备份功能所需的工具。

解决方案: 按照脚本提示,根据您的操作系统类型,在终端中运行相应的安装命令。

  • Debian/Ubuntu:`sudo apt update && sudo apt install zip unzip tar realpath coreutils curl rclone less -y`
  • CentOS/RHEL:`sudo yum install zip unzip tar coreutils curl rclone less -y` (或 `sudo dnf install zip unzip tar coreutils curl rclone less -y`)
  • macOS (使用 Homebrew):`brew install zip unzip tar coreutils curl rclone less`

确保所有必要的工具都被安装后,再次运行脚本。

原因:

  • Rclone 远程端配置信息(如 Access Key, Secret Key, Endpoint URL, 用户名, 密码等)输入错误。
  • Rclone 远程端名称或目标路径不正确。
  • 网络连接问题,无法访问云存储服务。
  • 云服务提供商的防火墙规则阻止了连接。

解决方案:

  • 仔细检查您在脚本菜单 [5. 云存储设定 (Rclone)] -> [1. 查看、管理和启用备份目标] 或 [2. [助手] 创建新的 Rclone 远程端] 中输入的各项信息,确保它们与您的云服务提供商提供的信息完全一致。
  • 使用菜单 [5. 云存储设定 (Rclone)] -> [3. 测试 Rclone 远程端连接] 来诊断连接问题。
  • 对于某些需要浏览器认证的 Rclone 类型(如 Google Drive, Dropbox),您可能需要手动在终端运行 `rclone config` 命令进行配置。
  • 检查服务器的防火墙设置,确保允许对外访问云存储服务端口。

原因:

  • Telegram Bot Token 或 Chat ID 不正确。
  • 网络连接问题,无法访问 Telegram API。
  • Bot 被停止或权限不足。

解决方案:

  • 仔细核对您在“消息通知设定”中输入的 Bot Token 和 Chat ID。
  • 确保您的服务器可以访问 `api.telegram.org`。
  • 在 Telegram 中检查您的机器人是否正常运行,并确保它有向您发送消息的权限。

原因: 在“归档模式”下,脚本会在临时目录创建压缩文件。如果待备份的数据量很大,临时目录所在的分区可能没有足够的空间。

解决方案:

  • 清理临时目录所在分区的空间。
  • 更改临时目录的默认位置(这需要修改脚本中的 `TEMP_DIR` 变量,并确保新位置有足够的读写权限和空间)。