个人自用数据备份脚本 (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` 变量,并确保新位置有足够的读写权限和空间)。