相关文章推荐
坚强的机器猫  ·  linux下解决80端口被占用_nginx关 ...·  1 月前    · 
强健的核桃  ·  在Linux上安装Docker和Docker ...·  1 月前    · 
淡定的冰淇淋  ·  Linux ...·  1 月前    · 
叛逆的充电器  ·  开始将 VS Code 与 WSL ...·  1 月前    · 
发财的茶叶  ·  php通配符是什么,Linux中通配符详解·  1 周前    · 
逼格高的土豆  ·  Emqx配置HTTP鉴权集成springbo ...·  1 年前    · 
豪气的枇杷  ·  ORA-00000: DPI-1047: ...·  2 年前    · 
干练的煎饼果子  ·  人工智能 (AI) 的最新突破性创新 - 掘金·  2 年前    · 
打酱油的西装  ·  DataGridView设置单元格的提示内容 ...·  2 年前    · 
睿智的柿子  ·  HotPDF Delphi PDF VCL ...·  2 年前    · 
Code  ›  Linux系统安装virtio驱动_云服务器 ECS(ECS)-阿里云帮助中心
ecs 运行命令 linux服务器 linux系统
https://help.aliyun.com/zh/ecs/user-guide/install-the-virtio-driver
千年单身的围巾
2 月前
大模型 产品 解决方案 文档与社区 权益中心 定价 云市场 合作伙伴 支持与服务 了解阿里云 HOT
AI 助理
备案 控制台
官方文档
输入文档关键字查找
云服务器 ECS 安装virtio驱动

安装virtio驱动

更新时间:
产品详情
我的收藏

virtio 驱动作为虚拟化技术中的高性能 I/O 驱动,是镜像发布至阿里云平台的必备组件。您在制作 Linux 镜像过程中务必确保系统已经安装 virtio 驱动且已将 virtio 驱动添加到临时文件系统,否则阿里云的 ECS 实例可能无法识别 virtio 虚拟化设备导致系统无法启动。 本文介绍如何在制作 Linux 镜像的虚拟机中安装 virtio 驱动。

操作流程

Linux 系统安装 virtio 驱动的操作流程如下:

image

操作步骤

判断系统内核 对 virtio 驱动的支持情况

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

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

    返回类似如下结果:

    virtio_driver

  2. 分析检查结果。

    根据输出信息中的参数 CONFIG_VIRTIO_BLK (virtio 的块设备驱动)和 CONFIG_VIRTIO_NET (virtio 的网络设备驱动)的取值判断:

    • 取值均为 y :表示系统已正确安装 virtio 驱动,virtio 驱动已编译进内核,开机会自动加载,无需继续执行本文内容。

    • 取值均为 m 或一个为 y 一个为 m :表示 virtio 驱动以内核模块形式存在,只需要 将 virtio 驱动添加到临时文件系统 即可。

    • 没有这两个参数 :表示系统未安装 virtio 驱动,需要 手动安装 virtio 驱动 。

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

当内核启用了 CONFIG_VIRTIO_BLK=m 或 CONFIG_VIRTIO_NET=m ,但未将这些模块添加到临时文件系统(initramfs)时,系统启动时可能无法加载 virtio 驱动,导致虚拟机无法识别。

  1. 当 CONFIG_VIRTIO_BLK 和 CONFIG_VIRTIO_NET 参数的 取值均为 m 或一个为 y 一个为 m 时,运行以下命令,判断 virtio 驱动是否已添加到临时文件系统。

    CentOS 系列

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

    image

    Debian 系列

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

    image

    SUSE 系列

    lsinitrd /boot/initrd-$(uname -r)|grep virtio

    image

    • 如上图所示,输出中包含 virtio_blk.ko 和 virtio_net.ko 信息,表示 virtio 驱动已经添加到临时文件系统中,无需继续执行本文内容。

    • 如果输出未包含 virtio_blk.ko 和 virtio_net.ko 信息或仅包含 virtio_blk.ko 和 virtio_net.ko 其中一个,则需要继续执行下一步将 virtio 驱动添加到临时文件系统。

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

    CentOS 系列

    CentOS 6/Anolis OS 7/AlmaLinux 8/Fedora 33 及以上版本,且内核版本高于 2.6.24(通过 uname -r 查询)时,执行如下操作将 virtio 驱动添加到临时文件系统。

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

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

      add_drivers+="virtio_blk virtio_net"

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

      说明

      如果 CONFIG_VIRTIO_BLK 和 CONFIG_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 系列

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

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

      virtio_blk
      virtio_net

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

      说明

      如果 CONFIG_VIRTIO_BLK 和 CONFIG_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 系列

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

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

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

        INITRD_MODULES="virtio_blk virtio_net"

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

        说明

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

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

        mkinitrd
    • 版本为 SUSE 12 SP1、OpenSUSE 13 或更高版本

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

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

        add_drivers+="virtio_blk virtio_net"

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

        说明

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

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

        dracut -f
    说明

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

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

手动安装 virtio 驱动

步骤 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/
    wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
  5. 运行以下命令,解压安装包并建立软链接。

    tar -xzf linux-4.4.24.tar.gz
    ln -s linux-4.4.24 linux
    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 clock 和 KVM 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 相关配置是否已经正确配置。

      具体操作,请参见 判断系统内核对 virtio 驱动的支持情况 。

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

      make oldconfig
      make prepare
      make scripts
      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 驱动。 确认结果

上一篇:安装cloud-init 下一篇:定制Linux镜像
该文章对您有帮助吗?
 
推荐文章
坚强的机器猫  ·  linux下解决80端口被占用_nginx关闭80端口
1 月前
强健的核桃  ·  在Linux上安装Docker和Docker Compose_云服务器 ECS(ECS)-阿里云帮助中心
1 月前
淡定的冰淇淋  ·  Linux 压缩文件tar.gz的压缩、解压、分割、合并_linux gz合并解析
1 月前
叛逆的充电器  ·  开始将 VS Code 与 WSL 配合使用 | Microsoft Learn
1 月前
发财的茶叶  ·  php通配符是什么,Linux中通配符详解
1 周前
逼格高的土豆  ·  Emqx配置HTTP鉴权集成springboot-阿里云开发者社区
1 年前
豪气的枇杷  ·  ORA-00000: DPI-1047: Cannot locate a 64-bit Oracle Client library: “libaio.so.1_yolo_sec的博客-CSDN博客
2 年前
干练的煎饼果子  ·  人工智能 (AI) 的最新突破性创新 - 掘金
2 年前
打酱油的西装  ·  DataGridView设置单元格的提示内容ToolTip_C#教程_脚本之家
2 年前
睿智的柿子  ·  HotPDF Delphi PDF VCL 1.7.0 D7-10.3力拓 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号