mirror of
https://github.com/wolfydw/backup_OBS.git
synced 2026-05-08 06:37:02 +08:00
97 lines
2.3 KiB
Markdown
97 lines
2.3 KiB
Markdown
# backup_OBS
|
||
|
||
基于 `bash + obsutil` 的 OBS 备份脚本,包含备份上传和历史清理两个入口:
|
||
|
||
- `backup.sh`:打包目录、生成 `sha256`、上传到 OBS、下载远端校验文件做一致性校验
|
||
- `clean_backups.sh`:按文件名日期清理旧备份
|
||
- `lib/telegram.sh`:统一处理 Telegram 通知模板和发送逻辑
|
||
|
||
## 配置
|
||
|
||
先复制模板并填写实际配置:
|
||
|
||
```bash
|
||
cp env.conf.example env.conf
|
||
cp exclude.user.list.example exclude.user.list
|
||
```
|
||
|
||
重点配置项:
|
||
|
||
- `OBS_BUCKET`:OBS 桶名
|
||
- `LABEL`:机器或业务标识
|
||
- `BACKUP_DIRS`:要备份的目录,使用多行格式,每行一个目录
|
||
- `TG_BOT_TOKEN` / `TG_USER_ID`:Telegram 通知配置,可留空
|
||
|
||
`BACKUP_DIRS` 示例:
|
||
|
||
```bash
|
||
BACKUP_DIRS=$(cat <<'EOF'
|
||
/root/data
|
||
/root/.openclaw
|
||
/root/myapp
|
||
EOF
|
||
)
|
||
```
|
||
|
||
不再建议使用空格分隔的目录列表,因为路径中一旦包含空格,Shell 会把它拆坏。
|
||
|
||
## 使用方式
|
||
|
||
备份:
|
||
|
||
```bash
|
||
./backup.sh
|
||
```
|
||
|
||
仅做打包自检,不上传:
|
||
|
||
```bash
|
||
./backup.sh --dry-run
|
||
```
|
||
|
||
检查远端前缀是否可访问:
|
||
|
||
```bash
|
||
./backup.sh --verify
|
||
```
|
||
|
||
清理旧备份:
|
||
|
||
```bash
|
||
./clean_backups.sh --retain-days=5
|
||
```
|
||
|
||
## 排除规则
|
||
|
||
脚本会同时读取两个排除文件:
|
||
|
||
- `exclude.list`:默认排除规则,一般不用修改,可以提交 Git
|
||
- `exclude.user.list`:用户自定义排除规则,不提交 Git
|
||
- `exclude.user.list.example`:用户规则示例文件,可以提交 Git
|
||
|
||
默认规则仍然走 `tar --exclude-from`。
|
||
用户自定义规则现在会在实际备份目录里先做一次解析,再自动换算成归档路径,所以不需要你手动猜 tar 看到的相对路径。
|
||
如果某条用户规则当前没有命中任何实际路径,脚本会记录 `WARN`,但不会因此中止备份。
|
||
|
||
推荐写法 1:绝对路径
|
||
|
||
```text
|
||
/root/data/dify
|
||
```
|
||
|
||
推荐写法 2:通配模式
|
||
|
||
```text
|
||
*/.halo
|
||
```
|
||
|
||
对于 `*/xxxx` 这类规则,程序会在实际备份目录中先匹配命中的对象,再自动判断命中的是文件还是目录,因此用户不需要额外写一行 `/*` 来区分目录内容。
|
||
|
||
默认规则放在 `exclude.list`,业务自定义规则建议只写到 `exclude.user.list`。
|
||
|
||
更完整的默认规则、用户规则示例和配置模板,请直接查看:
|
||
|
||
- `exclude.list`
|
||
- `exclude.user.list.example`
|
||
- `env.conf.example`
|