温馨提示×

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 天历史,增加异地/离线副本,降低单点故障风险。

0