Rclone
Sync 同步。Rclone 它更多的是作为云同步工具。没有 Snapshots 快照版本管理功能。
简易备份的方式有 2 种,一种是用增量同步(只上传改变的文件)待备份文件夹,另一种是先将目标文件夹压缩为 zip 再上传压缩文件夹。
安装
sudo apt update
sudo apt install rclone
配置 rclone webdav
rclone config
然后根据提示,完成配置 remote 的 webdav 设置。
列出远程存储中的文件,测试是否配置和连接正常:
rclone ls <remote_name>:</path/to/remote/>
配置 rclone sftp/ssh
没有选择用 sftp 而是用了 webdav,是处于安全性的考虑。
rclone 支持 3 种身份验证方法:Password、Key file、ssh-agent
用 rclone 本身加载 Key file 时,仅能加载未加密(没有密码)的 key。而加载加密 OpenSSH 密钥的唯一方法是使用 ssh-agent。 https://rclone.org/sftp/#ssh-authentication
因为 rclone 不能在工具内部安全的保存密钥的密码,而创建未加密的密钥并不安全,此外为了一个全自动定时脚本而让 ssh-agent 始终存储密钥也不够安全。
压缩备份同步脚本
步骤是先将目标文件夹压缩为带密码的 zip 文件,再将整个压缩文件夹复制到远程。
先创建一下 ZIP 压缩文件密码:
echo "your_password_here" > /path/to/password_file
chmod 600 /path/to/password_file
每日同步zip_rclone_backup.sh脚本。将<>尖括号的部分替换为实际路径即可。
#!/bin/bash
set -euo pipefail
# Define source directory
SOURCE_DIR="</path/to/your/files>"
# Define zip
BACKUP_ZIP_DIR="</path/to/backup_local>"
ZIP_PASSWORD=$(cat "</path/to/password_file>")
# Define remote destination
REMOTE_NAME="<remote>"
REMOTE_DIR="</path/to/remote/directory>"
DATE_STR=$(date +'%Y-%m-%d_%H-%M')
BACKUP_ZIP_FILE="${BACKUP_ZIP_DIR}/backup_${DATE_STR}.zip"
mkdir -p "${BACKUP_ZIP_DIR}/logs"
# Zip
zip -P "${ZIP_PASSWORD}" -r ""${BACKUP_ZIP_FILE}" "${SOURCE_DIR}" > "${BACKUP_ZIP_DIR}/logs/zip_${DATE_STR}.log" 2>&1 || { echo "Zip failed"; exit 1; }
# Rclone Upload
rclone sync "${BACKUP_ZIP_DIR}" "${REMOTE_NAME}":"${REMOTE_DIR}" --verbose --progress --log-file="${BACKUP_ZIP_DIR}/logs/rclone_${DATE_STR}.log" || { echo "Rclone failed"; exit 1; }
# (Optionally) clean up locally old zip files
find "${BACKUP_ZIP_DIR}" -name "*.zip" -type f -mtime +7 -exec rm {} \; || { echo "Clean failed"; exit 1; }
如果只想要上传,而不希望删除远程的任何现有文件,就使用rclone copy命令。
使用 chmod +x backup_script.sh 来赋予脚本执行权限。
定时执行
打开 crontab 编辑器:
crontab -e
将其添加到 cron 中。例如每天凌晨 4 点执行一次备份。
0 4 * * * /path/to/your/script.sh
其他
--dry-run测试传输
使用 --dry-run 选项进行测试,这样会显示 rclone 将会做什么,但实际上不会执行传输操作。rclone copy --dry-run 和rclone sync --dry-run 都支持传输测试。
rclone check
测试两个目录(本地或远程)之间的同步是否正确。它会比较源目录和目标目录中文件的哈希值或文件大小,确保两者一致。rclone check local-dir remote:remote-dir
Restic
使用 Restic 进行备份。TODO 待补充
其他选择
- Duplicati
开源项目,是 Web 页面对操作更友好。但 CLI 命令行的支持在官方文档中就写了一页,感觉软件会更侧重于 GUI 而不是用于服务器的 CLI。项目有 Docker 镜像可以直接拉。