最近更新时间:2026-10-08 10:01:29
本文介绍 Linux 服务器 virtio 驱动的检查、临时文件系统修复及编译安装方法,帮助您确认系统是否已包含 virtio 块设备和网络驱动,并解决内核或 initramfs 中缺失 virtio 驱动的问题。适用于需要上传系统镜像前的驱动兼容性检查与修复场景。
运行以下命令,检查内核配置中是否包含 virtio 相关驱动。
grep -i virtio /boot/config-$(uname -r)分析返回结果中参数取值,并根据实际情况,进行相应操作。
参数 | 取值 | 说明 |
|---|---|---|
|
| 表示当前实例已正确安装virtio相关驱动,且编译至内核,无需进行本文内的任何操作。 |
以下任意情况
| 表明virtio驱动可能已内核模块形式存在,则需进行临时文件系统的检查或修改操作。 | |
未输出相应参数 | 表示该操作系统没有安装 virtio 相关驱动,需要手动安装驱动。 |
执行以下命令,确认 virtio 驱动是否包含在临时文件系统中。
CentOS/Fedora:
lsinitrd /boot/initramfs-$(uname -r).img | grep virtioUbuntu/Debian:
lsinitrd /boot/initrd.img-$(uname -r) | grep virtio如上图所示,若输出中包含 virtio_blk.ko、virtio_pci.ko 和 virtio.ko,表明virtio驱动已添加至临时文件系统,则无需执行后续操作。
若输出没有包含相应信息,则说明临时文件系统中没有包含 virtio 驱动,则继续后续操作,将virtio驱动添加至临时系统文件即可。
将virtio驱动添加至临时系统文件。
CentOS/RedHat 5:
mkinitrd -f --allow-missing \
--with=virtio_blk --preload=virtio_blk \
--with=virtio_pci --preload=virtio_pci \
--with=virtio_console --preload=virtio_console \
/boot/initrd-$(uname -r).img $(uname -r)CentOS/RedHat 6/7:
mkinitrd -f --allow-missing \
--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)Debian/Ubuntu:
echo -e 'nvirtio_blk\nvirtio_pci\nvirtio_console' >> \
/etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-$(uname -r)如您发现当前设备其内核不支持 virtio 驱动,可以参考如下安装 virtio 驱动。此处以 CentOS 服务器为例,为您示范如何编译安装 virtio 驱动。
运行以下命令安装编译工具。
yum install -y ncurses-devel gcc make wget运行以下命令查询当前系统使用的内核版本,例如 2.6.32-696.18.7.el6.x86_64。
uname -r前往 Linux 内核列表页面 下载对应内核版本的源码包。例如 2.6.32 开头的内核源码包 linux-2.6.32.27.tar.gz 的下载地址为 linux-2.6.32.27.tar.gz。
运行以下命令切换目录。
cd /usr/src运行以下命令下载安装包。
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.27.tar.gz运行以下命令解压安装包。
tar -xvf linux-2.6.32.27.tar.gz运行以下命令建立链接。
ln -s linux-2.6.32.27 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 相关配置:
a. 使用空格勾选 Virtualization 项,回车键进入详细列表。
b. 在详细页面确认是否勾选了 KVM(Kernel-based Virtual Machine) 选项。
选 * 配置表示编译到内核,选 m 配置表示编译为模块。
c. 回退到主界面,上下键选择 Processor type and features,回车进入其详细界面,上下键选择 Paravirtualized guest support,回车进入其详细界面。确认是否选择了 KVM paravirtualized clock 和 KVM Guest support。
d. 回到主界面,上下键选择 Device Drivers,回车进入其详细选项页,上下键选择 Block devices,回车进入其详细选项页。确认是否选上 Virtio block driver (EXPERIMENTAL)。
e. 回到上一级界面,即 Device Drivers 的详细页,上下键选择 Network device support,回车进入其详细页,确认是否选上 Virtio network driver (EXPERIMENTAL)。
f. 按 Esc 键退出内核配置界面并根据弹窗提示保存 .config 文件。
使用之前介绍的方法检查 virtio 相关配置是否已经正确配置。
可选:若检查后发现暂未设置 virtio 相关配置,运行以下命令手动编辑 .config 文件。
make oldconfig
make prepare
make scripts
make
make install运行以下命令查看 virtio 驱动的安装情况。如果任一命令输出 virtio_blk、virtio_pci、virtio_console 等文件列表,表明您已经正确安装了 virtio 驱动。
find /lib/modules/"$(uname -r)"/ -name "virtio.*" | grep -E "virtio.*"
grep -E "virtio.*" < /lib/modules/"$(uname -r)"/modules.builtin纯净模式
