centos系统备份与恢复技巧
小樊
39
2025-12-29 08:45:39
CentOS 系统备份与恢复技巧
一 核心策略与准备
- 备份范围优先级:优先保护**/etc**(配置)、/home(用户数据)、业务数据(如**/var/www或自定义目录)、以及数据库数据目录(如/var/lib/mysql**)。数据库建议用各自工具做逻辑备份(如mysqldump/pg_dump),避免直接拷贝运行中的数据文件。
- 策略与保留:日常用rsync 增量保持一致性,定期做tar 全量归档;重大变更前用LVM 快照获取一致性点;关键业务增加异地/离线副本。建议遵循3-2-1 规则(3 份副本、2 种介质、1 份异地/离线),并保留7–30 天历史版本。
- 自动化与监控:用cron定时执行,脚本化记录日志与结果,监控备份成功率与磁盘空间,失败及时告警与重试。
- 工具选型建议:文件级用tar/rsync,块级/整盘用dd/Clonezilla/Mondo Rescue,企业级集中备份可用Bacula/Bareos。
二 常用工具与典型命令
- tar 全量归档(文件级)
- 全系统备份(排除虚拟/临时文件系统与备份目录自身):
tar -cvpzf /backup/full_$(date +%F).tar.gz --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/mnt --exclude=/backup /
- 配置目录备份:
tar -cvpzf /backup/etc_$(date +%F).tar.gz /etc
- rsync 增量同步(本地/远程)
- 本地镜像:rsync -avz --delete /src/ /dst/(注意源路径末尾斜杠)
- 远程镜像:rsync -avz --delete -e ssh /src/ user@host:/dst/
- 多版本增量(硬链接节省空间):
rsync -av --delete --link-dest=/dst/prev /src/ /dst/current
- dd 块级镜像(整盘/分区)
- 镜像到文件:dd if=/dev/sda of=/backup/disk.img bs=4M status=progress
- 盘到盘克隆:dd if=/dev/sda of=/dev/sdb bs=4M status=progress(目标盘容量需≥源盘)
- LVM 快照(一致性点)
- 创建快照:lvcreate -L 10G -s -n snap /dev/vg0/lv_root
- 挂载并备份:mount /dev/vg0/snap /mnt/snap && tar -czvf /backup/snap_$(date +%F).tar.gz /mnt/snap
- 清理:umount /mnt/snap && lvremove /dev/vg0/snap
- 数据库逻辑备份
- MySQL/MariaDB:mysqldump -u root -p --single-transaction --routines --triggers db > db_$(date +%F).sql
- PostgreSQL:pg_dump -U user db > db_$(date +%F).sql
- 第三方工具
- Clonezilla:启动到 Live 环境,选择 device-image 模式进行整盘镜像的备份/恢复。
- Mondo Rescue:执行 mondoarchive 进行系统级灾难恢复镜像制作。
三 自动化与远程备份示例
- 备份脚本范例(含日志与多目录)
- 脚本:
#!/bin/bash
SOURCE_DIRS=“/etc /home /var/www”
DEST_DIR=“/mnt/backup_drive/centos_backups”
LOG_FILE=“/var/log/centos_backup.log”
DATE=$(date +%Y%m%d%H%M%S)
mkdir -p “$DEST_DIR”
echo “=== Backup $DATE ===” >> “$LOG_FILE”
for DIR in $SOURCE_DIRS; do
rsync -avz --delete “$DIR” “$DEST_DIR/$(basename $DIR)” >> “$LOG_FILE” 2>&1
[ $? -eq 0 ] && echo “$DIR OK” >> “$LOG_FILE” || echo “$DIR FAILED” >> “$LOG_FILE”
done
tar -czvf “$DEST_DIR/etc_config_$DATE.tar.gz” /etc >> “$LOG_FILE” 2>&1
echo “=== End $DATE ===” >> “$LOG_FILE”
- 赋权:chmod +x /path/backup_script.sh
- 定时任务(cron)
- 每天 02:00 增量:0 2 * * * /path/backup_script.sh
- 每周日 03:30 全量:30 3 * * 0 /path/backup_script.sh
- 远程传输
- 推送归档:scp /backup/file.tar.gz user@host:/backup/
- 远程同步:rsync -avz -e ssh /backup/ user@host:/backup/
四 恢复与校验步骤
- 从 tar 恢复
- 全量:tar -xvpzf /backup/full_2025-11-23.tar.gz -C /
- 配置:tar -xvpzf /backup/etc_2025-11-23.tar.gz -C /
- SELinux 上下文修复:restorecon -Rv /
- 从 rsync 恢复
- 目录级:rsync -av /backup/home/ /home/
- 多版本回滚:直接取对应时间目录(–link-dest 生成的历史版本)
- 从 dd 镜像恢复
- 镜像到盘:dd if=/backup/disk.img of=/dev/sda bs=4M status=progress(操作前务必确认 if/of,避免覆写)
- 救援模式与引导修复
- 使用安装介质进入“Troubleshooting → Rescue a CentOS system”,挂载根后修复:
- GRUB:grub2-install /dev/sdX;grub2-mkconfig -o /boot/grub2/grub.cfg
- 文件系统:ext 系列用 fsck,XFS 用 xfs_repair
- 忘记 root 密码
- GRUB 启动项按 e,在 linux16/linux 行末尾追加rd.break,进入紧急模式后 chroot,执行 passwd 并设置**/sbin/autorelabel**后重启。
五 注意事项与最佳实践
- 路径与参数安全:全系统打包务必排除**/proc、/sys、/dev、/run、/mnt、/backup等虚拟或临时挂载点;rsync 使用–delete前确认源/目标路径;远程备份优先SSH**并限制备份账号权限。
- 一致性与版本化:数据库用**–single-transaction**(MySQL)获取一致性;文件系统级备份仅作补充;采用硬链接多版本或定期全量,便于快速回滚。
- 校验与演练:定期用tar -tvf核对清单,按季度或更短周期进行真实恢复演练,验证流程与时效;监控备份日志与磁盘空间。
- 变更窗口:重大变更(内核升级、驱动安装、分区调整)前先创建LVM 快照作为回滚点。
- 介质与异地:至少保留7–30 天历史,增加异地/离线副本,降低单点故障风险。