用 KooCLI 与 OBS 做一套轻量增量备份

举报
yd_285894438 发表于 2026/10/22 00:31:42 2026/10/22
【摘要】 不写一行 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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。