前言

前些天接到了项工作,需要把虚拟机从VMware迁移到超融合,但操作过程当中发现没有vitio驱动,怎么办?所以就手动安装修复驱动。


检查镜像内核是否支持virtio驱动

检查系统内核是否支持virtio

grep -i virtio /boot/config-$(uname -r)

关于V2V迁移的linux安装VITIO驱动_迁移

情况一:如果参数CONFIG_VIRTIO_BLK及CONFIG_VIRTIO_NET取值为 y,表示操作系统已经包含了virtio 驱动,可以直接上传。

情况二:如果参数CONFIG_VIRTIO_BLK及CONFIG_VIRTIO_NET取值为m时,进行一下步骤以确认临时文件系统是否包含virtio驱动。


确认临时文件系统是否包含virtio驱动

CentOS执行:

lsinitrd /boot/initramfs-$(uname -r).img | grep -i "virtio"

Ubuntu执行:

lsinitrd /boot/initrd.img-$(uname -r) | grep -i "virtio"

有驱动

如下截图,表示系统以及包含了virtio驱动,可以进行进行上传。

关于V2V迁移的linux安装VITIO驱动_迁移_02

无驱动

如下图,临时文件系统没有包含virtio驱动,则需要修复临时文件系统。

关于V2V迁移的linux安装VITIO驱动_linux_03

修复临时文件系统

如果检查发现内核支持virtio但是临时文件系统又没有包含virtio驱动时,需要修复临时文件系统。

CentOS/RedHat 5
mkinitrd -f --allow-missing \ --with=xen-vbd --preload=xen-vbd \ --with=xen-platform-pci --preload=xen-platform-pci \ --with=virtio_blk --preload=virtio_blk \ --with=virtio_pci --preload=virtio_pci \ --with=virtio_console --preload=virtio_console \
CentOS/RedHat 6/7
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) -v -f --with=xen-blkfront --preload=xen-blkfront
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) -v -f --with=virtio_blk --preload=virtio_blk
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) -v -f --with=virtio_pci --preload=virtio_pci
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) -v -f --with=virtio_console --preload=virtio_console
Debian/Ubuntu
echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \ /etc/initramfs-tools/modules mkinitramfs -o /boot/initrd.img-$(uname -r)"

关于V2V迁移的linux安装VITIO驱动_迁移_04

安装内核

如果检查发现当前内核不支持virtio驱动,可以参考以下方式进行安装。这里以CentOS为例。

下载内核安装包

yum install -y ncurses-devel gcc make wget      //以安装编译所需的工具。

确认当前内核版本

uname -r

关于V2V迁移的linux安装VITIO驱动_linux_05

在Linux内核列表下载对应的内核版本源码。

如3.10.10的源码下载地址为

https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.gz

关于V2V迁移的linux安装VITIO驱动_linux_06

下载内核包

通过wget下载内核包,解压到/usr/src/目录中。具体操作如下:

cd /usr/src wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.gz tar -xzf linux-3.10.10.tar.gz ln -s linux-3.10.10 linux cd /usr/src/linux


编译内核

依次执行以下指令编译内核:

make mrproper symvers_path=$(find /usr/src/ -name "Module.symvers") test -f $symvers_path && cp $symvers_path .
cp /boot/config-$(uname -r) ./.config make menuconfig

配置virtio

出现以下界面,开始进行virtio相关配置(图中*表示编译到内核,m表示编译为模块):

1、使用空格勾选Virtualization项,然后回车键进入详细列表。

关于V2V迁移的linux安装VITIO驱动_迁移_07

2、在详细列表确认是否勾选了Kernel-based Virtual Machine选项。

关于V2V迁移的linux安装VITIO驱动_迁移_08

3、返回到主界面,再通过上下键选择“Processor type and features”,回车键进入详细列表,再选择“Paravirtualized guest support”并回车键进入详细列表。确认是否选择了“KVM paravirtualized clock”和“KVM Guest support”。

关于V2V迁移的linux安装VITIO驱动_linux_09

4、返回到主界面,通过上下键选择“Device Drivers”,回车键进入详细列表,再选择“Block devices”并回车键进入详细列表。确认是否选择了“Virtio block driver (EXPERIMENTAL)”。

关于V2V迁移的linux安装VITIO驱动_linux_10

5、回到上一级“Device Drivers”的详细列表界面,上下键选择“Network device support”并回车键进入详细列表,确认是否选择了“Virtio network driver (EXPERIMENTAL)”。

关于V2V迁移的linux安装VITIO驱动_linux_11

6、最后按Esc键退出并根据弹窗提示保存.config文件。

7、完成上述步骤再检测virtio配置

grep -i virtio /boot/config-$(uname -r)

(可选)如果还是未发现virtio相关配置,可以执行以下命令手动编辑.config文件:

make oldconfig
make prepare
make scripts
make
make install

执行以下命令查看virtio驱动安装情况:

find /lib/modules/"$(uname -r)"/ -name "virtio.*" | grep -E "virtio.*" grep -E "virtio.*" < /lib/modules/"$(uname -r)"/modules.builtin

如果任一命令输出virtio_blk、virtio_pci.virtio_console等文件列表,表示您已经完成virtio驱动的安装了。

以上就是关于V2V迁移的linux安装VITIO驱动的方法,希望读者朋友看完这篇文章后有所启发。