VMware虚拟机迁移到KVM之后无法启动(Virtio磁盘控制器驱动)
转换磁盘镜像格式之后导入KVM系统无法启动,但是可以进入恢复模式,可能是Virtio的内核模块没有加载,把磁盘改为IDE模式后正常。
但是IDE模式效率没有Virtio高,这时可以手动加载Virtio模块,方法参考腾讯云帮助文档:
https://cloud.tencent.com/document/product/213/9929
操作步骤
步骤1:检查内核是否支持 Virtio 驱动
执行以下命令,确认当前内核是否支持 Virtio 驱动。
grep -i virtio /boot/config-$(uname -r)
返回类似如下结果:
- 如果返回结果中
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数取值为m
,请执行【步骤2】。 - 如果在返回结果中
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数取值为y
,表示该操作系统包含了 Virtio 驱动并编译到内核中了,编译到内核中的理论上不应该启动不了,所以可能是其他问题,请略过此文。 - 如果在返回结果中没有
CONFIG_VIRTIO_BLK
参数和CONFIG_VIRTIO_NET
参数的信息,表示该操作系统不支持导入KVM,不包含Virtio 驱动。
步骤2:检查临时文件系统是否包含 Virtio 驱动
如果【步骤1】的执行结果参数取值为 m
,则需要进一步检查,确认临时文件系统 initramfs
或者 initrd
是否包含 virtio
驱动。请根据操作系统的不同,执行相应命令:
CentOS 6/CentOS 7/CentOS 8/RedHat 6/RedHat 7 操作系统:
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
返回类似如下结果:
可得知,initramfs
已经包含了 virtio_blk
驱动,以及其所依赖的 virtio.ko
、virtio_pci.ko
和 virtio_ring.ko
。
如果 initramfs
或者 initrd
没有包含 virtio
驱动,请执行【步骤3】。
步骤3:重新配置临时文件系统
如果【步骤2】的执行结果显示临时文件系统 initramfs
或者 initrd
没有包含 virtio
驱动,则需要重新配置临时文件系统 initramfs
或者 initrd
,使其包含 virtio
驱动。请根据操作系统的不同,选择相应操作:
CentOS 8/RedHat 8 操作系统:
cp /boot/initramfs-$(uname -r).img[,.bak] #备份原有的initramfs mkinitrd -f --allow-missing --with=virtio_blk --preload=virtio_blk --with=virtio_net --preload=virtio_net --with=virtio_console --preload=virtio_console /boot/initramfs-$(uname -r).img $(uname -r) #制作新的initramfs
CentOS 6/CentOS 7/RedHat 6/RedHat 7 操作系统:
cp /boot/initramfs-$(uname -r).img[,.bak] #备份原有的initramfs mkinitrd -f --allow-missing --with=xen-blkfront --preload=xen-blkfront --with=virtio_blk --preload=virtio_blk --with=virtio_pci --preload=virtio_pci --with=virtio_console --preload=virtio_console /boot/initramfs-$(uname -r).img $(uname -r) #制作新的initramfs
完成之后使用【步骤2】的lsinitrd命令再次查询,可得知initramfs
已经包含了virtio_blk
驱动
关闭虚拟机,调整磁盘模式为virtio,问题解决
此处评论已关闭