PVE迁移虚拟机到VMware的实操步骤

0 阅读4分钟

迁移步骤

查询对应的虚拟机id

image.png

关闭虚拟机

qm shutdown 102

2️⃣ 导出磁盘为文件

qm exportdisk 102 /tmp/vm102-disk0.raw local qm exportdisk 102 /tmp/vm102-disk1.raw local

3️⃣ 转换为 VMware 格式

qemu-img convert -f raw -O vmdk -o subformat=streamOptimized /tmp/vm102-disk0.raw /tmp/vm102-disk0.vmdk ``qemu-img convert -f raw -O vmdk -o subformat=streamOptimized /tmp/vm102-disk1.raw /tmp/vm102-disk1.vmdk

4️⃣ 传输到 VMware 主机

scp /tmp/vm102-disk*.vmdk root@192.168.xx.xx:/vmware/vm102/

5️⃣ 在 VMware 中新建虚拟机

  • 系统类型:CentOS 7 x64
  • 控制器:LSI Logic SAS
  • 网卡:E1000
  • 删除自动生成的虚拟磁盘,改为“使用已有磁盘”,选择你传过去的 .vmdk

实操迁移步骤

一、关闭虚拟机

  1. 关机
qm shutdown 102

2. 查询虚拟机是否关闭

qm status 102
# 输出status: stopped

  1. 找到磁盘文件
qm config 102 | grep disk

二、挂载外部硬盘

  1. 插入硬盘后使用lsblk命令列出所有块设备
lsblk

  1. 创建挂载目录
mkdir -p /mnt/sdb

成功: 没有输出(静默执行表示成功) ❌ 失败: 若提示“权限不足”,请确认是 root 用户。

  1. 挂载硬盘
mount /dev/sdb1 /mnt/sdb

成功: 无输出。 ❌ 失败: 若提示 mount: unknown filesystem type,可能没格式化;执行下面命令

❌❌提示:实操中我从未执行过格式化命令,慎重操作

lsblk -f /dev/sdb1

4. 验证挂载成功

df -h | grep sdb

成功样例:

/dev/sdb1 1.8T 200G 1.6T 12% /mnt/sdb

失败: 没有任何输出,说明未挂载成功。

  1. 准备导出目录
mkdir -p /mnt/sdb/vm102

三、导出 PVE 磁盘为 VMware 格式

  1. 导出系统盘
qemu-img convert -p -f raw -O vmdk /dev/pve/vm-102-disk-0 /mnt/sdb/vm102/vm102-disk0.vmdk

  1. 导出数据盘
qemu-img convert -p -f raw -O vmdk /dev/pve/vm-102-disk-1 /mnt/sdb/vm102/vm102-disk1.vmdk

  1. 验证导出结果
ls -lh /mnt/sdb/vm102/

  1. 验证导出文件的逻辑容量(虚拟大小)(可选操作)
qemu-img info /mnt/sdb/vm102/vm102-disk1.vmdk

正常输出会类似:

image: /mnt/sdb/vm104/vm104-disk1.vmdk ``file format: vmdk virtual size: 100G (107374182400 bytes) ``disk size: 77G

解释:

  • virtual size: VMware 看到的虚拟容量(100G)
  • disk size: 实际文件大小(77G)
  • file format: vmdk(没问题)

💡 所以在 VMware 里,这块盘依然会显示为 100 GB 的虚拟磁盘。

四、卸载硬盘

  1. 导出完成后卸载
umount /mnt/sdb

✅ 成功:无输出。

❌ 若提示 “target is busy”,执行下面命令,查看哪个进程占用后结束它。

lsof | grep /mnt/sdb

五、传输

  1. 拔下硬盘带去 VMware
  2. 或用 SCP 拷贝:
# 验证机104到192.168.65.32机器上去验证
scp -r /mnt/sdb/vm104 root@192.168.65.32:/vmfs/volumes/datastore1/

导入步骤

一、创建虚拟机

插入硬盘后,把硬盘中的要拷贝的文件复制到电脑中,下面操作不要直接选用硬盘中的文件!!!!

选择稍后安装,因为已经有PVE导出来的系统盘和数据盘文件,不需要安装操作系统

选择准虚拟化SCSI(P)

选择IDE(I)

不要直接选择硬盘中的磁盘文件,并且要保持现有格式

网络适配器->网络连接->桥接模式下,要勾选“复制物理网络连接状态”

创建好虚拟机后,右键“设置”->硬盘,选择添加,将第二个磁盘文件放进去,或者在创建虚拟机时选择添加第二块磁盘

二、固定静态ip

以固定为192.168.230.116为例

确保存在配置文件

ls /etc/sysconfig/network-scripts/ifcfg-ens33

如果不存在,就创建:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

内容如下:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.230.116
PREFIX=24
GATEWAY=192.168.230.1
DNS1=8.8.8.8

删除或备份旧的 eth0 文件

cd /etc/sysconfig/network-scripts/ mv ifcfg-eth0 ifcfg-eth0.bak 2>/dev/null

创建/修改 ens33 配置(固定 IP 用 NetworkManager 管理):

nmcli con show   # 查看当前连接名(一般是 "Wired connection 1" 或 "ens33")
nmcli con mod "有线连接 1" ipv4.addresses 192.168.230.116/24 ipv4.gateway 192.168.230.1 ipv4.dns 8.8.8.8 ipv4.method manual
nmcli con up "有线连接 1"
nmcli con show ens33

确保 NetworkManager 自启,禁用 network 服务

systemctl disable network
systemctl stop network
systemctl enable NetworkManager
systemctl restart NetworkManager

查看实际网卡状态

ip addr show ens33

然后查看该连接的详细 IPv4 配置:

nmcli con show "有线连接 1" | grep ipv4

关键字段:

  • ipv4.method

    • manual → 静态 IP ✅
    • auto → DHCP
  • ipv4.addresses → 显示分配的 IP,例如 192.168.230.116/24

  • ipv4.gateway → 网关,例如 192.168.230.1

  • ipv4.dns → DNS,例如 8.8.8.8

如果 ipv4.method: manual 且地址为 192.168.230.116,说明 IP 已固定。