Debian 服务器的最小化备份方案
入伏之后家里小机器跑得不太稳,借机整理了一下备份脚本。思路很简单:保留 7 天日备份 + 4 周周备份 + 6 月月备份,单盘 rsync 拉一下就行了。
前置条件
- 一块外置 USB 硬盘(ext4 格式,UUID 挂载)
- backup 目录结构:
/mnt/backup/{daily,weekly,monthly}/ - root 用户的 cron
备份脚本
#!/bin/bash
set -e
SRC=/home
DST=/mnt/backup/daily/$(date +%Y%m%d)
mkdir -p "$DST"
rsync -a --delete --link-dest=/mnt/backup/daily/latest "$SRC/" "$DST/"
ln -sfn "$DST" /mnt/backup/daily/latest
保留策略
用 find -mtime +N 删老文件:
find /mnt/backup/daily -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +
find /mnt/backup/weekly -maxdepth 1 -type d -mtime +31 -exec rm -rf {} +
find /mnt/backup/monthly -maxdepth 1 -type d -mtime +186 -exec rm -rf {} +
几个坑
- 硬链接必须同分区,所以 daily/weekly/monthly 都在同一块硬盘
- 不要备份到系统盘,否则 disk full 的时候备份也炸了
- USB 硬盘最好加个 systemd mount,不然插拔顺序一乱就崩
下次准备写一篇 frp 内网穿透 + 异地备份的组合方案,异地才是真安全。