升级CentOS版本时如何备份并保留用户数据?

升级 CentOS 版本(如从 CentOS 7 升级到 CentOS Stream 或迁移到 Rocky Linux/AlmaLinux)时,核心原则是:先完整备份系统状态和用户数据,再执行升级操作。以下是经过验证的安全操作流程:


🔒 一、升级前关键准备

1. 确认当前系统状态

cat /etc/os-release
df -h          # 检查磁盘空间(建议预留至少 20GB 空闲空间)
du -sh /*      # 估算各目录大小

2. 制定备份策略(推荐组合方案)

备份类型 工具/方法 保留内容 优先级
全量系统镜像 dd + tarrsync 整个根文件系统 ⭐⭐⭐⭐⭐
用户数据专项备份 tar / rsync /home, /root, /var/www, /opt 等自定义目录 ⭐⭐⭐⭐⭐
配置文件快照 git 或手动归档 /etc 中关键配置(如 httpd.conf, sshd_config ⭐⭐⭐⭐
数据库备份 mysqldump / pg_dump 所有业务数据库 ⭐⭐⭐⭐⭐

重要提示:避免仅依赖“升级脚本自动备份”,务必人工验证备份完整性。


📦 二、具体备份操作示例

▶ 备份用户主目录与常用数据

# 创建独立备份目录(建议放在外部存储/NFS)
BACKUP_DIR="/backup/centos7-to-new"
mkdir -p "$BACKUP_DIR/{home,etc,data}"

# 备份 /home(排除临时文件)
rsync -avHAX --delete /home/ "$BACKUP_DIR/home/" 
    --exclude='*/tmp/*' --exclude='*/cache/*'

# 备份 root 家目录及关键配置
rsync -avHAX /root/ "$BACKUP_DIR/data/root_home/"
rsync -avHAX /etc/ "$BACKUP_DIR/etc/" --exclude='network-scripts/'

# 备份 Web 服务数据(示例)
rsync -avHAX /var/www/ "$BACKUP_DIR/data/www/"

▶ 数据库备份(以 MySQL 为例)

# 停止服务确保一致性(生产环境建议用 LVM 快照或热备工具)
systemctl stop mysqld
mysqldump --all-databases --single-transaction > "$BACKUP_DIR/data/all_dbs.sql"
systemctl start mysqld

# PostgreSQL 示例
pg_dumpall -U postgres > "$BACKUP_DIR/data/pg_all.sql"

▶ 可选:生成系统清单(便于恢复后比对)

rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}n' > "$BACKUP_DIR/system_packages.txt"
dpkg -l >> "$BACKUP_DIR/system_packages.txt" 2>/dev/null || true

🔄 三、升级路径选择(CentOS 已停更,需迁移)

原系统 推荐目标 官方迁移工具
CentOS 7 Rocky Linux 8/9 migrate2rocky
CentOS 7 AlmaLinux 8/9 almalinux-deploy
CentOS 7 → 8 CentOS Stream 8 centos-release-stream + dnf system-upgrade

⚠️ 注意:CentOS 7 已于 2024-06-30 EOL,不建议直接升级到 CentOS Stream(非 LTS),优先选择 Rocky/AlmaLinux。

示例:迁移到 Rocky Linux 8

# 1. 安装迁移工具
sudo dnf install migrate2rocky

# 2. 执行迁移(会重启)
sudo migrate2rocky --yes

# 3. 迁移后验证
cat /etc/os-release

🧪 四、升级后验证清单

检查项 命令/操作
系统版本确认 cat /etc/os-release
关键服务状态 systemctl is-active httpd sshd mysql
用户数据完整性 diff -r /home/old_backup /home/
配置文件差异 diff -r /etc /etc_backup
日志异常扫描 grep -i "error|fail" /var/log/messages | tail -50

🆘 五、回滚方案(必须提前准备!)

  1. 保留旧系统分区:升级前对根分区做 LVM 快照
    lvcreate -L 10G -s -n centos7_snapshot /dev/vg0/root
  2. 记录启动参数:保存 /boot/grub2/grub.cfg 和内核版本
  3. 测试恢复流程:在隔离环境演练一次完整恢复

💡 最佳实践建议

  • ✅ 在测试环境先行验证整个升级+恢复流程
  • ✅ 使用自动化备份脚本(含校验和验证)
  • ✅ 升级期间保持监控告警(CPU/内存/磁盘 IO)
  • ❌ 禁止在生产环境直接运行 yum distro-sync 跨大版本升级

需要我针对您的具体场景(如是否含 Docker/容器、特定应用栈)提供定制化备份脚本吗?