安装virtio驱动

自定义镜像的操作系统内核需支持virtio驱动,镜像才能被导入阿里云云平台,正常启动云服务器。制作或导入自定义镜像时,请确保自定义镜像已安装virtio驱动且已将virtio驱动添加到临时文件系统,否则请手动操作。

您可以按照以下步骤,检查当前操作系统内核是否支持virtio驱动,并执行相关操作。

  1. 检查服务器内核是否支持virtio驱动

  2. 根据检查结果,选择需要执行的操作。

检查服务器内核是否支持virtio驱动

运行以下命令,检查当前操作系统内核是否支持virtio驱动,以判断是否需要为自定义镜像安装virtio驱动或将virtio驱动添加到临时文件系统。

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

virtio_driver

根据回显信息判断:

根据输出信息中的参数CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET的取值判断:

  • 取值均为y:已正确安装virtio驱动,可直接执行相关文档

  • 没有这两个参数:未安装virtio驱动,需要手动安装。具体操作,请参见安装virtio驱动

  • 取值均为m/取值一个为y一个为m:支持virtio驱动,还需运行以下命令,判断virtio驱动是否已添加到临时文件系统。

    • 取值均为m:运行以下命令,判断virtio驱动是否已添加到临时文件系统。

    • 取值一个为y一个为m:为y的驱动已经编译到内核中且正确安装,还需运行以下命令,判断为m的virtio驱动是否已添加到临时文件系统。

    CentOS系列

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

    image

    • 如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档

    • 否则,需将virtio驱动添加到临时文件系统。如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要判断取值为m的驱动是否已添加到临时文件系统。

    Ubuntu/Debian系列

    lsinitramfs /boot/initrd.img-$(uname -r)|grep  virtio

    image

    • 如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档

    • 否则,需将virtio驱动添加到临时文件系统。如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要判断取值为m的驱动是否已添加到临时文件系统。

将virtio驱动添加到临时文件系统

通过检查,发现源服务器内核支持virtio驱动,但是未添加到临时文件系统中,需要手动添加。本章节以CentOS、Debian、Ubuntu等操作系统为例。

CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33

CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33及以上版本,且内核版本高于2.6.24(通过uname -r查询)时,安装如下操作修复临时文件。

  1. 运行以下命令,打开dracut.conf文件。

    vim /etc/dracut.conf
  2. i进入编辑模式,然后添加如下内容。

    add_drivers+="virtio_blk virtio_net"

    修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

    说明

    如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要添加取值为m的驱动。例如CONFIG_VIRTIO_NET参数取值为m,则只需要添加add_drivers+="virtio_net"

  3. 执行以下命令,重新生成initrd。

    dracut -f
    说明

    命令执行完成后,您可以执行echo $?命令查看返回是否为0,返回为0则说明已经重新生成initrd。您还可以执行

    lsinitrd /boot/initramfs-$(uname -r).img | grep virtio命令查看是否已将virtio驱动正确添加到临时文件系统中。

Debian/Ubuntu系列

  1. 运行以下命令,打开modules文件。

    vim /etc/initramfs-tools/modules
  2. i进入编辑模式,然后添加如下内容。

    virtio_blk
    virtio_net

    修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

    说明

    如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要添加取值为m的驱动。例如CONFIG_VIRTIO_NET参数取值为m,则只需要添加virtio_net

  3. 执行以下命令,重新生成initrd。

    update-initramfs -u
    说明

    命令执行完成后,您可以执行echo $?命令查看返回是否为0,返回为0则说明已经重新生成initrd。您还可以执行lsinitramfs /boot/initrd.img-$(uname -r)|grep  virtio命令查看是否已将virtio驱动正确添加到临时文件系统中。

