从 18.04 开始,Ubuntu 在升级到新内核时会删除旧内核。据我所知,此过程是安装过程的一部分。我的机器上目前安装了 3 个不同的内核版本。
在内核更新似乎破坏了我的系统之后,我需要手动启动旧内核,我现在想知道 Ubuntu 使用什么逻辑来决定保留哪些内核以及删除哪些内核。具体来说,我想知道工作内核是否最终会从保留的内核中轮换出来。
- 我是否正确认为所有内核清理任务都是在安装时执行的,没有任何操作被推迟到系统重新启动?(就像后一种情况一样,这些延迟的任务理论上可以删除除新安装的内核之外的任何内核。)
- Ubuntu 如何确定要删除哪些内核?它只是保留n最新的内核,或者逻辑比这更复杂?
- 更新时运行的内核是否保证保留到下次更新?
- Ubuntu 是否有任何跟踪机制来检测哪些内核已经干净启动,并确保并非所有内核都被删除?
答案1
内核安装相关任务由 /etc/kernel 中的脚本处理,您可以直接自行浏览逻辑。
Ubuntu 如何确定要删除哪些内核?它只是保留最近的 n 个内核,还是逻辑比这更复杂?
更新时运行的内核是否保证保留到下次更新?
内核由脚本选择/etc/kernel/postinst.d/apt-auto-removal
。该脚本顶部的注释特别有启发性:
# Mark as not-for-autoremoval those kernel packages that are:
# - the currently booted version
# - the kernel version we've been called for
# - the latest kernel version (as determined by debian version number)
# - the second-latest kernel version
#
# In the common case this results in two kernels saved (booted into the
# second-latest kernel, we install the latest kernel in an upgrade), but
# can save up to four. Kernel refers here to a distinct release, which can
# potentially be installed in multiple flavours counting as one kernel.
我是否正确认为所有内核清理任务都是在安装时执行的,没有任何操作被推迟到系统重新启动?(就像后一种情况一样,这些延迟的任务理论上可以删除除新安装的内核之外的任何内核。)
不完全是。较旧的内核已制作有资格的立即自动删除/etc/kernel/postinst.d/apt-auto-removal
。较旧的软件包直到下次 apt 运行自动删除时才会被删除。在安装了无人值守升级的系统中,这通常意味着第二天。
Ubuntu 是否有任何跟踪机制来检测哪些内核已经干净启动,并确保并非所有内核都被删除?
不确定您说的“干净启动”是什么意思。Ubuntu 假定当前启动的内核可以正常工作,并且不会使当前启动的内核符合自动删除的条件...但您已经知道这一点了。