迁移至 PVE 疑难杂症
文章目录
自从选用 Proxmox VE 作为虚拟化平台之后,折腾就没停下过。经常导入大量的各类虚拟机,遇到各种各样的问题,这里便记录一下遇到的一些问题。
导入镜像
导入 OVA / OVF
我见过的大部分虚拟机均为该类格式,PVE 支持直接导入 OVF,但不支持直接导入 OVA。OVA 和 OVF 的区别为:可以把 OVA 看做 OVF 和磁盘镜像打包后的结果。故导入 OVA 的处理方式比较简单,用 tar 命令将 OVA 解包即可:
|
|
然后再导入解包出的 OVF 即可。
在有些情况下导入 OVF 会失败,目前我见过导致失败的原因分为两类:
- 虚拟机引用了不存在的 iso
- 对磁盘文件报错
对于 1 的处理方案,直接编辑 ovf 文件,找到 iso 那几行直接删掉重新导入,通常没什么影响(前提是虚拟机不用那个 iso 的情况下);对于 2,这时虚拟机已经创建,但是只能说创建了一半,名称没有磁盘没有,接着使用 qm importdisk 命令手动导入磁盘文件,修改下虚拟机名称即可。
导入 VMware 虚拟机
之前没什么好办法,只能手动建立一个虚拟机,然后再导入 vmdk。后来觉得这样太繁琐,找到单独的 ovftool 安装至 pve,每次只需利用 vmx 文件转换出一份 ovf 文件即可快速导入:
|
|
导入 vbox 虚拟机
如果虚拟机的磁盘格式是 vdi,那只能手动建立一个虚拟机,然后将 vdi 转换成 qcow2 / raw 再导入给虚拟机,转换命令:
|
|
兼容性问题
导入后没有网络
许多机器是依赖一些配置文件定义网络的(有桌面环境如 Gnome,依靠 NetworkManager 管理网络连接的机器一般不会)如 /etc/network/interfaces(也可能在 interfaces.d 下),ubuntu 18 上常见的 /etc/netplan/xxx.yaml(xxx表示名称不确定)。原因是因为 Linux 对网络设备的命名方法,且并非常见的 eth 后面跟数字那种,而是基于固件、拓补、位置信息来分配名称,具体见参考1。
从 VMware 迁移到 PVE,应该是虚拟设备的拓补发生了变化,导致配置文件失效,如来自 VMware 的 Ubuntu 18 的 ens33,迁移后就变成了 ens18。那么解决的方式就很清晰了,修改配置文件即可。
开机 gnome 崩溃
这种情况我只见过一次,一台 Ubuntu 20.04 的机器正常导入,开机一切正常,加载 gnome 后突然崩溃。最后发现修改 PVE 的 CPU 模型可解,于是从 kvm64 修改成了 host(难道是这个版本的 gnome 必须使用什么指令集嘛)。
虚拟机镜像修改
经常碰见不知道虚拟机账户密码的情况,此时修改配置文件就需要挂载镜像来进行。
挂载 QCOW2
首先使用 nbd 将 qcow2 文件映射到设备,前提需要加载 nbd 内核模块:
|
|
某些情况需要指定参数 max_part,例如等于 8。接着映射到设备:
|
|
这里的 x 任选一个即可。然后是常规的 mount:
|
|
使用完毕后卸载步骤与挂载相反,先 umount 就不在赘述,然后卸载 nbd 设备:
|
|
参考
文章作者 Josephine
上次更新 2021-06-22