Linux备份需主动配置回收策略,核心是在写入新备份前清理旧备份或限制总空间:一是用borgbackup等工具自带轮转机制;二是rsync配合时间戳目录与find清理;三是定时任务结合磁盘空间判断自动删 oldest;四是通过文件系统配额硬性限制。

Linux 自动备份定时任务本身不带“回收”逻辑,存储容量回收需要你主动配置策略。核心思路是:让备份脚本或定时任务在写入新备份前,先清理旧备份,或限制总占用空间。常见做法分三类,按实用性和可控性推荐:
用 backup 工具自带的轮转机制(最省心)
很多成熟备份工具内置保留策略,比如 rsync 配合 --delete + 时间戳目录、borgbackup、restic 或 duplicity。
-
borgbackup 示例(支持压缩、去重、自动过期)
# 每天备份,只保留最近7天、每周1个、每年1个 borg prune --keep-daily=7 --keep-weekly=4 --keep-yearly=1 /path/to/repo
运行后自动删除超出策略的归档,释放空间。
-
rsync + 时间戳目录 + 清理脚本
备份到带日期的子目录(如backup_2026-06-18),再用find删除早于 N 天的目录:find /backup -maxdepth 1 -type d -name 'backup_*' -mtime +30 -exec rm -rf {} +
用定时任务配合磁盘空间判断(通用灵活)
适合自定义脚本备份(如 tar + gzip)。关键是在备份前检查目标目录大小,超限时先清理。
#!/bin/bash
BACKUP_DIR="/backup"
MAX_SIZE="50G" # 总容量上限
# 转换为字节数便于比较
MAX_BYTES=$(numfmt --from=iec "$MAX_SIZE")
# 当前已用大小(不含子目录中的 .Trash-* 等隐藏回收站)
USED=$(du -sb "$BACKUP_DIR" | cut -f1)
if [ "$USED" -gt "$MAX_BYTES" ]; then
# 按修改时间排序,删最老的备份(假设每个备份是独立目录或 tar 文件)
find "$BACKUP_DIR" -type f \( -name "*.tar.gz" -o -name "*.tar.xz" \) -printf '%T@ %p\n' \
| sort -n | head -n 1 | cut -d' ' -f2- | xargs -r rm -f
fi
# 执行新备份(例如)
tar -czf "$BACKUP_DIR/backup_$(date +%F_%H%M).tar.gz" /home/user/data然后加进 crontab:
# 每天凌晨2点执行 0 2 * * * /usr/local/bin/backup_with_cleanup.sh
用文件系统配额或挂载限制(治本但需权限)
如果备份统一存放在某个分区(如 /backup 单独挂载),可直接限制该分区的用户/组写入总量,避免撑爆磁盘。
-
对 ext4 分区启用用户配额:
# 编辑 /etc/fstab,给 /backup 行加上 usrquota /dev/sdb1 /backup ext4 defaults,usrquota 0 2 sudo mount -o remount /backup sudo quotacheck -cug /backup sudo quotaon /backup sudo edquota -u backupuser # 设置 blocks 软硬限制(如 100GB 硬限)
-
对 XFS 分区更简洁:
sudo xfs_quota -x -c 'limit -b hard=100g backupuser' /backup
这样当备份写入超过限额时,tar 或 cp 会报错 No space left on device,可配合脚本捕获错误并告警。
不复杂但容易忽略的是:别只盯“备份文件数量”,要监控实际磁盘占用——压缩率变化、日志膨胀、临时文件残留都可能让策略失效。建议搭配 du -sh /backup 和邮件通知,形成闭环。


















