跳到主要内容

Linux 系统检查 virtio 驱动

云服务器系统内核需要支持 virtio 驱动(包括块设备驱动 virtio_blk 和网卡驱动 virtio_net)才能在站狐云 上正常运行,对于未编译进内核的 virtio_blk 驱动,还需要包含在 initramfs(或者 initrd) 文件中,云服务器才能正常工作,本文档以 CentOS 操作系统为例,指导您如何在导入镜像前进行检查以及修复镜像中对 Virtio 驱动的支持。

操作步骤

步骤 1:检查内核是否支持 Virtio 驱动

执行以下命令,确认当前内核是否支持 Virtio 驱动。

grep -i virtio /boot/config-$(uname -r)

返回类似如下结果:

img

  • 如果内核支持 virtio 驱动( virtio_blkvirtio_net 都支持),且 virtio_blk 驱动编译进入了内核(即 CONFIG_VIRTIO_BLK=y),则该内核支持导入,不需要后续确认。
  • 如果 virtio_blk 驱动是编译成内核模块的(即 CONFIG_VIRTIO_BLK=m),则还需要继续后续确认步骤,确认 virtio_blk 驱动正确包含进了 initramfs(或 initrd) 文件中。
    • 如果返回结果中 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

返回类似如下结果:

img

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

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

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

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

  • CentOS 6/CentOS 7/RedHat 6/RedHat 7 操作系统:

    cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
    mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initramfs-$(uname -r).img $(uname -r)
  • RedHat 5/CentOS 5 操作系统:

    cp /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.bak
    mkinitrd -f --with=virtio_blk --with=virtio_pci /boot/initrd-$(uname -r).img $(uname -r)
  • Debian/Ubuntu 操作系统:

    echo -e "virtio_pci\nvirtio_blk" >> /etc/initramfs-tools/modules
    update-initramfs -u