Linuxを長く使っていると、システムアップデートのたびに新しいカーネルがインストールされていきます。
気づいたら /boot
パーティションがいっぱいになっていて、「更新できません」というエラーが表示された経験はありませんか?
実は、Linuxには使っていない古いカーネルがどんどん溜まっていくという特徴があります。これらを削除すれば、貴重なディスク容量を簡単に取り戻せます。
この記事では、古いカーネルを安全に削除する方法から、削除すべきかどうかの判断基準まで、初心者の方にも分かりやすく解説していきます。
Linuxカーネルとは?なぜ古いものが残るのか
まず基本から理解しましょう。
カーネルって何?
カーネルは、Linuxの心臓部とも言える重要なプログラムです。
OSの核となる部分で、以下のような役割を担っています:
- ハードウェア(CPU、メモリ、ディスク)の管理
- プログラムの実行管理
- ファイルシステムの制御
- ネットワーク通信の処理
つまり、コンピューターのあらゆる基本機能を制御する「司令塔」のような存在なんですね。
なぜ古いカーネルが残るのか?
Linuxをアップデートすると、新しいバージョンのカーネルがインストールされます。
例えば:
- 5.15.0-56-generic
- 5.15.0-58-generic
- 5.15.0-60-generic
このように、新しいカーネルがインストールされても古いカーネルは自動的に削除されません。
これには重要な理由があります。
古いカーネルを残しておく理由
新しいカーネルに問題があった場合の保険として、古いカーネルが保持されています。
新しいカーネルで:
- ハードウェアが正常に動作しない
- システムが起動しなくなる
- 特定のドライバーが動かなくなる
といった問題が発生した時、起動時にGRUBメニューから古いカーネルを選択すれば、以前の安定した状態に戻れます。
これは「セーフティネット」のような仕組みですね。
古いカーネルの問題点:削除すべき理由
保険として役立つ古いカーネルですが、ずっと残しておくことにはデメリットもあります。
問題1:ディスク容量の圧迫
カーネル関連ファイルは意外と大きいです。
一つのカーネルバージョンで:
- カーネルイメージ:50〜100MB
- カーネルヘッダー:10〜20MB
- カーネルモジュール:100〜300MB
合計すると、一つのカーネルで200〜400MB程度のディスク容量を消費します。
5個も10個も溜まっていたら、1GB以上のスペースが無駄になっているかもしれません。
問題2:/bootパーティションの容量不足
特に問題なのが /boot
パーティションです。
多くのLinuxインストールでは、/boot
は独立した小さなパーティション(200MB〜500MB程度)として作られています。
ここが古いカーネルで埋まってしまうと:
- 新しいカーネルがインストールできない
- システムアップデートが失敗する
- 起動に必要なファイルを保存できない
といった深刻な問題が発生します。
問題3:GRUBメニューが長くなる
古いカーネルが10個も20個もあると、起動時のGRUBメニューが非常に長くなります。
必要なカーネルを選ぶのが面倒になりますし、見た目も煩雑です。
問題4:セキュリティリスク
古いカーネルには、すでに発見された脆弱性が残っている可能性があります。
通常は最新のカーネルを使うので問題ありませんが、誤って古いカーネルで起動してしまうと、セキュリティ上のリスクが生じます。
現在のカーネル状況を確認する方法
削除する前に、まず現在の状況を把握しましょう。
使用中のカーネルバージョンを確認
現在動いているカーネルのバージョンは以下のコマンドで確認できます:
uname -r
出力例:
5.15.0-60-generic
このバージョンは絶対に削除してはいけません!
インストールされている全カーネルを確認(Ubuntu/Debian系)
Ubuntuやその派生ディストリビューションの場合:
dpkg --list | grep linux-image
または:
dpkg --list | grep linux-headers
出力例:
ii linux-image-5.15.0-56-generic
ii linux-image-5.15.0-58-generic
ii linux-image-5.15.0-60-generic
ii linux-image-generic
インストールされている全カーネルを確認(Fedora/RHEL系)
Fedora、CentOS、RHELなどの場合:
rpm -qa | grep kernel
または:
dnf list installed kernel
/bootディレクトリの容量を確認
/boot
パーティションの使用状況を確認:
df -h /boot
出力例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 470M 380M 66M 86% /boot
86%使用されていますね。そろそろ整理が必要です。
詳細なファイルサイズを確認
/boot
内のファイルを容量順に表示:
du -h /boot | sort -rh | head -20
どのカーネルがどれだけのスペースを使っているか確認できます。
古いカーネルを安全に削除する方法(Ubuntu/Debian系)
それでは実際に削除していきましょう。
重要な注意事項:
- 現在使用中のカーネルは削除しない
- 最新のカーネルは必ず残す
- 最低でも2〜3個のカーネルを残しておく
方法1:apt autoremoveを使う(最も簡単)
最も簡単で安全な方法です:
sudo apt autoremove
このコマンドは:
- 現在使っていない古いカーネルを自動検出
- 現在のカーネルと最新のカーネルは残す
- 安全に削除可能なものだけを削除
初めて削除する方は、この方法がおすすめです。
方法2:特定のカーネルを指定して削除
より細かく制御したい場合は、個別に削除できます。
まず、削除したいカーネルバージョンを確認:
dpkg --list | grep linux-image
削除するカーネルを決めたら:
sudo apt remove linux-image-5.15.0-56-generic
sudo apt remove linux-headers-5.15.0-56-generic
関連するすべてのパッケージを削除:
sudo apt remove --purge linux-image-5.15.0-56-generic linux-headers-5.15.0-56-generic
--purge
オプションを付けると、設定ファイルも含めて完全に削除されます。
方法3:複数のカーネルをまとめて削除
複数のバージョンを一度に削除する場合:
sudo apt remove linux-image-5.15.0-5{6,58}-generic linux-headers-5.15.0-5{6,58}-generic
これで5.15.0-56と5.15.0-58の両方が削除されます。
削除後の処理
カーネルを削除した後は、必ずGRUBの設定を更新しましょう:
sudo update-grub
これで起動メニューから削除したカーネルの項目が消えます。
古いカーネルを安全に削除する方法(Fedora/RHEL系)
Fedora、CentOS、RHELなどでの削除方法です。
方法1:dnf/yumの自動削除機能を使う
Fedoraでは、デフォルトで最新3つのカーネルだけを保持する設定になっています。
現在の設定を確認:
cat /etc/dnf/dnf.conf | grep installonly_limit
出力例:
installonly_limit=3
この設定により、4つ目以降のカーネルは自動的に削除されます。
手動で古いカーネルを削除:
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
これで最新2つ以外のカーネルが削除されます。
方法2:特定のカーネルを指定して削除
個別に削除する場合:
sudo dnf remove kernel-5.14.0-162
または:
sudo yum remove kernel-5.14.0-162
保持するカーネル数を変更
もっと多くのカーネルを残したい場合は、設定を変更できます:
sudo nano /etc/dnf/dnf.conf
以下の行を追加または変更:
installonly_limit=5
これで最新5つのカーネルが保持されるようになります。
どのカーネルを残すべき?判断基準
すべて削除するわけにはいきません。残すべきカーネルの判断基準を紹介します。
絶対に残すべきカーネル
- 現在使用中のカーネル
uname -r
で確認したバージョン- これを削除するとシステムが起動しなくなる可能性があります
- 最新のカーネル
- 最も新しいバージョン
- セキュリティアップデートやバグ修正が含まれています
- 安定動作が確認されているカーネル
- システムが問題なく動作している一つ前のバージョン
- 新しいカーネルで問題が出た時の避難先
削除してもよいカーネル
- 現在より2つ以上古いバージョン
- 長期間使用していないバージョン
- 特に問題なく新しいカーネルに移行できたことが確認済みのもの
推奨される保持数
一般的な推奨:3〜5個
- デスクトップ環境:3個で十分
- サーバー環境:5個程度(より慎重に)
- テスト環境:2個でもOK
例:
- 現在使用中:5.15.0-60-generic
- 最新版:5.15.0-60-generic(同じなのでこれだけ)
- 一つ前:5.15.0-58-generic
- 二つ前:5.15.0-56-generic
この場合、5.15.0-56より古いものは削除してもよいでしょう。
削除後のトラブルと対処方法
カーネル削除後に問題が起きた場合の対処法です。
問題1:起動メニューに削除したカーネルが残っている
原因:
GRUBの設定が更新されていません。
解決方法:
sudo update-grub
問題2:システムが起動しなくなった
原因:
誤って現在使用中のカーネルを削除してしまった可能性があります。
解決方法:
- 起動時にGRUBメニューを表示(Shiftキーを押す)
- 「Advanced options」を選択
- 残っている別のカーネルで起動
- システムが起動したら、新しいカーネルを再インストール:
sudo apt install linux-image-generic
問題3:カーネルモジュールが読み込めない
原因:
必要なカーネルモジュールを削除してしまった可能性があります。
解決方法:
現在のカーネルに対応するモジュールを再インストール:
sudo apt install --reinstall linux-modules-$(uname -r)
問題4:ハードウェアが認識されなくなった
原因:
古いドライバーが動作していたカーネルを削除した可能性があります。
解決方法:
- 別のカーネルで起動してみる
- 最新のカーネルをインストール:
sudo apt update
sudo apt install linux-image-generic
- 必要に応じて専用ドライバーを再インストール
ディスク容量を節約する他の方法
カーネル削除以外にも、Linuxでディスク容量を節約する方法があります。
パッケージキャッシュのクリーンアップ
aptはダウンロードしたパッケージをキャッシュに保存しています:
# キャッシュのサイズを確認
du -sh /var/cache/apt/archives
# キャッシュをクリーンアップ
sudo apt clean
古いログファイルの削除
システムログが溜まっている場合:
# ログのサイズを確認
sudo journalctl --disk-usage
# 古いログを削除(7日より前)
sudo journalctl --vacuum-time=7d
# またはサイズで制限(500MBまで)
sudo journalctl --vacuum-size=500M
不要なパッケージの削除
使っていないパッケージを削除:
# 孤立したパッケージを確認
sudo apt list --installed | grep -v 'linux-image\|linux-headers'
# 不要なパッケージを削除
sudo apt autoremove
Snapパッケージの古いバージョン削除
Snapは各パッケージの古いバージョンを保持しています:
# 古いSnapを削除するスクリプト
sudo snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
自動削除の設定:手間を省く方法
古いカーネルを自動的に管理する方法を紹介します。
Ubuntu:自動削除の有効化
Ubuntuでは、自動削除を有効にできます:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
以下の行のコメントを外す(//
を削除):
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
これで、定期的に古いカーネルが自動削除されるようになります。
Fedora:保持数の設定
Fedoraでは、保持するカーネル数を設定するだけです:
sudo nano /etc/dnf/dnf.conf
以下を追加または変更:
installonly_limit=3
定期実行の設定
cronで定期的にクリーンアップを実行:
sudo crontab -e
以下を追加(毎週日曜日の午前3時に実行):
0 3 * * 0 apt autoremove -y && apt autoclean -y
カーネル管理のベストプラクティス
安全で効率的なカーネル管理のためのポイントです。
1. 削除前に必ずバックアップ
重要なシステムでは、カーネルを削除する前に:
- システム全体のバックアップを取る
- 最低でも設定ファイルをバックアップ
sudo timeshift --create
Timeshiftなどのバックアップツールを使うと安心です。
2. 一度に一つずつ削除
複数のカーネルを削除する場合でも、一つ削除したら再起動して動作確認をしてから次を削除しましょう。
3. 定期的なメンテナンス
月に一度程度、以下を実行:
# 現在のカーネルを確認
uname -r
# インストール済みカーネルを確認
dpkg --list | grep linux-image
# 不要なものを削除
sudo apt autoremove
# ディスク容量を確認
df -h /boot
4. 重要なアップデート後は様子見
新しいカーネルにアップデートした後、1〜2週間は古いカーネルを残しておきましょう。
新しいカーネルで問題が出ないことを確認してから、古いものを削除するのが安全です。
5. ドキュメントを残す
どのカーネルを削除したか、記録を残しておくと後で役立ちます:
# 削除前に記録
dpkg --list | grep linux-image > kernel-list-before.txt
# 削除後に記録
dpkg --list | grep linux-image > kernel-list-after.txt
まとめ:古いカーネルは定期的に整理しよう
Linuxの古いカーネルは、システムの安全性を保つために残されていますが、溜まりすぎるとディスク容量を圧迫します。
この記事のポイント:
- カーネルは更新のたびに増え続ける
- 一つのカーネルで200〜400MBのスペースを消費
/boot
パーティションの容量不足に注意- 現在使用中のカーネルは絶対に削除しない
- 最低でも2〜3個のカーネルを残す
安全な削除の基本手順:
# 1. 現在のカーネルを確認
uname -r
# 2. インストール済みカーネルを確認
dpkg --list | grep linux-image
# 3. 自動削除(最も安全)
sudo apt autoremove
# 4. GRUBを更新
sudo update-grub
# 5. 容量を確認
df -h /boot
削除の目安:
- デスクトップ:3個のカーネルを保持
- サーバー:5個のカーネルを保持
- 月に一度程度の定期メンテナンスを推奨
古いカーネルの削除は、正しく行えば非常に安全で効果的なディスク容量節約方法です。
特に /boot
パーティションが小さい環境では、定期的なメンテナンスが重要になります。
この記事で紹介した方法を参考に、あなたのLinuxシステムを快適に保ちましょう!
コメント