/boot パーティション内の不要カーネル削除

Ubuntu のアップデートを実行する度に、旧バージョンのカーネルは、/boot に溜まり続けます。

アップデート後に、新しいカーネルで OS が立ち上がったら 古いカーネルは、2・3日くらい様子を見てから削除したほうが良いかもしれません。

基本的には、/boot パーティションの空き容量が少ないとアップデートに失敗するので、/boot の空き容量は、事前に確保しておいた方が良いと思います。

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

または、念のため、1・2世代分くらいは残しておいて、それ以外の古いカーネルに関しては、全て削除するやり方でも構いません。

先ほど説明したように、Ubuntu アップグレード時に /boot の空き容量が足りないと以下のようにエラーメッセージが表示され失敗するので、少なくとも 100 MB 位は確保しておいたほうが良いと思います。

/boot の容量不足によるアップグレード失敗例Raw (S)Raw (T)
# do-release-upgrade
・・・
The upgrade has aborted. The upgrade needs a total of 94.5 M free
space on disk '/boot'. Please free at least an additional 8,554 k of
disk space on '/boot'. You can remove old kernels using 'sudo apt
autoremove' and you could also set COMPRESS=xz in
/etc/initramfs-tools/initramfs.conf to reduce the size of your
initramfs.

システムを元に戻しています

中断します
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
=== Command terminated with exit status 1 (Fri Feb  9 17:40:03 2018) ===

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

  • 削除対象カーネル : 3.19.0-69 (古いカーネル)
  • 現在利用中のカーネル : 4.4.0-38-generic

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

現在のカーネルバージョン確認Raw (S)Raw (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* です。

カーネル一覧確認 [その1]Raw (S)Raw (T)
# dpkg --list | grep "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-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-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

または、カーネルイメージ だけ確認したい場合には、以下のようにすればもっと見やすくなります。

カーネル一覧確認 [その2]Raw (S)Raw (T)
# dpkg --list | grep "^ii" | grep "linux-image" | grep -v "extra"
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

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 (S)Raw (T)
# apt-get autoremove --purge linux-*-3.19* --dry-run
・・・

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

旧カーネルの削除Raw (S)Raw (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 (S)Raw (T)
# dpkg --list | grep "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-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-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

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