centos虚拟机如何进行版本迁移
小樊
33
2025-11-27 17:17:05
CentOS 虚拟机版本迁移与升级指南
一、先明确目标与总体思路
- 迁移场景:把虚拟机从一台宿主机搬到另一台宿主机,保持同一系统版本(如 CentOS 7 到 CentOS 7),重点是“整机搬迁”。
- 升级场景:在现有虚拟机内部把系统小版本升级(如 7.1 → 7.9),或跨小版本做原地升级(如 7 → 8),重点是“系统内升级”。
- 不建议跨大版本原地降级(如 8 → 7),风险高且易破坏依赖;如必须回退,优先基于快照/备份重建或使用镜像重装。
二、跨宿主机整机迁移步骤
- 通用准备
- 在源宿主机对虚拟机做快照/备份;确认目标宿主机磁盘、内存、CPU 资源充足;尽量保持虚拟化平台一致(如 VMware、VirtualBox、KVM)。
- VMware Workstation/Player
- 直接复制整个虚拟机文件夹(含 .vmx、.vmdk 等)到目标机,用 VMware 打开 .vmx 即可;或在 Workstation 中“文件 → 导出为 OVF”,在目标机导入 .ovf/.vmdk。
- VirtualBox
- 直接复制 .vdi 和 .vbox 到目标机,用 VirtualBox 打开 .vbox 文件启动。
- KVM/QEMU(libvirt)
- 静态迁移:在源机导出配置并拷贝磁盘与配置
- virsh dumpxml > /opt/.xml
- scp /opt/.xml :/etc/libvirt/qemu/
- 将磁盘镜像(如 .qcow2)拷贝到目标机相同目录(如 /var/lib/libvirt/images)
- 在目标机 virsh define /etc/libvirt/qemu/.xml 并启动
- 动态迁移(热迁移):两节点 libvirt 互通,内存脏页收敛可用 --auto-converge
- virsh migrate --live --p2p --unsafe --persistent --undefinesource qemu+ssh://<dst_ip>:/system
- 高负载可加:–auto-converge
- 基于共享存储:两节点挂载同一 NFS 目录放置磁盘,直接迁移实例定义即可。
三、在原虚拟机内升级系统版本
- 小版本原地升级(同主版本,如 7.x → 7.y)
- 备份关键数据与配置(如 /etc、/var、/opt),建议先创建快照
- 执行更新:yum clean all && yum update -y
- 重启:reboot
- 验证:cat /etc/redhat-release 与 uname -a 查看版本与内核
- 跨主版本原地升级(如 7 → 8)
- 不建议直接原地升级,风险较高;更稳妥做法是:在新系统(如 CentOS 8/Stream 8/9)上新建虚拟机,通过备份恢复应用与数据(如 rsync、数据库物理/逻辑备份),或使用镜像重装后迁移业务。
- 降级说明
- 跨大版本降级(如 8 → 7)不推荐;同主版本小范围降级(如 7.5 → 7.4)可通过降级 centos-release 与内核并调整默认启动项实现,但依赖复杂、易出错,务必先快照与全量备份。
四、迁移或升级后的网络与常见故障处理
- 网络与主机名
- 目标网络不同需调整网卡配置(如 /etc/sysconfig/network-scripts/ifcfg-* 中的 BOOTPROTO、IPADDR、GATEWAY、DNS1),必要时修正 /etc/hostname 与 /etc/hosts;SSH 主机密钥变更时清理旧 known_hosts 条目。
- SELinux
- 如出现权限/启动告警,可临时 setenforce 0 排障,或编辑 /etc/selinux/config 将 SELINUX=permissive 后重启验证,再改回 enforcing 并修复策略。
- KVM 动态迁移卡住
- 高脏页场景加 --auto-converge;若走 qemu+tcp 认证失败,可在 /etc/libvirt/libvirtd.conf 设置 auth_tcp=“none”,并启用 libvirtd-tcp.socket 监听 16509 端口(注意安全风险,生产慎用)。
- 启动失败与 fstab
- 常见为磁盘 UUID/LABEL 变化或 /etc/fstab 引用错误导致无法引导;进入救援模式修正 /etc/fstab 的挂载项(优先用 UUID),或恢复正确的引导配置。