クラウド提供パッケージから新規インストールした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 コマンドを利用するだけで簡単にインストールされた古いカーネルパッケージを削除することができました。