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
相关产品推荐
相关产品推荐

