自定义镜像的操作系统内核需支持virtio驱动,镜像才能被导入阿里云云平台,正常启动云服务器。制作或导入自定义镜像时,请确保自定义镜像已安装virtio驱动且已将virtio驱动添加到临时文件系统,否则请手动操作。
您可以按照以下步骤,检查当前操作系统内核是否支持virtio驱动,并执行相关操作。
根据检查结果,选择需要执行的操作。
检查服务器内核是否支持virtio驱动
运行以下命令,检查当前操作系统内核是否支持virtio驱动,以判断是否需要为自定义镜像安装virtio驱动或将virtio驱动添加到临时文件系统。
grep -i virtio /boot/config-$(uname -r)
根据回显信息判断:
根据输出信息中的参数CONFIG_VIRTIO_BLK
和CONFIG_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
如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档。
否则,需将virtio驱动添加到临时文件系统。如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
参数的取值一个为y一个为m,则只需要判断取值为m的驱动是否已添加到临时文件系统。
Ubuntu/Debian系列
lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
如上图所示,表示virtio驱动已经添加到临时文件系统中,可直接执行相关文档。
否则,需将virtio驱动添加到临时文件系统。如果
CONFIG_VIRTIO_BLK
和CONFIG_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
查询)时,安装如下操作修复临时文件。
运行以下命令,打开dracut.conf文件。
vim /etc/dracut.conf
按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"
。执行以下命令,重新生成initrd。
dracut -f
说明命令执行完成后,您可以执行
echo $?
命令查看返回是否为0,返回为0则说明已经重新生成initrd。您还可以执行lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
命令查看是否已将virtio驱动正确添加到临时文件系统中。
Debian/Ubuntu系列
运行以下命令,打开modules文件。
vim /etc/initramfs-tools/modules
按i进入编辑模式,然后添加如下内容。
virtio_blk virtio_net
修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。
说明如果
CONFIG_VIRTIO_BLK
和CONFIG_VIRTIO_NET
参数的取值一个为y一个为m,则只需要添加取值为m的驱动。例如CONFIG_VIRTIO_NET
参数取值为m,则只需要添加virtio_net
。执行以下命令,重新生成initrd。
update-initramfs -u
说明命令执行完成后,您可以执行
echo $?
命令查看返回是否为0,返回为0则说明已经重新生成initrd。您还可以执行lsinitramfs /boot/initrd.img-$(uname -r)|grep virtio
命令查看是否已将virtio驱动正确添加到临时文件系统中。
SUSE/OpenSUSE系列
版本低于SUSE 12 SP1或低于OpenSUSE 13
运行以下命令,打开kernel文件。
vim /etc/sysconfig/kernel
按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"
。执行以下命令,重新生成initrd。
update-initramfs -u
版本为SUSE 12 SP1、OpenSUSE 13或更高版本
运行以下命令,打开dracut.conf文件。
vim /etc/dracut.conf
按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"
。执行以下命令,重新生成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为例,您需要将内核版本修改为实际操作系统内核对应的版本。
运行以下命令,安装编译内核的必要组件。
yum install -y ncurses-devel gcc make wget
运行以下命令,查询当前系统使用的内核版本,如示例中的4.4.24-2.al7.x86_64。
uname -r
前往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
。运行以下命令,切换目录。
cd /usr/src/
运行以下命令,下载安装包。
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz
运行以下命令,解压安装包。
tar -xzf linux-4.4.24.tar.gz
运行以下命令,建立软链接。
ln -s linux-4.4.24 linux
运行以下命令,切换目录。
cd /usr/src/linux
步骤2:编译内核
依次运行以下命令,编译内核。
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
出现以下界面时,开始打开virtio相关配置:
说明选*配置表示编译到内核,选m配置表示编译为模块。
配置Virtualization项。
使用空格键选择Virtualization项,并按Enter键进入详细列表。
确认是否选择了KVM(Kernel-based Virtual Machine)项。
配置Processor type and features项。
返回到主界面,通过上下键选择Processor type and features项,并按Enter键进入详细列表。
使用空格键选择Paravirtualized guest support项,并按Enter键进入详细列表。
确认是否选择了KVM paravirtualized clock和KVM Guest support项。
配置Device Drivers项。
返回到主界面,通过上下键选择Device Drivers项,并按Enter键进入详细列表。
使用空格键选择Block devices项,并按Enter键进入详细列表。
确认是否选择了Virtio block driver项。
回到上一级Device Drivers详细列表,通过上下键选择Network device support项,并按Enter键进入详细列表。
确认是否选择了Virtio network driver项。
按Esc键退出内核配置界面,并根据弹窗提示选择Yes保存.config文件。
检查virtio相关配置是否已经正确配置。
具体操作,请参见检查服务器内核是否支持virtio驱动。
(条件可选)如果检查后发现暂未设置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驱动。
相关文档
Linux系统安装virtio驱动后,您可以执行以下操作: