ubuntu20.04 内核模块总是在启动时被删除,是什么原因,该怎么修复?

使用的软件依赖内核模块 openvswtich.ko

平常使用时都是用 modprobe openvswitch 手工加载模块。后来有比较上一段时间没有使用,内核也升级逐渐了几次。后面使用就发现 modprobe openvswitch 会提示错误:

root@u20:~# modprobe openvswitch
modprobe: FATAL: Module openvswitch not found in directory /lib/modules/5.4.0-91-generic

确认内核及相关系统软件都是 5.4.0-91, 其他旧内核后面也删除了。
通过文件查找发现确实没有 openvswtich.ko 内核模块文件

再后来,通过各种研究,发现重装内核模块软件 linux-modules-5.4.0-91-generic 可以解决问题, openvswtich.ko 也回来了 modprobe openvswitch 也能成功。

可是,只要一重启,一切回到原样。 系统还把我重装 linux-modules-5.4.0-91-generic 补回来的文件给删了,删掉了好多文件, /lib/modules/5.4.0-91-generic/kernel/net/openvswitch/openvswitch.ko 是其中之一。 整个/lib/modules/5.4.0-91-generic/kernel/net/openvswitch/ 文件夹都被删了。/lib/modules/5.4.0-91-generic/kernel/net还有很多文件夹被删掉(重装所添加的文件夹都被删了)。

阅读 3k
2 个回答

你怎么升级内核的?如果你是通过更新linux-generic 包那你什么都不用做,因为这个包是个元数据包,会对应依赖最新版本的linux-image-generic,传递依赖同版本的linux-modules-xxx-generic

依赖图如下:

linux-generic
 ├─ linux-headers-generic
 │   ╰─ linux-headers-5.4.0-96-generic
 │       ╰─ linux-headers-5.4.0-96
 ╰─ linux-image-generic
     ├─ linux-firmware
     ├─ linux-image-5.4.0-96-generic
     │   ╰─ linux-modules-5.4.0-96-generic
     ╰─ linux-modules-extra-5.4.0-96-generic
         ├─ linux-image-5.4.0-96-generic*
         ├─ linux-image-unsigned-5.4.0-96-generic
         │   ├─ kmod*
         │   ├─ linux-base*
         │   ╰─ linux-modules-5.4.0-96-generic*
         ╰─ wireless-crda

同时apt任务会自动调用update-initramfs -u更新initramfs。如果你是编译安装内核更新的,那么你需要手动执行上述这些全部内容。

开机自动加载的module(就是你需要执行modprobe的那些模块)可以写入配置文件/etc/modules-load.d/modules.conf,开机的时候系统会帮你自动调用modprobe加载。

我的猜测是你更新内核的时候是不是还调用了诸如autoremove之类的命令清理掉了旧内核(或者等同的配置了/etc/apt/apt.conf.d/01autoremove-kernels),它会删掉旧内核,于是依赖的module模块自然被一并删除了,你升级之后又降级内核回来自然不会给你再把module包装回来。

EDIT:

我知道怎么回事了。无论linux-modules-xxx-generic 还是 linux-modules-extra-xxx-generic都不包含openvswtich.ko

因此这个模块肯定是你自己编译的,自己编译的内核模块记得一定要加到dkms中,这样内核更新的时候会自动调用dkms命令生成新的内核模块,否则内核每次更新你都得手工编译一次才能生成对应内核版本的模块,麻烦

装完你的东西记得执行
update-initramfs -u

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