CentOS 7 物理机到 VMware vCenter 虚拟机迁移指南
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 安装最小系统
- 从 CentOS 7 ISO 启动
- 分区结构与物理机保持一致:
/boot:1GB xfs/:50GB xfs(LVM)swap:16GB/home:暂不创建(后面挂载数据盘)
- 选择最小安装(带网络工具即可)
- 配置静态 IP,确保与物理机同网段
- 安装完成后正常启动一次,确认 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
- vCenter → VM → 编辑设置 → CD/DVD → 连接 CentOS 7 ISO
- 重启 VM,从 CD-ROM 启动
- 选择 Troubleshooting → Rescue a CentOS system
- 选择 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> |
正常登录 |
十、迁移后优化建议
- 网卡驱动升级:将 VM 网络适配器从 E1000 改为 VMXNET3
- 磁盘控制器:测试稳定后可改为 VMware Paravirtual(性能更好)
- VMware Tools:确认已安装,提升性能和兼容性
- IP 切换:如需要保持原 IP,将 VM IP 改为物理机原 IP,或更新相关配置
- 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 迁移场景。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)