一个够用就好的备份脚本
2026-08-05
试过几个备份工具,最后还是回到 tar + rclone。简单、没有依赖、出问题能一眼看出是哪一步。
#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%Y%m%d)
DEST=/var/backups/daily
mkdir -p "$DEST"
tar --zstd -cpf "$DEST/etc-$STAMP.tar.zst" -C / etc \
--exclude='etc/ssl/private' 2>/dev/null
# 数据库单独 dump,避免直接拷数据文件
docker exec -i db pg_dumpall -U postgres \
| zstd -q -o "$DEST/pg-$STAMP.sql.zst"
find "$DEST" -type f -mtime +7 -delete
rclone sync "$DEST" remote:vps-backup/daily --transfers 4
几个实践下来的点
- 备份文件一定要有日期,别用
latest.tar,出事时你分不清是新是旧; pg_dumpall比直接拷pgdata安全,虽然慢一点;- 删除旧文件放在同步之前,不然远端会留着已经删掉的备份;
- 最重要的:找一天真的恢复一次。没验证过的备份等于没有备份。
脚本丢进 cron,日志写到 journal,出问题在 journalctl -u backup 里能直接看。