ESXi8手工迁移至PVE8.2+现有Windows10安装VirtIO

背景描述

最近由于ESXi7虚拟机在PCIE直通的过程中一直报“已启用/需要重新引导”,修改ACScheck仍不生效。于是决定迁移十台虚拟机到PVE平台。(后来重装esxi修好了,但是心累了

虚拟机迁移

本次虚拟机迁移由于时间仓促,采用直接复制+手动创建恢复的方式恢复虚拟机。没有导出ovf文件,也没有自动迁移。因此该方案也适合esxi无法启动场景下的虚拟机迁移。

导出虚拟机

将所有虚拟机从esxi的数据分区拷贝到系统外部。有条件的可以使用NFS或者物理磁盘,我在这里只能SSH拷贝(其他方式均失效),非常艰苦的拷贝了一宿。

安装PVE系统

可以参考网上的其他教程或者我之前的文章。https://blog.wolfbolin.com/archives/845

创建虚拟机

在徒手创建虚拟机时一般遵从以下特点:

  • OS:不使用任何媒体/Do not use any media
  • System/Machine:选用Q35
  • System/BIOS:esxi创建虚机时默认使用EFI
    • 根据虚机系统盘选择,ovf导入的也可能不准确
    • Add EFI Disk:不选择(取消勾选)
  • Disks:删除自动添加的scsi0,之后再手工导入迁移的系统盘
  • CPU/Type:建议选择host
    • ESXi默认向虚机暴露所有指令集,选择host最还原(主要目的并不是为了高性能)
    • 使用aprl/rr等黑群晖系统的重点关注该选项。关注是否匹配迁移前的CPU架构
  • Network/Model:建议vmxnet3
    • 注意还原迁移前虚拟机选项,避免进入系统后不识别或IP拿不到。
    • 如果你还记得当时选择的网卡类型和MAC地址,需要尽可能还原。

对于黑群晖系统(arpl/rr引导)额外多说一点。系统机型虽然有其匹配的架构,但是黑群晖不一定必须要运行在对应架构的CPU上,只要系统运行所需指令集能满足要求就可以编译运行。
例如我的主机是EPYC 7k62,使用的系统是RS4021+,原生CPU架构是Broadwell,但是不妨碍它可以在AMD EPYC上运行。
因此在迁移黑群晖时,要尤其关注当时安装黑群晖时是如何运行在CPU上的,如果迁移时CPU架构发生了变化,建议找对应的CPU Type进行模拟。多试试能配得上的,不能一概而论。

虚拟机磁盘导入

在完成PVE安装后将esxi的虚拟机文件夹拷贝回pve机器中,或者通过NFS挂载的方式使虚拟机数据可访问。此处不要直接复制到新建虚拟机的目录下,主要是需要虚拟机的vmdk和flat.vmdk文件。
进入虚拟机备份目录后使用qm命令导入。该命令会复制一份磁盘数据到PVE存储中,不会修改或覆盖现有的磁盘数据,如果导入中存在问题可以重复尝试。

参考如下命令:

qm importdisk PVE虚机ID ESXi磁盘文件 --format=qcow2

该命令用于向指定PVE虚拟机中创建一个新的磁盘,并将现有的磁盘数据拷贝到新磁盘中,并且指定新的磁盘格式为qcow2(即PVE默认磁盘格式)。

举例导入Elasticsearch虚拟机磁盘到手工创建的104号虚拟机。

> cd /opt/esxi_vm/Elasticsearch/
Elasticsearch-flat.vmdk  Elasticsearch.nvram  Elasticsearch.vmdk  Elasticsearch.vmsd  Elasticsearch.vmx
> qm importdisk 104 Elasticsearch.vmdk local --format=qcow2
importing disk 'Elasticsearch.vmdk' to VM 104 ...
Formatting '/var/lib/vz/images/104/vm-104-disk-0.qcow2', fmt=qcow2 cluster_size=65536 ...
transferred 20.0 GiB of 20.0 GiB (100.00%)
Successfully imported disk as 'unused0:local:104/vm-104-disk-0.qcow2'

手工挂载磁盘分区到虚拟机

如果是Windows系统请直接看下文驱动安装,Windows直接挂载SCSI会失败。

Linux内核的虚拟机(大部分)可以直接使用SCSI的方式挂载虚拟机磁盘。在PVE的虚拟机管理页面中找到

  1. Handware > Unused Disk 0(选中)> Edit > SCSI(下拉选择)> Add
  2. Options > Boot Order > Edit > scsi0(仅勾选这一个)> OK

直通等更多功能的还原

上述操作完成后理论上就可以启动一个纯虚拟化的机器。但是虚拟机在ESXi上存在一些特殊调教时,可能需要额外的操作。此处给出不完全的列举和方案:

  1. ESXi中使用了硬件直通:对于HBA卡和网卡直通,可以直接在硬件管理界面添加PCIE设备,同时选择All Function选项。该操作强烈建议PVE虚拟机是Q35机型,i440fx大概率会踩坑。如果是核显直通,则需要完成在PVE中的所有准备工作后再挂载核显到虚拟机(包括关闭PVE显示输出,和虚拟机画面Hardware>Display->none)
  2. ESXi中选择了保留全部内存:在ESXi中存在PCIE设备时需要锁定全部内存,但是在PVE中无需(默认)执行了该操作,因此无需特殊处理。
  3. 在ESXi中安装了额外的硬件驱动:PVE的硬件兼容性比ESXi更优秀,但是如果识别有问题可以直接参考PVE相关的问题帖子。

现有Windows虚拟机安装VirtIO驱动

对于迁移的Windows虚拟机无法像多数教程上描述的在安装时挂载virtio-win.iso。因此需要在磁盘导入到PVE虚拟机后,先以SATA总线挂载系统分区,通过命令行进行磁盘格式修复后再以SCSI形式挂载。

踩坑1:以SATA挂载后进系统手动安装vioscsi的方式无法修复系统盘错误
踩坑2:直接以SCSI挂载的方式进系统会反复蓝屏,安全模式也救不了

正确的方案:

Step1:以SATA总线的方式挂载Windows系统盘。

Step2:挂载VirtIO驱动镜像,通过Fedora链接下载最新的。

Step3:挂载Windows安装镜像(推荐Win10,不是真的要安装)

Step4:修改启动顺序:勾选windows安装镜像并放在第一个(其他不重要)

Step5:以SeaBIOS方式启动虚拟机,虚拟机启动时需要按任意键进入安装镜像

Step6:在Windows安装镜像启动后按 Shift+F10进入命令行界面(没进安装镜像的需要重试)

Step7:列出所有盘符检查系统盘和驱动镜像是否存在

X:> fsutil fsinfo drivers
Drivers:  C:\ D:\ E:\ X:\

C通常是引导盘,D盘通常是系统盘,E盘通常是驱动盘。可以通过切换盘符 C:并检查文件 dir 的方式检查分区是否正确。

Step8:使用命令修复系统盘,盘符需要对应

dism /image:D:\ /add-driver /driver:E:\vioscsi\w10\amd64

正斜线和反斜线别搞错了,空格不要敲错了

Step9:修复完成后使用命令关机,不要直接使用shutdown

wpeutil shutdown -s

Step10:虚拟机关闭后Remove所有ISO镜像,Detach系统盘并重新以SCSI总线方式挂载。

Step11:重新启动虚拟机。

经过上述的一波操作后,虚拟机的系统盘中已经写入了vioscsi驱动,这样就可以正常进入系统了。

本文参考:https://forum.proxmox.com/threads/change-disk-type-ide-sata-to-scsi-for-existing-windows-machine.103560/

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注