‘apt’如何确定要保留多少旧内核?

我正在为核心服务(NTP,DNS等)管理几个服务器,我刚刚发现其中一个服务器似乎保留了3个最新的内核,而不是其他2个内核:

nul@quark:~$ sudo apt-get autoremove --purge Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. nul@quark:~$ dpkg -l |grep linux-image ii linux-image-3.13.0-51-generic 3.13.0-51.84 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP ii linux-image-3.13.0-52-generic 3.13.0-52.85 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP ii linux-image-3.16.0-37-generic 3.16.0-37.49~14.04.1 amd64 Linux kernel image for version 3.16.0 on 64 bit x86 SMP ii linux-image-extra-3.13.0-51-generic 3.13.0-51.84 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP ii linux-image-extra-3.13.0-52-generic 3.13.0-52.85 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP ii linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1 amd64 Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP ii linux-image-generic 3.13.0.52.59 amd64 Generic Linux kernel image ii linux-image-generic-lts-utopic 3.16.0.37.29 amd64 Generic Linux kernel image ... nul@dwarf:~$ sudo apt-get autoremove --purge Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. nul@dwarf:~$ dpkg -l |grep linux-image ii linux-image-3.13.0-52-generic 3.13.0-52.85 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP ii linux-image-3.16.0-37-generic 3.16.0-37.49~14.04.1 amd64 Linux kernel image for version 3.16.0 on 64 bit x86 SMP ii linux-image-extra-3.13.0-52-generic 3.13.0-52.85 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP ii linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1 amd64 Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP ii linux-image-generic 3.13.0.52.59 amd64 Generic Linux kernel image ii linux-image-generic-lts-utopic 3.16.0.37.29 amd64 Generic Linux kernel image 

所有服务器都维护相同,不知道我能做什么,必须是某个参数,但找不到它!

请满足我的好奇心! 谢谢

有一个自动生成的文件告诉apt-get要自动移动哪些内核以及要保留哪些内核。
告诉apt-get它们是哪些内核的/etc/apt/apt.conf.d/01autoremove-kernels/etc/apt/apt.conf.d/01autoremove-kernels ,它是从/etc/kernel/postinst.d/apt-auto-removal生成的。

通常情况是,当你接收内核更新时,当内核版本发生变化时,比如从3.133.16 ,然后更新/etc/apt/apt.conf.d/01autoremove-kernels以保留3.16*内核,然后设置为删除所有3.13内核,除非生成脚本指定不删除。

apt-auto-removal脚本:

  #作者:Steve Langasek 
 #
 #标记为不用于autoremoval的那些内核包:
 # - 当前启动的版本
 # - 我们被称为的内核版本
 # - 最新的内核版本(使用从grub复制的规则确定
 #package用于决定引导哪个内核)
 # - 第二个最新的内核版本,如果引导的内核版本是
 #已经是最新的,并且为同一个版本调用了这个脚本,
 #以确保在新安装的事件中仍然可以使用后备
这个ABI的#core无法启动
 #在常见情况下,这会导致保存两个内核,但它可以
 #结果保存了三个内核。 最好是站在一边犯错
 #节省太多内核而不是保存太少。
 #
 #我们生成此列表并将其保存到/etc/apt/apt.conf.d而不是标记
数据库中的#package,因为它来自postinst脚本和apt
 #将在退出时覆盖数据库。

但是,这有时不会标记它们用于自动删除,因为某些编码已经更改了版本以防止这种情况发生。

如果要将以前的内核标记为autoremove除了基于脚本所需的内核,请从终端窗口运行以下命令:

 sudo apt-mark auto ^linux-image- 

然后,当您运行apt-get autoremove命令时,只能删除旧的且不再需要的命令。 我在下面举了一些例子:

第一个显示系统上的所有内核减去当前运行的内核。

 root @ terrance-Linux:/ home / share #dpkg -l'linux- *'|  sed'/ ^ ii /!d; /'“$(uname -r | sed”s /\(.*\)-\([^ 0-9] \ + \)/ \ 1 /“)”'/ d; s / ^ [^] * [^] * \([^] * \)。* / \ 1 /; / [0-9] /!d'
 Linux的头,3.16.0-34
 Linux的头,3.16.0-34generics
 Linux的头,3.16.0-36
 Linux的头,3.16.0-36generics
 Linux的头,3.16.0-37
 Linux的头,3.16.0-37generics
 Linux的头,4.0.0-040000
 Linux的头,4.0.0-040000generics
 Linux的图像3.16.0-34generics
 Linux的图像3.16.0-36generics
 Linux的图像3.16.0-37generics
 Linux的图像4.0.0-040000generics
 Linux的图像超3.16.0-34generics
 Linux的图像超3.16.0-36generics
 Linux的图像超3.16.0-37generics

这个显示了当前运行的内核。

  terrance @ terrance-Linux:〜$ uname -r
 4.0.1-040001generics
  terrance @ terrance-Linux:〜$ sudo apt-get autoremove
 [sudo] terrance的密码: 
阅读包裹清单......完成
构建依赖树       
阅读国家信息......完成
 0升级,0新安装,0删除,0未升级。
  terrance @ terrance-Linux:〜$ sudo apt-mark auto ^ linux-image-
 linux-image-extra-3.16.0-33-generic无法标记,因为它未安装。
 linux-image-extra-3.13.0-27-generic无法标记,因为它未安装。
 linux-image-3.13.0-44-lowlatency无法标记,因为它未安装。
 linux-image-3.13.0-27-generic无法标记为未安装。
 linux-image-3.16.0-31-lowlatency无法标记,因为它未安装。
 linux-image-3.16.0-36-generic设置为自动安装。
 linux-image-lowlatency-lts-utopic无法标记,因为它未安装。
 linux-image-extra-3.13.0-36-generic无法标记,因为它未安装。
 linux-image-3.13.0-36-generic无法标记为未安装。
 linux-image-4.0.0-040000-generic设置为自动安装。
 linux-image-extra-3.13.0-45-generic无法标记,因为它未安装。
 linux-image-3.16.0-25-generic无法标记,因为它未安装。

注意: 上面的列表太长了,所以我截断了一点。

  terrance @ terrance-Linux:〜$ sudo apt-get autoremove
阅读包裹清单......完成
构建依赖树       
阅读国家信息......完成
以下包将被删除:
   linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic
   linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic
   Linux的图像超3.16.0-36generics
 0升级,0新安装,5删除,0未升级。
执行此操作后,将释放613 MB磁盘空间。
你想继续吗?  [Y / N] 

因此,在运行这些命令之后,您可以看到我现在可以自动删除所有旧的但当前内核(4.0.1-040001-generic)和下一个最新的(3.16.0-37-generic)。

希望这会有所帮助。