SUSE/OpenSUSE系列

  • 版本低于SUSE 12 SP1或低于OpenSUSE 13

    1. 运行以下命令,打开kernel文件。

      vim /etc/sysconfig/kernel
    2. i进入编辑模式,然后添加如下内容。

      INITRD_MODULES="virtio_blk virtio_net"

      修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

      说明

      如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要添加取值为m的驱动。例如CONFIG_VIRTIO_NET参数取值为m,则只需要添加INITRD_MODULES="virtio_net"

    3. 执行以下命令,重新生成initrd。

      update-initramfs -u
  • 版本为SUSE 12 SP1、OpenSUSE 13或更高版本

    1. 运行以下命令,打开dracut.conf文件。

      vim /etc/dracut.conf
    2. i进入编辑模式,然后添加如下内容。

      add_drivers+="virtio_blk virtio_net"

      修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

      说明

      如果CONFIG_VIRTIO_BLKCONFIG_VIRTIO_NET参数的取值一个为y一个为m,则只需要添加取值为m的驱动。例如CONFIG_VIRTIO_NET参数取值为m,则只需要添加add_drivers+="virtio_net"

    3. 执行以下命令,重新生成initrd。

      dracut -f
说明

命令执行完成后,您可以执行echo $?命令查看返回是否为0,返回为0则说明已经重新生成initrd。您还可以执行

lsinitrd /boot/initramfs-$(uname -r).img | grep virtio命令查看是否已将virtio驱动正确添加到临时文件系统中。

安装virtio驱动

说明

RedHat和CentOS 5系统的内核版本建议升级到5.11版本,再安装virtio驱动。具体操作,请参见如何将RedHat和CentOS 5系统升级到5.11版本

步骤1:下载内核安装包

说明

本操作以CentOS操作系统下载内核版本linux-4.4.24.tar.gz为例,您需要将内核版本修改为实际操作系统内核对应的版本。

  1. 运行以下命令,安装编译内核的必要组件。

    yum install -y ncurses-devel gcc make wget
  2. 运行以下命令,查询当前系统使用的内核版本,如示例中的4.4.24-2.al7.x86_64。

    uname -r

    kernel_version

  3. 前往Linux内核列表页面查看对应的内核版本源码的下载地址。

    如下图示例中的4.4.24开头的linux-4.4.24.tar.gz的下载地址为https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz

    download

  4. 运行以下命令,切换目录。

    cd /usr/src/
  5. 运行以下命令,下载安装包。

    wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
  6. 运行以下命令,解压安装包。

    tar -xzf linux-4.4.24.tar.gz
  7. 运行以下命令,建立软链接。

    ln -s linux-4.4.24 linux
  8. 运行以下命令,切换目录。

    cd /usr/src/linux

步骤2:编译内核

  1. 依次运行以下命令,编译内核。

    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
    说明

    如果运行make menuconfig后报错,您可以根据报错提示进行修复。例如缺少ncurses-devel、bison、flex组件时,需要依次运行以下命令,安装相关组件。

    yum install  ncurses-devel
    yum install  bison
    yum install  flex
  2. 出现以下界面时,开始打开virtio相关配置:

    说明

    *配置表示编译到内核,选m配置表示编译为模块。

    1. 配置Virtualization项。

      1. 使用空格键选择Virtualization项,并按Enter键进入详细列表。Select_Virtualization

      2. 确认是否选择了KVM(Kernel-based Virtual Machine)项。Select_KVM

    2. 配置Processor type and features项。

      1. 返回到主界面,通过上下键选择Processor type and features项,并按Enter键进入详细列表。

      2. 使用空格键选择Paravirtualized guest support项,并按Enter键进入详细列表。guest_support

      3. 确认是否选择了KVM paravirtualized clockKVM Guest support项。KVM

    3. 配置Device Drivers项。

      1. 返回到主界面,通过上下键选择Device Drivers项,并按Enter键进入详细列表。

      2. 使用空格键选择Block devices项,并按Enter键进入详细列表。

      3. 确认是否选择了Virtio block driver项。Virtio_block

      4. 回到上一级Device Drivers详细列表,通过上下键选择Network device support项,并按Enter键进入详细列表。

      5. 确认是否选择了Virtio network driver项。Virtio_network

    4. Esc键退出内核配置界面,并根据弹窗提示选择Yes保存.config文件。

    5. 检查virtio相关配置是否已经正确配置。

    6. (条件可选)如果检查后发现暂未设置virtio相关配置,依次运行以下命令自动触发编辑.config文件。

      make oldconfig
      make prepare
      make scripts
      make
      make install
    7. 运行以下命令,查看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驱动。确认结果

相关文档

Linux系统安装virtio驱动后,您可以执行以下操作: