为了确保私有镜像能正常创建启动云服务器,您需要在导入之前检查virtio驱动是否已经安装。
检查镜像内核是否支持virtio驱动
执行grep -i virtio /boot/config-$(uname -r)检查系统内核是否支持virtio。
其中,如果参数CONFIG_VIRTIO_BLK 及CONFIG_VIRTIO_NET 取值为 y,表示包含了 virtio 驱动,可以直接上传。如果参数 CONFIG_VIRTIO_BLK 及CONFIG_VIRTIO_NET 取值为 m时,进行步骤2以确认临时文件系统是否包含virtio驱动。
CentOS执行lsinitrd /boot/initramfs-$(uname -r).img | grep virtio,Ubuntu执行lsinitrd /boot/initrd.img-$(uname -r) | grep virtio,确认virtio是否包含在临时文件系统中。
如上面截图,表示系统以及包含了virtio驱动,可以进行进行上传。
如果临时文件系统没有包含virtio驱动,则需要修复临时文件系统。
修复临时文件系统
如果检查发现内核支持virtio但是临时文件系统又没有包含virtio驱动时,需要修复临时文件系统。
CentOS/RedHat 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 \
CentOS/RedHat 6/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)
Debian/Ubuntu
echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \ /etc/initramfs-tools/modules mkinitramfs -o /boot/initrd.img-$(uname -r)"
编译安装virtio驱动
如果检查发现当前内核不支持virtio驱动,可以参考以下方式进行安装。这里以CentOS为例。
1. 下载内核安装包
执行yum install -y ncurses-devel gcc make wget以安装编译所需的工具。
执行uname -r以确认当前内核版本。
在Linux内核列表下载对应的内核版本源码。如3.10.10的源码下载地址为https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.gz
在这个例子中,通过wget下载内核包,解压到/usr/src/目录中。具体操作如下:
cd /usr/src wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.gz tar -xzf linux-3.10.10.tar.gz ln -s linux-3.10.10 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
出现以下界面,开始进行virtio相关配置(图中*表示编译到内核,m表示编译为模块):
使用空格勾选Virtualization项。然后回车键进入详细列表
在详细列表确认是否勾选了Kernel-based Virtual Machine选项。
返回到主界面,再通过上下键选择“Processor type and features”,回车键进入详细列表,再选择“Paravirtualized guest support”并回车键进入详细列表。确认是否选择了“KVM paravirtualized clock”和“KVM Guest support”。
返回到主界面,通过上下键选择“Device Drivers”,回车键进入详细列表,再选择“Block devices”并回车键进入详细列表。确认是否选择了“Virtio block driver (EXPERIMENTAL)”。
回到上一级“Device Drivers”的详细列表界面,上下键选择“Network device support”并回车键进入详细列表,确认是否选择了“Virtio network driver (EXPERIMENTAL)”。
最后按Esc键退出并根据弹窗提示保存.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驱动的安装了。