有时,我在运行时看到升级列表中提到了 Linux 内核pacman -Syu
(在 Arch Linux 中更新我的软件包)。每当发生这种情况时,安装软件包后,我无法再安装 USB 驱动器,直到重新启动。我只是想知道这是否是常见的和预期的事情(如果是的话,为什么,我想知道),或者这是否是我不应该调查的事情。
答案1
也许,在该分布上,这是正常的。这取决于包管理器如何安装新内核。
我想你的包管理器(升级内核时)会立即删除旧的内核模块目录。这样,当您尝试安装脂肪组织-格式化U盘,内核将无法加载所需的vfat内核模块。
为了验证我的假设,下次升级内核时,可以检查内核模块目录是否存在:
在升级之前,您应该发现它存在一个名为当前(旧)内核版本的目录。
~> ls -d /lib/modules/`uname -r` /lib/modules/3.0.0-1.2-desktop
升级后但在重新启动之前,您应该发现该目录不再存在(因此您无法管理新硬件)。
~> ls -d /lib/modules/`uname -r` ls: cannot access /lib/modules/3.0.0-1.2-desktop: No such file or directory
重新启动后,您应该发现它存在一个名为当前(新)内核版本的新内核模块目录。
~> ls -d /lib/modules/`uname -r` /lib/modules/3.1.0-1.4
为了避免这个问题,其他发行版(如 openSuSE)会延迟目录删除,直到您重新启动。
答案2
是和不是。理想情况下不需要重新启动,但在实践中可能很难安排。
您应该能够继续使用在此会话中已使用过的设备类型。如果您尝试使用需要加载模块的新设备类型(或文件系统格式或网络协议等),则会出现麻烦。新内核的模块可能与正在运行的内核不兼容。
如果这是一个较小的安全升级,没有更改任何二进制接口,那么新模块仍将运行。您的发行版必须已安排编译新内核,并指示二进制兼容性未受影响(相同的uname -r
输出)。
如果这是更改内核软件包版本的重大升级,您可以保留旧软件包和新软件包,直到下次重新启动。这样模块仍将从旧包中加载。
当升级覆盖现有内核和模块但改变二进制兼容性时,就会出现问题。理想情况下,发行版不会这样做。如果你觉得幸运,你可以强制加载一个模块modprobe --force-vermagic --force-modversion
;请注意,如果确实存在二进制不兼容性,这可能并且将会导致崩溃、数据损坏和小狗杀死:使用风险自负。