「apt」は、保持する古いカーネルの数をどのように決定しますか?


23

私はコアサービス(NTP、DNSなど)のためにいくつかのサーバーを管理していますが、サーバーの1つが他の2つではなく3つの最新のカーネルを保持しているように思われました。

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

すべてのサーバーは同じように維持され、私が何をすることができたかわからない、どこかにパラメーターでなければならないが、それを見つけることができません!

私の好奇心を養ってください!ありがとうございました

回答:


32

自動削除するapt-getカーネルと保持するカーネルを指示する自動生成されたファイルがあります。どのカーネルであるか
を伝えるファイルは、から生成されたものです。 apt-get/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スクリプトから:

#著者:スティーブランガセク 
#
#次のカーネルパッケージを非自動削除としてマークします。
#-現在起動されているバージョン
#-求められているカーネルのバージョン
#-最新のカーネルバージョン(grubからコピーされたルールを使用して決定)
#起動するカーネルを決定するパッケージ)
#-2番目に新しいカーネルバージョン(起動したカーネルバージョンが
#すでに最新であり、このスクリプトは同じバージョンに対して呼び出されます。
#新たにインストールされたイベントでフォールバックが利用可能であることを保証する
#このABIのカーネルは起動に失敗します
#一般的なケースでは、これにより正確に2つのカーネルが保存されますが、
#3つのカーネルが保存されます。側に誤ることの方が良い
#少なすぎる保存よりも多すぎるカーネルの保存。
#
#このリストを生成し、マークする代わりに/etc/apt/apt.conf.dに保存します
#データベース内のパッケージ。これはpostinstスクリプトから実行され、apt
#終了時にdbを上書きします。

ただし、これは、これを防ぐためにバージョンによってコーディングの一部が変更されているため、自動削除の対象としてマークされない場合があります。

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-headers-3.16.0-34
linux-headers-3.16.0-34-generic
linux-headers-3.16.0-36
linux-headers-3.16.0-36-generic
linux-headers-3.16.0-37
linux-headers-3.16.0-37-generic
linux-headers-4.0.0-040000
linux-headers-4.0.0-040000-generic
linux-image-3.16.0-34-generic
linux-image-3.16.0-36-generic
linux-image-3.16.0-37-generic
linux-image-4.0.0-040000-generic
linux-image-extra-3.16.0-34-generic
linux-image-extra-3.16.0-36-generic
linux-image-extra-3.16.0-37-generic

これは、現在実行中のカーネルを示しています。

terrance @ terrance-Linux:〜$ uname -r
4.0.1-040001-generic
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-image-extra-3.16.0-36-generic
0がアップグレードされ、0が新しくインストールされ、5が削除され、0がアップグレードされていません。
この操作の後、613 MBのディスク領域が解放されます。
続けたいですか?[Y / n]

そのため、これらのコマンドを実行すると、現在のカーネル(4.0.1-040001-generic)を除くすべての古いカーネルと、次に新しいカーネル(3.16.0-37-generic)を自動削除できることがわかります。

これがお役に立てば幸いです。


Ubuntuはデフォルトで自動削除を行いませんか?選択肢はありますが、(まだ)「不要な」カーネルが何であるかを判断することは不可能と考えられました(他のオペレーティングシステムでは「不要」は「未使用」に等しい)。
リンツウィンド

OK。私はそのビットに関するあなたの投稿を読み違えました
;

1
@Terrance私はパスしようとしましたが、sudo apt-mark auto ^linux-image-続きsudo apt-get autoremove --purgeませんでした。ただし、dist-upgrade2つのカーネル(3.13.0-52および3.16.0.37)を少し変更し、次のものautoremoveは3.13.0-51を削除しました...
ionreflex

1
@ionreflexそれを見つけてくれてうれしい。すべての答えが完璧というわけではなく、すべての人に役立つとは限りません。しかし、自分のような人々が少しのトラブルシューティングを行い、それらを削除する方法を見つけ出すことができるのは素晴らしいことです。私はdist-upgradeあなたが走ったことをキックオフし、/etc/kernel/postinst.d/apt-auto-removalそれを修正してから、どれ/etc/apt/apt.conf.d/01autoremove-kernelsを保持するかを伝えていると考えています。
テランス

1
@Terrance dist-upgrade前にやったことはかなり確かですが、今朝カーネルがアップグレードされたという事実がうまくいきました...とにかく、乾杯、そしてあなたの答えをありがとう、私はそれを通して多くを学びました!
ionreflex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.