CentOS 7 物理机到 VMware vCenter 虚拟机迁移指南

适用场景:CentOS 7.x 物理服务器迁移至 VMware vCenter/ESXi 虚拟机
本文档基于实际迁移案例(某塔式服务器 192.168.80.57 → VM)整理


一、迁移前信息收集

1.1 确认源系统信息

# 系统版本
cat /etc/redhat-release

# 启动模式(BIOS 还是 UEFI)
ls /sys/firmware/efi 2>/dev/null && echo "UEFI" || echo "BIOS"

# 内核版本
uname -r

# 磁盘分区结构
fdisk -l
lsblk -f

# 文件系统使用量
df -h

# 内存
cat /proc/meminfo | head -5

1.2 关键发现记录

项目 影响
系统版本 CentOS 7.9.2009 已 EOL,yum 源需改用 Vault
启动模式 BIOS VM 固件必须选 BIOS
磁盘 1.2TB,MBR + LVM 分区表需保留
分区 /boot(sda3) + LVM(root/swap/home) 结构需复刻
virtio 模块存在但未加载 必须嵌入 initramfs
业务服务 MariaDB + 多个自定义端口 需完整保留

二、迁移方案对比

方案 描述 本案例适用性
VMware Converter 官方 P2V 工具 ❌ Linux 版存在 Helper ISO 挂载失败等已知 Bug
Veeam 备份恢复 整机备份 → 恢复至 VM ❌ 环境限制导致反复失败
tar 打包 + 手动恢复 打包系统 → 目标 VM 解压 → 修复引导 最可靠,本文采用

当官方工具反复失败时,底层手动迁移是最可控的方案。


三、阶段一:源系统预处理(物理机上执行)

3.1 嵌入 virtio 驱动到 initramfs

这是最关键的一步,决定 VM 启动后能否识别虚拟磁盘:

# 1. 配置开机自动加载 virtio
modprobe virtio virtio_blk virtio_net virtio_pci

cat > /etc/modules-load.d/virtio.conf << EOF
virtio
virtio_blk
virtio_net
virtio_pci
EOF

# 2. 重建 initramfs,嵌入 virtio 驱动
dracut --force --add-drivers "virtio virtio_blk virtio_net virtio_pci" \
  /boot/initramfs-$(uname -r).img $(uname -r)

# 3. 确认 virtio 已加入
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio

# 4. 重新安装 GRUB2 到 MBR
grub2-install /dev/sda

# 5. 重建 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg

3.2 备份 fstab

cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)

四、阶段二:创建目标 VM(vCenter 中)

4.1 虚拟机配置

配置项 推荐值 说明
固件 BIOS 必须与物理机一致
兼容性 与 ESXi 版本匹配 如 ESXi 7.0
CPU 与物理机相同或稍低 可按需调整
内存 16-32GB 可按需调整
磁盘 1 60GB+,Thin Provision 系统盘,LSI Logic SAS
磁盘 2 1200GB,Thin Provision /home 数据盘,LSI Logic SAS
网络 E1000(兼容性优先) 启动后可改 VMXNET3
CD/DVD 挂载 CentOS 7 ISO 用于 Live CD 恢复

4.2 安装最小系统

  1. 从 CentOS 7 ISO 启动
  2. 分区结构与物理机保持一致
    • /boot:1GB xfs
    • /:50GB xfs(LVM)
    • swap:16GB
    • /home暂不创建(后面挂载数据盘)
  3. 选择最小安装(带网络工具即可)
  4. 配置静态 IP,确保与物理机同网段
  5. 安装完成后正常启动一次,确认 VM 无问题

五、阶段三:数据同步(/home)

5.1 目标 VM 准备接收

# 格式化数据盘
mkfs.xfs /dev/sdb

# 创建挂载点
mkdir -p /mnt/home_new
mount /dev/sdb /mnt/home_new

# 开启 SSH(确保 rsync 可用)
systemctl start sshd
systemctl enable sshd
systemctl stop firewalld

5.2 物理机同步 /home(不停机)

# 第一次同步(后台运行)
nohup rsync -avz --progress /home/ root@<VM_IP>:/mnt/home_new/ \
  > /tmp/rsync_home.log 2>&1 &

# 查看进度
tail -f /tmp/rsync_home.log

数据量大时可限速:--bwlimit=50000(约 50MB/s)


六、阶段四:维护窗口 — 系统迁移

6.1 停止业务服务(物理机)

# 停止数据库
systemctl stop mariadb

# 停止自定义业务进程
killall -9 <业务进程名>

# 停止其他非关键服务
systemctl stop postfix cups gdm

6.2 最终同步 /home

rsync -avz --delete /home/ root@<VM_IP>:/mnt/home_new/

6.3 打包系统文件(物理机)

cd /

# 打包整个系统(排除虚拟文件系统和 /home)
tar czpf /tmp/centos-system.tar.gz \
  --exclude=./home \
  --exclude=./proc \
  --exclude=./sys \
  --exclude=./dev \
  --exclude=./tmp \
  --exclude=./run \
  --exclude=./media \
  --exclude=./mnt \
  --exclude=./boot \
  .

