用 KooCLI 与 OBS 做一套轻量增量备份
【摘要】 不写一行 SDK,用 KooCLI 的 sync 与生命周期规则实现目录级增量备份,附带定时任务与失败告警。
背景
日常运维里最容易被忽略的一环是备份。手工上传既费时又容易漏,本文用华为云 KooCLI 配合对象存储 OBS,写一个不到 80 行的 Bash 脚本,实现本地目录的增量同步备份,并加上过期清理与失败告警。
一、准备
安装 KooCLI 并完成初始化:
curl -fsSL https://hwcloudcli.obs.cn-north-4.myhuaweicloud.com/cli/latest/hcloud_install.sh -o hcloud_install.sh
bash hcloud_install.sh -y
hcloud configure init
创建桶(若已有可跳过):
hcloud obs create bucket --bucket=BUCKET_NAME --location=cn-north-4
二、增量同步脚本
OBS 的 sync 命令天然支持增量:只上传 mtime 或 size 发生变化的文件,配合 --delete 还能把源端已删除的对象同步清理掉。
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/data/app"
BUCKET="obs://BUCKET_NAME/backup/app"
LOG="/var/log/obs-backup.log"
log() { echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; }
log "start sync: $SRC_DIR -> $BUCKET"
hcloud obs sync "$SRC_DIR" "$BUCKET" \
--delete --flat=false --exclude="*.tmp;*.swp;cache/*" \
--jobs=8 --threshold=10MB 2>&1 | tee -a "$LOG"
log "sync done"
几个参数值得说明:--jobs=8 开 8 个并发上传,对小文件多的目录提升明显;--threshold=10MB 让 10MB 以上的文件走分片;--exclude 用分号分隔多个模式,能挡掉临时文件与缓存目录。
三、过期清理
备份不可能无限堆积。用桶的生命周期规则比在脚本里删对象更稳妥:
{
"Rules": [
{
"ID": "expire-old-backup",
"Filter": { "Prefix": "backup/app/" },
"Status": "Enabled",
"Expiration": { "Days": 30 }
}
]
}
应用规则:
hcloud obs lifecycle set obs://BUCKET_NAME --config=lifecycle.json
四、挂到定时任务
# 每天 02:30 执行
30 2 * * * /usr/local/bin/obs-backup.sh >> /var/log/obs-backup.cron.log 2>&1
五、失败告警
脚本跑没跑成功,得有反馈。退出码非 0 时推一条消息出去:
if ! /usr/local/bin/obs-backup.sh; then
curl -s -X POST "$WEBHOOK_URL" -H 'Content-Type: application/json' \
-d '{"msgtype":"text","text":{"content":"OBS 备份失败,请检查"}}'
fi
小结
整套方案没有一行 SDK 代码,全靠 KooCLI 的 sync 与生命周期规则。优点是依赖少、可审计、迁移成本低;缺点是精细控制(例如按文件哈希判断变更)不如自研脚本,但对绝大多数中小规模目录已经够用。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)