古いカーネルって溜めておくと /boot パーティションが危ない

カーネルのアップデートが頻繁に行われると旧バージョンのカーネルが溜まり続けたりします。

万が一のために、2世帯分くらいは、残しておいてもいいかもしれませんが、溜め続けると知らぬ間に /boot パーティションを圧迫してきます。

基本的には、皆さん カーネルのアップデートを実施した後、新しいカーネルで問題なく起動できることと中で動いているアプリケーションの動作確認くらいは一通り実施すると思います。

なので、新カーネルで OS が立ち上がったら、旧カーネルに関しては、特に理由がなければ、その場で削除するか、2・3日くらい様子を見てから削除してしまったほうが良いのではないかと思います。 (1世帯分残すか、2世帯分残すかは環境に合わせて決めてください)

ちなみに、当たり前なことなんですが、/boot パーティションの空き容量が少ないと、カーネルのアップデートに失敗します。

なので、古すぎるカーネルが存在する場合には、削除しておくことをオススメします。

この例では、以下を前提としています。

  • 旧カーネル : 3.19.0-69 (古いカーネル・削除対象)
  • 新カーネル : 4.4.0-38-generic (現在のカーネル)

Step 1. 現在のカーネルバージョン確認

現在のカーネルバージョン確認Raw Code(S)Raw Code(T)
# uname -a
Linux my-server.hogehoge.com 4.4.0-38-generic #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Step 2. カーネル一覧確認

現在、システムにインストールされている全てのカーネル一覧を確認します。

今回の削除対象は、カーネルバージョン 3.19.0* です。

カーネル一覧確認Raw Code(S)Raw Code(T)
# dpkg --list | fgrep 'linux-'
ii  linux-base                          4.0ubuntu1        all         Linux image base package
ii  linux-firmware                      1.157.3           all         Firmware for Linux kernel drivers
ii  linux-generic                       4.4.0.38.40       amd64       Complete Generic Linux kernel and headers
ii  linux-headers-3.19.0-69             3.19.0-69.77      all         Header files related to Linux kernel version 3.19.0
ii  linux-headers-3.19.0-69-generic     3.19.0-69.77      amd64       Linux kernel headers for version 3.19.0 on 64 bit x86 SMP
ii  linux-headers-4.4.0-38              4.4.0-38.57       all         Header files related to Linux kernel version 4.4.0
ii  linux-headers-4.4.0-38-generic      4.4.0-38.57       amd64       Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii  linux-headers-generic               4.4.0.38.40       amd64       Generic Linux kernel headers
ii  linux-image-3.19.0-69-generic       3.19.0-69.77      amd64       Linux kernel image for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-38-generic        4.4.0-38.57       amd64       Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-3.19.0-69-generic 3.19.0-69.77      amd64       Linux kernel extra modules for version 3.19.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-38-generic  4.4.0-38.57       amd64       Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-generic                 4.4.0.38.40       amd64       Generic Linux kernel image

Step 3. カーネル削除テスト、及び旧カーネル削除

  • 削除試験 : apt-get autoremove --purge linux-*-3.19* --dry-run
  • 削除実行 : apt-get autoremove --purge linux-*-3.19*

カーネルを削除する際には、apt-get コマンドを使います。

旧カーネルを削除する際に、設定ファイルも含めて削除したい場合には、--purgeオプションを付けます。

実際に削除する前に、問題なく削除できることを確認するために、削除テスト (シミュレーション) をしたい場合には、--dry-run オプションを付けて実行します。

カーネル削除時のオプションについて

  • autoremove : 削除しても問題ない不要なパッケージ (依存関係のないパッケージ) を自動的に削除する
  • --purge : カーネル・パッケージを削除する際に、設定ファイルも含めて削除する
  • --dry-run : 実際に処理を実行せずに、テストを実施する (動作確認用)

念のため、まずは、削除テストから。

カーネル削除テスト (削除シミュレーション)Raw Code(S)Raw Code(T)
# apt-get autoremove --purge linux-*-3.19* --dry-run
・・・

テスト結果、特にエラー等が表示されなかったら次のコマンドを実行し、実際に旧カーネルを削除します。

旧カーネルの削除Raw Code(S)Raw Code(T)
# apt-get autoremove --purge linux-*-3.19*
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、glob 'linux-*-3.19*' のために 'linux-image-3.19.0-69-generic' を選択します
注意、glob 'linux-*-3.19*' のために 'linux-source-3.19.0' を選択します
注意、glob 'linux-*-3.19*' のために 'linux-doc-3.19.0' を選択します
注意、glob 'linux-*-3.19*' のために 'linux-image-extra-3.19.0-69-generic' を選択します
注意、glob 'linux-*-3.19*' のために 'linux-headers-3.19.0-69-generic' を選択します
注意、glob 'linux-*-3.19*' のために 'linux-headers-3.19.0-69' を選択します
パッケージ 'linux-doc-3.19.0' はインストールされていないため削除もされません
パッケージ 'linux-source-3.19.0' はインストールされていないため削除もされません
以下のパッケージは「削除」されます:
  libboost-iostreams1.55.0* libck-connector0* libdns-export100* libicu52* libirs-export91* libisc-export95* libisccfg-export90*
  linux-headers-3.19.0-69* linux-headers-3.19.0-69-generic* linux-image-3.16.0-44-generic* linux-image-3.19.0-69-generic*
  linux-image-extra-3.16.0-44-generic* linux-image-extra-3.19.0-69-generic* watershed*
アップグレード: 0 個、新規インストール: 0 個、削除: 14 個、保留: 0 個。
この操作後に 523 MB のディスク容量が解放されます。
続行しますか? [Y/n] Y
・・・
linux-headers-3.19.0-69-generic (3.19.0-69.77) を削除しています ...
linux-headers-3.19.0-69 (3.19.0-69.77) を削除しています ...
linux-image-extra-3.16.0-44-generic (3.16.0-44.59) を削除しています ...
・・・

Step 4. 旧カーネル削除確認

最後に、旧カーネルが削除されていることを確認します。

旧カーネル削除確認Raw Code(S)Raw Code(T)
# dpkg --list | fgrep 'linux-'
ii  linux-base                          4.0ubuntu1        all         Linux image base package
ii  linux-firmware                      1.157.3           all         Firmware for Linux kernel drivers
ii  linux-generic                       4.4.0.38.40       amd64       Complete Generic Linux kernel and headers
ii  linux-headers-4.4.0-38              4.4.0-38.57       all         Header files related to Linux kernel version 4.4.0
ii  linux-headers-4.4.0-38-generic      4.4.0-38.57       amd64       Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii  linux-headers-generic               4.4.0.38.40       amd64       Generic Linux kernel headers
ii  linux-image-4.4.0-38-generic        4.4.0-38.57       amd64       Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-38-generic  4.4.0-38.57       amd64       Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-generic                 4.4.0.38.40       amd64       Generic Linux kernel image

以上、Ubuntu 不要カーネル削除 でした。