# 同时打包关键配置(作为补充备份)
tar czpf /tmp/system-config.tar.gz /etc /var/lib/mysql /var/spool /var/www /root

6.4 传送到目标 VM

scp /tmp/system-config.tar.gz root@<VM_IP>:/root/
scp /tmp/centos-system.tar.gz root@<VM_IP>:/root/

七、阶段五:Live CD 恢复系统

7.1 挂载 CentOS 7 Live CD

  1. vCenter → VM → 编辑设置 → CD/DVD → 连接 CentOS 7 ISO
  2. 重启 VM,从 CD-ROM 启动
  3. 选择 TroubleshootingRescue a CentOS system
  4. 选择 Continue,进入 sh-4.2# 提示符

7.2 挂载目标磁盘

# 创建挂载点
mkdir -p /mnt/target/boot

# 挂载系统盘
mount /dev/mapper/centos-root /mnt/target
mount /dev/sda1 /mnt/target/boot

# 确认挂载
ls /mnt/target

7.3 清空原有系统

cd /mnt/target

# 保留 boot 目录(已在 sda1),删除其他所有内容
find . -mindepth 1 -maxdepth 1 ! -name 'boot' \
  -exec rm -rf {} + 2>/dev/null || true

# 确认已清空
ls -la

7.4 解压系统包

cd /mnt/target
tar xzpf /root/centos-system.tar.gz
tar xzpf /root/system-config.tar.gz

7.5 挂载 /home 数据盘

mkdir -p /mnt/target/home
mount /dev/sdb /mnt/target/home

7.6 重建虚拟文件系统目录

mkdir -p /mnt/target/{dev,proc,sys,tmp,run,media,mnt}

八、阶段六:chroot 修复引导

8.1 进入 chroot 环境

mount --bind /dev /mnt/target/dev
mount --bind /proc /mnt/target/proc
mount --bind /sys /mnt/target/sys
chroot /mnt/target

8.2 修复 GRUB2

# 安装 GRUB2 到 MBR
grub2-install /dev/sda

# 重建 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg

8.3 重建 initramfs(确保 virtio 驱动)

dracut --force --add-drivers "virtio virtio_blk virtio_net virtio_pci"

8.4 更新 /etc/fstab

查看新的 UUID:

blkid

更新 /etc/fstab

cat > /etc/fstab << EOF
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=<新的boot-UUID>    /boot                   xfs     defaults        0 0
UUID=<新的home-UUID>    /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
EOF

8.5 设置 root 密码

echo "root:<新密码>" | chpasswd

8.6 退出并重启

exit
umount -R /mnt/target
reboot

九、阶段七:启动验证

9.1 断开 Live CD

vCenter → VM → 编辑设置 → CD/DVD → 断开连接

确保 BIOS 启动顺序中 Hard Drive 优先于 CD-ROM

9.2 验证清单

检查项 命令 预期结果
系统版本 cat /etc/redhat-release CentOS 7.x
磁盘挂载 df -h / /boot /home 均正确挂载
启动模式 ls /sys/firmware/efi 无输出 = BIOS ✅
virtio 驱动 lsmod | grep virtio 多个 virtio 模块加载
关键服务 systemctl status mariadb active (running)
业务端口 ss -tlnp 8019/8023/8066/8090/3306 监听
/home 数据 ls /home/ 数据完整
SSH 登录 ssh root@<VM_IP> 正常登录

十、迁移后优化建议

  1. 网卡驱动升级:将 VM 网络适配器从 E1000 改为 VMXNET3
  2. 磁盘控制器:测试稳定后可改为 VMware Paravirtual(性能更好)
  3. VMware Tools:确认已安装,提升性能和兼容性
  4. IP 切换:如需要保持原 IP,将 VM IP 改为物理机原 IP,或更新相关配置
  5. selinux:检查 /var/log/audit/audit.log,如有大量拒绝日志可调整策略

十一、常见问题

Q1: tar 解压时报 “No space left on device”

原因:VM 系统盘空间不足
解决:vCenter 中扩大磁盘 → Live CD 中执行 pvresize + lvextend + xfs_growfs

Q2: VM 启动后进入 dracut 紧急模式

原因:initramfs 缺少 virtio 驱动
解决:物理机预处理时必须执行 dracut --add-drivers virtio...

Q3: GRUB 安装失败 modinfo.sh doesn't exist

原因:在 Live CD 环境而非 chroot 环境中执行
解决:确保在 chroot /mnt/target 后再执行 grub2-install

Q4: 启动后服务未运行

原因:systemd 服务依赖网络或其他资源
解决:检查 systemctl status <service>,逐步排查依赖


十二、工具命令速查

# 查看 LVM
pvdisplay / vgdisplay / lvdisplay

# 扩展 LVM
pvresize /dev/sda2
lvextend -l +100%FREE /dev/mapper/centos-root
xfs_growfs /dev/mapper/centos-root

# 重建 initramfs
dracut --force --add-drivers "virtio virtio_blk virtio_net virtio_pci"

# GRUB 修复
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

# 查看 UUID
blkid

# tar 排除打包
tar czpf backup.tar.gz --exclude=./dir1 --exclude=./dir2 .

本文档完成于 2026-06-11,适用于 CentOS 7.x → VMware vCenter 迁移场景。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