web-dev-qa-db-ja.com

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

私はコアサービス(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

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

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

21
ionreflex

apt-getに自動削除するカーネルと保持するカーネルを指示する自動生成されたファイルがあります。
apt-getがどのカーネルであるかを伝えるファイルは、/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 
#
#以下のカーネルパッケージを非自動削除としてマーク:
#-現在起動しているバージョン
#-カーネル呼ばれたバージョン
#-最新のカーネルバージョン(起動するカーネルを決定するために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)を自動削除できることがわかります。

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

30
Terrance