操作场景

云服务器系统内核需要支持 Virtio 驱动(包括块设备驱动 virtio_blk 和网卡驱动 virtio_net)才能在腾讯云上正常运行。为避免导入自定义镜像后,创建的云服务器实例无法启动,您需要在导入镜像前,检查是否需要在源服务器中检查以及修复镜像中对 Virtio 驱动的支持。本文档以 CentOS 操作系统为例,指导您如何在导入镜像前进行检查以及修复镜像中对 Virtio 驱动的支持。

操作步骤

步骤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 参数的信息,表示该操作系统不支持导入腾讯云,请 下载和编译内核。

步骤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
  • RedHat 5/CentOS 5 操作系统:
mkdir -p /tmp/initrd && cd /tmp/initrd
zcat /boot/initrd-$(uname -r).img | cpio -idmv
find . -name "virtio*"
  • Debian/Ubuntu 操作系统:
lsinitramfs /boot/initrd.img-$(uname -r) | grep virtio

返回类似如下结果:

可得知,initramfs已经包含了virtio_blk驱动,以及其所依赖的virtio.kovirtio_pci.kovirtio_ring.ko,您可以直接导入自定义的镜像到腾讯云。

如果initramfs或者initrd没有包含virtio驱动,请执行步骤3。

步骤3:重新配置临时文件系统

如果 步骤2 的执行结果显示临时文件系统 initramfs 或者 initrd 没有包含 virtio 驱动,则需要重新配置临时文件系统 initramfs 或者 initrd,使其包含 virtio 驱动。请根据操作系统的不同,选择相应操作:

  • CentOS 8/RedHat 8 操作系统:
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)
  • CentOS 6/CentOS 7/RedHat 6/RedHat 7 操作系统:
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)
  • RedHat 5/CentOS 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 /boot/initrd-$(uname -r).img $(uname -r)
  • Debian/Ubuntu 操作系统:
echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> /etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-$(uname -r)

附录

下载和编译内核

下载内核安装包

  1. 执行以下命令,安装编译内核的必要组件。
yum install -y ncurses-devel gcc make wget

2. 执行以下命令,查询当前系统使用的内核版本。

uname -r

返回类似如下结果,当前系统使用的内核版本为2.6.32-642.6.2.el6.x86_64

3. 前往 Linux 内核下载页面,下载对应的内核版本源码。
例如,2.6.32-642.6.2.el6.x86_64版本的内核下载 linux-2.6.32.tar.gz 的安装包,其下载路径为:https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz

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

cd /usr/src/

5. 执行以下命令,下载安装包。

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.gz

6. 执行以下命令,解压安装包。

tar -xzf linux-2.6.32.tar.gz

7. 执行以下命令,建立链接。

ln -s linux-2.6.32 linux

8. 执行以下命令,切换目录。

cd /usr/src/linux

编译内核

  1. 依次执行以下命令,编译内核。
make mrproper
cp /boot/config-$(uname -r) ./.config
make menuconfig

进入 “Linux Kernel vX.X.XX Configuration” 界面。如下图所示:

说明

如果没有进入 “Linux Kernel vX.X.XX Configuration” 界面,请执行 步骤18。
“Linux Kernel vX.X.XX Configuration” 界面:

  • 按 “Tab” 或 “↑” “↓” 方向键移动光标。
  • 按 “Enter” 选择或执行光标所选项目。
  • 按空格键选中光标所选项目,“*” 表示编译到内核,“M” 表示编译为模块。

2.按 “↓” 键将光标调到 “Virtualization”,并按空格键选中 “Virtualization”。

3.在 “Virtualization” 处按 “Enter”,进入 Virtualization 详情界面。

4.在 Virtualization 详情界面,确认是否勾选了 Kernel-based Virtual Machine (KVM)support 选项。如下图所示:

若未勾选,请按空格键选中 “Kernel-based Virtual Machine (KVM)support” 选项。

5. 按 “Esc” 返回 “Linux Kernel vX.X.XX Configuration” 主界面。

6.按 “↓” 键将光标调到 “Processor type and features”,并按 “Enter”,进入 Processor type and features 详情界面。

7.按 “↓” 键将光标调到 “Paravirtualized guest support”,并按 “Enter”,进入 Paravirtualized guest support 详情界面。

8.在 Paravirtualized guest support 详情界面,确认是否勾选了 “KVM paravirtualized clock” 和 “KVM Guest support”。如下图所示:

若未勾选,请按空格键选中 “KVM paravirtualized clock” 和 “KVM Guest support” 选项。

9. 按 “Esc” 返回 “Linux Kernel vX.X.XX Configuration” 主界面。

10.按 “↓” 键将光标调到 “Device Drivers”,并按 “Enter”,进入 Device Drivers 详情界面。

11.按 “↓” 键将光标调到 “Block devices”,并按 “Enter”,进入 Block devices 详情界面。

12.在 Block devices 详情界面,确认是否勾选了 “Virtio block driver (EXPERIMENTAL)”。如下图所示:

若未勾选,请按空格键选中 “Virtio block driver (EXPERIMENTAL)” 选项。

13.按 “Esc” 返回 Device Drivers 详情界面。

14.按 “↓” 键将光标调到 “Network device support”,并按 “Enter”,进入 Network device support 详情界面。

15.在 Network device support 详情界面,确认是否勾选了 “Virtio network driver (EXPERIMENTAL)”。如下图所示:

若未勾选,请按空格键选中 “Virtio network driver (EXPERIMENTAL)” 选项。

