1、检查服务器内核是否支持virtio驱动
grep -i virtio /boot/config-$(uname -r)
如果在输出信息中没有找到 VIRTIO_BLK 及 VIRTIO_NET 的信息,表示该操作系统没有安装 virtio 相关驱动;
如果参数 CONFIG_VIRTIO_BLK 及 CONFIG_VIRTIO_NET 取值为 y,表示包含了 virtio 驱动;
如果参数CONFIG_VIRTIO_BLK及CONFIG_VIRTIO_NET取值为m,需要进入第2步。

2、确认virtio驱动是否包含在内存文件系统initramfs或者initrd中
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
确认initramfs已经包含了virtio_blk驱动,以及其所依赖的virtio.ko、virtio_pci.ko和virtio_ring.ko,如果initramfs没有包含virtio驱动,则需要修复内存文件系统。

3、修复内存文件系统
通过检查,发现源服务器内核支持virtio驱动,但是临时文件系统initramfs或者initrd中没有包含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)”

=====================
下载内核安装包
yum install -y ncurses-devel gcc make wget

根据当前系统使用的内核版本下载对应的内核版本源码
uname -r
https://www.kernel.org/pub/linux/kernel

cd /usr/src/
wget https://www.kernel.org/pub/linux/kernel/v”$(uname -r)”/linux-“$(uname -r)”.tar.gz
tar -xzf linux-“$(uname -r)”.tar.gz
ln -s linux-“$(uname -r)” linux
cd /usr/src/linux

编译内核

依次运行以下命令编译内核(选*配置表示编译到内核,选m配置表示编译为模块)
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

a、使用空格勾选Virtualization项
确认是否勾选了KVM(Kernel-based Virtual Machine)选项
Processor type and features —>
[*] Paravirtualized guest support —>
— Paravirtualized guest support
(128) Maximum allowed size of a domain in gigabytes
[*] KVM paravirtualized clock
[*] KVM Guest support

Device Drivers —>
[*] Block devices —>
Virtio block driver (EXPERIMENTAL)
-*- Network device support —>
Virtio network driver (EXPERIMENTAL)

b、按下Esc键退出内核配置界面并根据弹窗提示保存.config文件
c、检查virtio相关配置是否已经正确配置
d、若检查后发现暂未设置virtio相关配置,运行以下命令手动编辑.config文件
make oldconfig
make prepare
make scripts
make
make install

e、运行以下命令查看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驱动。

PS:https://wiki.gentoo.org/wiki/Initramfs/Guide/zh-cn
https://help.aliyun.com/document_detail/62423.html