You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04 Minimal云镜像KVM环境中缺失nvme-tcp模块的解决方法咨询

Ubuntu 22.04 Minimal云镜像KVM环境中缺失nvme-tcp模块的解决方法咨询

首先得明确:你遇到的这个问题不是Minimal版本的锅,核心原因是KVM专用内核的特性导致的——Ubuntu的KVM内核(也就是你当前使用的5.15.0-1059-kvm)是针对虚拟化场景做了精简优化的,很多非虚拟化核心需求的存储模块默认没编译进去,nvme-tcp正好属于这类。而Minimal版本只是精简了用户空间的预装工具,内核模块的缺失和它关系不大,完全不用换成完整发行版~

下面给你几个实用的解决思路,按推荐程度排序:

1. 切换到通用内核(最稳妥,适合K8s节点)

通用内核(linux-generic)默认包含更多的硬件和存储模块,nvme-tcp肯定在里面:

  • 安装通用内核:
    sudo apt update && sudo apt install linux-generic
    
  • 重启系统,开机时选择新安装的通用内核(如果没自动切换,可以在GRUB菜单里手动选择)
  • 验证模块是否能加载:
    modprobe nvme-tcp && echo "模块加载成功"
    

这个方案的好处是后续内核升级时模块会自动同步,不用额外维护,非常适合K8s集群节点的长期运行。

2. 安装HWE内核(适合需要较新内核特性的场景)

如果你需要更新的内核功能,可以选择Ubuntu的硬件启用(HWE)内核,它的版本更新,默认也包含nvme-tcp:

sudo apt update && sudo apt install linux-generic-hwe-22.04

同样重启后切换内核,再验证模块加载即可。

3. 手动编译nvme-tcp模块(适合不想换内核的场景)

如果坚持要用当前的KVM内核,可以手动编译缺失的模块,但后续内核升级需要重复操作,维护成本较高:

  • 先安装编译依赖:
    sudo apt install build-essential linux-headers-$(uname -r)
    
  • 下载对应内核版本的源代码:
    sudo apt source linux-image-$(uname -r)
    
  • 进入内核源码目录,确保nvme-tcp被设置为模块编译(CONFIG_NVME_TCP=m):
    cd linux-5.15.0
    # 可以用图形界面配置:make menuconfig,找到Device Drivers -> NVME Support -> NVMe over TCP,选成模块(M)
    # 也可以直接修改.config文件,添加CONFIG_NVME_TCP=m
    
  • 编译nvme-tcp模块:
    make modules SUBDIRS=drivers/nvme/host
    
  • 安装模块到系统目录:
    sudo cp drivers/nvme/host/nvme-tcp.ko /lib/modules/$(uname -r)/kernel/drivers/nvme/host/
    sudo depmod -a
    
  • 最后验证加载:
    modprobe nvme-tcp
    

总结一下,最推荐的是切换到通用内核,既能解决nvme-tcp的问题,又能保证K8s节点的稳定性和可维护性,完全不用放弃Minimal版本的轻量化优势~

备注:内容来源于stack exchange,提问作者Daxcor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:43:08