16.按 “Esc” 退出内核配置界面,并根据弹窗提示,选择 “YES”,保存 .config 文件。

17.参考 步骤1:检查内核是否支持 Virtio 驱动,验证 Virtio 驱动是否已经正确配置。

18.(可选)执行以下命令,手动编辑.config文件。

说明
如果您符合如下任一条件,建议执行此操作:

  • 若检查后发现,内核仍无 Virtio 驱动的相关配置信息。
  • 编译内核时,无法进入内核配置界面或者未成功保存 .config 文件。
make oldconfig
make prepare
make scripts
make
make install

19.依次执行以下命令,查看 Virtio 驱动的安装情况。

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

如何检查Linux系统下的Virtio 驱动相关推荐

  1. linux系统下编写I2C驱动

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  2. OK6410开发板linux系统下的SPI驱动和测试

    OK6410下的SPI驱动是可以用的,但是飞凌把它作为其它用途了,我们修改一些代码才能在/dev目录下创建SPI的设备节点文件 Step1:打开arch/arm/mach_s3c64XX/mach_m ...

  3. linux系统能装什么显卡,Linux系统下安装显卡驱动

    第一次使用Linux遇到的不是硬盘分区而是显卡驱动问题,因为Linux在图形界面方面作的不是很好,以后你安其它软件时就能感受到.好多时候看到图形界面出错不一定是软件出问题. Linux下安装显卡驱动 ...

  4. linux系统下的打印机驱动下载,方法论:Linux下如何驱动主流品牌打印机

    薄荷站长浸淫 Linux 桌面领域十余年,一直致力于 Linux 桌面系统的推广.对于桌面用户办公中必需的打印功能,薄荷站长也是有所研究.为了使新手朋友们少走弯路,薄荷站长介绍一下常见品牌打印机的 L ...

  5. Linux 系统下 NVIDIA 显卡驱动,GNOME 桌面环境不兼容

    NVIDIA 显卡驱动在 Windows 系统下的安装非常方便,大部分第三方软件都能直接自动检测型号,并从 NVIDIA 官网上下载驱动安装.但是在 Linux 操作系统下,NVIDIA 显卡的驱动需 ...

  6. linux系统下的打印机驱动下载,总结各大常见打印机品牌在Linux下的驱动方法

    本文介绍常见打印机品牌在 Linux 系统中的驱动方法,这是一篇总结方向性的文章,不是教你在 Linux 下安装打印机驱动,而是看完本文后大致有所了解各大常见打印机品牌在 Linux 下的驱动方法,具 ...

  7. linux系统下安装2080ti驱动,CentOS 7.4 Nvidia GeForce RTX 2080 Ti 显卡驱动安装

    环境描述 系统版本:CentOS Linux release 7.4.1708 (Core) 内核版本:3.10.0-693.el7.x86_64 显卡驱动版本: NVIDIA-Linux-x86_6 ...

  8. linux CFI接口,高手进阶 Linux系统下MTD/CFI驱动介绍

    某些Intel的FLASH芯片(如StrataFlash系列)支持多分区,也就是各个分区可以同时进行操作.应该说这是不错的特性,但是也会带来些问题.记得当初移植Linux-2.4.21,挂JFFS2文 ...

  9. linux下的can驱动测试,linux系统下can的驱动测试

    测试can需要ip,can-utils和libsocketcan库. 通过ip工具配置can,如速率,启用和禁用can等.不能用buildroot编译出来的ip,需要重新编译. 1. 编译ip: ip ...

最新文章

  1. JS中编写函数去除HTML标签,js函数获取html中className所在的内容并去除标签
  2. 昆虫大脑帮助AI解决导航难题
  3. JAVA网络编程:TCP/IP数据包结构
  4. 第十六届全国大学生智能车竞赛广东赛区线上竞赛方案
  5. mysql + Fluently NHibernate + WebAPI + Autofac
  6. ASCII、GB2312、GBK、Unicode、UTF-8介绍和转换
  7. 产品经理如何专业吐槽产品?友谊小船从此不再翻
  8. Google Analytics 跟踪代码安装后状态总是显示'未安装跟踪代码'
  9. c语言发牌思路,C语言发牌机程序求详细解析
  10. C++库(Google Breakpad)
  11. hive 开窗函数_Hive的架构剖析
  12. c语言小学生四则运算出题_软件工程第一次作业,小学生四则运算的出题程序...
  13. ssh 认证指定端口
  14. messagedigest 图片加密_通过MessageDigest实现简单的MD5加密
  15. Alien Skin ExposureX8专业图像编辑器全新版本
  16. LeetCode1619删除某些元素后的数组均值(java)
  17. JS判断当前页面是否在微信内打开
  18. STEM 是个怎样高大上的东西?
  19. Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码
  20. asp.net core webAPI学习笔记(三)资源请求

热门文章

  1. 关联分析中的支持度、可信度和提升度
  2. FFmpeg使用X264编码参数
  3. layui分页功能在vue写的H5中实现
  4. 网管教程:如何使用HTTP压缩优化服务器(图)
  5. 关于Hantek6022BL虚拟示波器的在WIN10的安装(神坑)
  6. 3dmax+vray学习教程
  7. Android Ble蓝牙开发
  8. hmcl离线登陆_hmcl启动器下载
  9. java 杰表_【汉王OCR和杰表sdk(web报表二次开发包,java语言) 2.8哪个好用】汉王OCR和杰表sdk(web报表二次开发包,java语言) 2.8对比-ZOL下载...
  10. 网页显示不全(运行时网页pc端显示完全,手机端显示不全)