C++项目在 CentOS 的备份与恢复
一、备份范围与策略
二、常用备份方法速查
tar -czvf myproj_$(date +%F_%H-%M-%S).tar.gz -C /home/dev myprojsudo tar -xzvf myproj_2025-11-21_10-00-00.tar.gz -C /rsync -av --delete /home/dev/myproj/ /backup/myproj/rsync -avz --delete -e ssh /home/dev/myproj/ user@backup-server:/backup/myproj/sudo dd if=/dev/sda of=/backup/disk.img bs=4M status=progresssudo dd if=/backup/disk.img of=/dev/sda bs=4M status=progress三、自动化备份脚本与定时任务
chmod +x /usr/local/bin/backup_myproj.sh#!/usr/bin/env bash
set -Eeuo pipefail
PROJ_SRC="/home/dev/myproj"
BACKUP_BASE="/backup/myproj"
DATE=$(date +%F_%H-%M-%S)
KEEP_DAYS=7
mkdir -p "$BACKUP_BASE/$DATE"
# 1) 项目代码与构建产物
tar -czf "$BACKUP_BASE/$DATE/myproj.tar.gz" -C "$PROJ_SRC" .
# 2) 关键配置(可按需增删)
mkdir -p "$BACKUP_BASE/$DATE/etc"
rsync -a --delete /etc/yum.repos.d/ "$BACKUP_BASE/$DATE/etc/yum.repos.d/"
# 示例:若项目有 systemd 服务
# sudo cp /etc/systemd/system/myproj.service "$BACKUP_BASE/$DATE/etc/systemd/system/" 2>/dev/null || true
# 清理旧备份
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +$KEEP_DAYS -exec rm -rf {} +
echo "Backup finished at $DATE -> $BACKUP_BASE/$DATE"
crontab -e,添加:0 2 * * * /usr/local/bin/backup_myproj.sh >> /var/log/backup_myproj.log 2>&1
四、恢复步骤与验证
sudo systemctl stop myproj || truesudo tar -xzvf /backup/myproj/2025-11-21_10-00-00/myproj.tar.gz -C /home/dev/cd /home/dev/myproj && cmake -B build && cmake --build build && sudo systemctl start myprojsudo rsync -a --delete /backup/myproj/2025-11-21_10-00-00/etc/yum.repos.d/ /etc/yum.repos.d/sudo cp /backup/myproj/2025-11-21_10-00-00/etc/systemd/system/myproj.service /etc/systemd/system/ && sudo systemctl daemon-reloadsudo dd if=/backup/disk.img of=/dev/sda bs=4M status=progress,重启后校验文件系统与引导。git status(若纳入 git);构建通过;关键功能冒烟测试;服务端口与进程正常;配置文件权限与所有者正确。五、注意事项与最佳实践
dd、分区与系统目录写入的操作具有数据丢失风险;务必在非生产环境验证并做好完整备份后再执行。