CentOS Stream 8 备份策略与落地方案
一 策略总览
二 工具与方法选型
三 示例方案与命令
#!/usr/bin/env bash
set -Eeuo pipefail
BACKUP_ROOT="/backups/rsync"
DATE=$(date +%Y%m%d)
SRC="/etc /var"
EXCLUDE=(/dev /proc /sys /tmp /run /mnt /media /lost+found)
mkdir -p "$BACKUP_ROOT/$DATE"
RSYNC_OPTS=(-a -z --delete)
for e in "${EXCLUDE[@]}"; do
RSYNC_OPTS+=(--exclude="$e")
done
rsync "${RSYNC_OPTS[@]}" $SRC "$BACKUP_ROOT/$DATE/"
# 在上面的脚本末尾追加(示例保留最近7天)
KEEP=7
PREV=$(date -d "$DATE -1 day" +%Y%m%d)
if [[ -d "$BACKUP_ROOT/$PREV" ]]; then
rsync "${RSYNC_OPTS[@]}" --link-dest="$BACKUP_ROOT/$PREV" $SRC "$BACKUP_ROOT/$DATE/"
fi
# 清理过期
ls -1 "$BACKUP_ROOT" | sort -r | tail -n +$((KEEP+1)) | xargs -r rm -rf
sudo mkdir -p /backups/tar
sudo tar -czvf /backups/tar/centos_stream_$(date +%Y%m%d).tar.gz \
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp \
--exclude=/run --exclude=/mnt --exclude=/media --exclude=/lost+found \
/etc /var
mysqldump -u root -p --single-transaction --routines --triggers --databases your_db > /backups/db/your_db_$(date +%F).sql
pg_dump -U postgres -F c -f /backups/db/pg_$(date +%F).dump your_db
# 安装后修改 /root/.config/syncthing/config.xml 中 <address>127.0.0.1:8384</address> 为 <address>0.0.0.0:8384</address>
sudo systemctl restart syncthing@root.service
sudo systemctl enable syncthing@root.service
# 每天 02:00 执行全量/增量脚本
0 2 * * * /usr/local/bin/backup_rsync.sh >> /var/log/backup_rsync.log 2>&1
# 每周日 03:00 做一次 tar 全量归档
0 3 * * 0 /usr/local/bin/backup_tar.sh >> /var/log/backup_tar.log 2>&1
以上命令与做法基于 tar/rsync/Syncthing/cron 的常用实践,适用于 CentOS Stream 8 的文件与配置备份场景。
四 恢复流程与验证
sudo rsync -avz /backups/rsync/2025*/etc/ /etc/
sudo rsync -avz /backups/rsync/2025*/var/ /var/
sudo tar -xzvf /backups/tar/centos_stream_2025-*.tar.gz -C /
mysql -u root -p < /backups/db/your_db_2025-*.sql
pg_restore -U postgres -d your_db /backups/db/pg_2025-*.dump
五 监控 保留与迁移建议