‘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.13
到3.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)。
希望这会有所帮助。