kernelアップデート /boot 空き容量が足りない

Linux

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

クラウド提供パッケージから新規インストールしたLinuxに対して、カーネルをアップデートしようとしたら、/boot 空きスペースが無いとエラーが表示されました。

誰だよ!こんなOSイメージを作成した奴・・・

  • kernelアップデートに失敗する
  • /boot 空きスペースが無い
  • 古いカーネルを削除したい

/boot 容量を開放し最新版カーネルにバージョンアップする手順を解説します。

/boot 容量を開放する方法(結論を先に)

お急ぎの方は、このコマンドを実行してください。

# dnf remove --oldinstallonly

このコマンドで古いカーネルが削除されます。結果、/boot の空き容量が増えて最新カーネルのアップデートを行うことができます。

RPMアップデートにエラー表示(事象)

/boot 空き容量がない

RPMパッケージの最新化を行うためにアップデートコマンドを実行したらエラーで失敗しました。

# dnf update

・・・
略
・・・

Running transaction check
Transaction check succeeded.
Running transaction test
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'yum clean packages'.
Error: Transaction test error:
  installing package kernel-core-5.14.0-427.40.1.el9_4.x86_64 needs 5MB more space on the /boot filesystem

Error Summary
-------------
Disk Requirements:
   At least 5MB more space needed on the /boot filesystem.

パッケージ競合が原因になることはよくあります。今回のように容量不足によるエラーは初めての経験です。

# yum clean packages
9 files removed

どうしたものかと考えこみましたが、’yum clean packages’ を実行しろ!的なことが記述されているので何も考えずに実行しました。しかし状況は改善しません。

不具合の原因を確認(切り分け)

/boot 利用状況を確認

とりあえず、まずはディスク容量を確認します。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           369M     0  369M   0% /dev/shm
tmpfs           148M  3.2M  145M   3% /run
/dev/sda3        28G  2.2G   26G   8% /
/dev/sda1       448M  409M   39M  92% /boot
tmpfs            74M     0   74M   0% /run/user/0

確かに /boot 領域が上限に近づいているようです。どのようなファイルがあるかも確認します。

# ls -alh /boot/
・・・ 略 ・・・
-rwxr-xr-x.  1 root root  13M May  2 04:23 vmlinuz-5.14.0-427.13.1.el9_4.x86_64
-rwxr-xr-x.  1 root root  13M May  9 02:59 vmlinuz-5.14.0-427.16.1.el9_4.x86_64
-rwxr-xr-x.  1 root root  13M Sep 25 21:03 vmlinuz-5.14.0-427.37.1.el9_4.x86_64
・・・ 略 ・・・

古いカーネル3つが保存されていることが分かりました。通常の場合は最新カーネルしか利用しないので古いカーネルを削除すれば /boot の空き領域を確保できそうです。

古いカーネルのRPMパッケージを削除(解決編)

古いカーネルの削除コマンド

CentOSでは、yum-utilsパッケージに含まれていた package-cleanup コマンドで古いカーネルを削除できたのですが、現在は yum から dnf に置き換わっています。OSディストリビューションによって異なるコマンドを利用することになるのでご注意ください。

AlmaLinux/RockyLinux dnf コマンドの場合

dnfコマンドに次の引数を与えることで最新パッケージのみ残し、古いカーネルを削除することができます。

# dnf remove --oldinstallonly

これで古いカーネルが削除され /boot の領域を確保することができました。

# dnf remove --oldinstallonly

・・・ 略 ・・・

Freed space: 246 M

・・・ 略 ・・・

Complete!

CentOS yum コマンドの場合

古いOSを利用している場合も考慮して一応まとめておきます。

# yum install yum-utils
# package-cleanup --oldkernels

あとがき

クラウド提供のOSを利用すると想定外の不具合が起こります。いつも最小パッケージでインストールしているので、空き容量不足はビビッてしまいました。

ただ、/boot にはカーネルに関するデータしかないので、dnf コマンドを利用するだけで簡単にインストールされた古いカーネルパッケージを削除することができました。