使用 Rclone 对文件夹进行简易每日备份,以及使用 Restic 备份工具。
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镜像可以直接拉。