はじめに (対象読者・この記事でわかること)
本記事は、RHEL6 の運用・保守を担当しているシステム管理者や、Red Hat 系 Linux のカーネル管理に不慣れなエンジニアを対象としています。
実務で「古いカーネルを削除しようとすると Error: Transaction test error」などのエラーが出て作業が止まってしまうケースに遭遇したことがある方は必見です。
この記事を読むことで、以下ができるようになります。
- エラーの根本原因(依存関係や
kernelパッケージのロック状態)を正確に把握できる yumやrpmコマンドを用いた安全なカーネル削除手順をステップバイステップで実践できる- 失敗した場合のトラブルシューティング手順と、再度削除を試みる際のベストプラクティスが身につく
前提知識
- 基本的な Linux コマンド操作(
ls,grep,awkなど) yum/rpmの基本的な使い方とリポジトリ概念- RHEL6 のカーネルバージョン管理(
/boot配下のファイル構成)
背景とエラーの概要
RHEL6 では、カーネルパッケージは kernel として単一の名前空間に登録され、インストール毎に新しいバージョンが追加されます。
デフォルト設定では、古いカーネルも自動的に残り続け、起動時の選択肢として利用可能です。サーバーのディスク容量が限られる環境や、セキュリティ要件で不要なカーネルを削除したいケースが頻繁に発生します。
しかし、単純に yum remove kernel-<古いバージョン> と実行すると、次のようなエラーが出ることがあります。
Error: Problem: package kernel-2.6.32-696.el6.x86_64 is needed by ...
Transaction test error: cannot install kernel-2.6.32-754.el6.x86_64
主な原因は次の三点です。
-
依存関係のロック
kernelパッケージはkernel-firmwareやkmod系のパッケージと密接に連携しています。古いカーネルがまだ他パッケージから参照されていると、削除が阻止されます。 -
現在実行中のカーネル
実行中のカーネルと同一バージョンを削除しようとすると、システムは安全性の観点からエラーを返します。uname -rで確認した上で、別バージョンを対象にする必要があります。 -
yum のトランザクションキャッシュ
yumはトランザクション情報をキャッシュし、前回の失敗や中途半端な状態が残っていると、同様のエラーが再現されます。
このエラーは、単に「古いカーネルを消す」だけでは解決できないため、依存関係の整理とトランザクションのクリアが必須です。
古いカーネルを安全に削除する手順
以下では、RHEL6 で 安全かつ確実に 古いカーネルを削除するための具体的なフローを示します。各ステップは実務で頻繁に使用するコマンドを中心に解説し、トラブルが発生した際の対処法も併記しています。
ステップ 0:現在のカーネルとインストール済みカーネル一覧の確認
まずは現在起動しているカーネルと、システムに残っているすべてのカーネルバージョンを把握します。
Bash# 起動中のカーネルバージョン uname -r # インストール済みカーネルの一覧 (rpm データベースから抽出) rpm -qa | grep ^kernel- | sort -V
例:
3.10.0-957.el7.x86_64 ← 現在実行中(例として RHEL7 のケースも混在)
2.6.32-696.el6.x86_64
2.6.32-754.el6.x86_64
2.6.32-862.el6.x86_64
ポイント
- uname -r と一致するものは絶対に削除しない。
- rpm -qa の出力は sort -V でバージョン順に整列させ、削除対象を視覚的に判断しやすくします。
ステップ 1:削除対象カーネルの決定
運用方針に合わせて「最新 2 つは残す」や「ディスク容量が足りないので 3 つ以上削除」などの基準を決めます。ここでは「最新 2 バージョンを残し、それ以外を削除」する例を示します。
Bash# 保持したいカーネル数 KEEP=2 # 削除対象を抽出(最新 KEEP 個以外) OLD_KERNELS=$(rpm -qa | grep ^kernel- | sort -V | head -n -$KEEP) echo "$OLD_KERNELS"
このコマンドは、KEEP で指定した数だけ最新カーネルを残し、残りを OLD_KERNELS 変数に格納します。
ステップ 2:依存関係の確認とロック解除
削除対象が他パッケージに依存されていないかを確認します。yum deplist と rpm -q --whatrequires を併用します。
Bashfor k in $OLD_KERNELS; do echo "=== $k の依存関係 ===" yum deplist $k | grep provider: rpm -q --whatrequires $k echo "" done
- 依存が見つかった場合
- その依存パッケージ自体が古いカーネルに限定されている場合は、同時に削除対象に含める。
- 依存が現在のシステムに必要なパッケージであれば、
yum installで別バージョンに切り替えるか、--skip-brokenを使って強制削除は避ける。
ロック解除(必要に応じて)
yum がトランザクションロックを保持している場合は、以下でロックファイルを削除します。
Bash# ロックファイルを削除(慎重に実行) rm -f /var/run/yum.pid
ステップ 3:yum のキャッシュクリアとメタデータ更新
古いキャッシュが残っていると、誤った依存情報が残ることがあります。必ずキャッシュをクリアしましょう。
Bashyum clean all yum makecache
ステップ 4:実際にカーネルを削除
yum remove で対象カーネルを削除します。複数のカーネルがある場合は、変数展開で一括削除が可能です。
Bash# 例: $OLD_KERNELS に格納されたすべての古いカーネルを削除 if [ -n "$OLD_KERNELS" ]; then yum -y remove $OLD_KERNELS else echo "削除対象の古いカーネルはありません" fi
注意点
-yオプションは自動承認ですが、削除前に一覧を確認したい場合は省略し、yum removeのプロンプトでyを手動で入力してください。yumが依存関係エラーで止まったら、ステップ 2 に戻り、依存パッケージを調査・対処します。
ステップ 5:削除後の確認
削除が完了したら、再度カーネル一覧を取得し、想定通りに残っているかを確認します。
Bashrpm -qa | grep ^kernel- | sort -V
また、/boot ディレクトリに残っている vmlinuz と initramfs ファイルも手動で確認し、不要ファイルが残っていないかチェックします。
Bashls -l /boot | grep -E 'vmlinuz|initramfs'
ハマった点やエラー解決
| 発生したエラー | 原因 | 解決策 |
|---|---|---|
Transaction test error |
削除対象が他パッケージの依存対象になっていた | yum deplist で依存関係を洗い出し、必要なら同時に削除、または yum remove --skip-broken を使用 |
Kernel version is currently running |
実行中のカーネルを誤って対象にしていた | uname -r で実行中カーネルを確認し、対象から除外 |
yum lock file exists |
前回の yum 処理が途中で止まった | /var/run/yum.pid を手動で削除し、yum clean all でロック解除 |
rpm -e が失敗する |
依存パッケージが残っている | rpm -e --nodeps は推奨しないが、どうしても削除する必要がある場合は --nodeps オプションを使用し、削除後に依存関係の再インストールを行う |
ベストプラクティスまとめ
- 常に実行中カーネルを除外
- 依存関係は必ず確認(
yum deplist、rpm -q --whatrequires) - キャッシュは定期的にクリア(
yum clean all) - 削除前に対象一覧を出力し、目視で最終確認
- 自動化スクリプトは
set -eとログ出力を入れ、失敗時に即座にロールバック
まとめ
本記事では、RHEL6 における古いカーネル削除時に頻出する依存関係エラーやロックエラーの原因を解説し、yum と rpm を組み合わせた安全な削除手順をステップバイステップで示しました。
- エラーの根本は依存関係と実行中カーネルのロック
- 削除前に依存パッケージを洗い出し、キャッシュをクリアすることが必須
- 具体的なコマンド例とトラブルシューティングを踏まえて、実務ですぐに適用可能
この手順を実践すれば、ディスク容量確保やセキュリティポリシー遵守のために不要なカーネルを安全に排除でき、今後のシステム運用がさらにスムーズになります。
参考資料
- Red Hat Enterprise Linux 6 カーネル管理ガイド(公式)
- yum コマンドマニュアル – Red Hat Customer Portal
- Linux カーネルの削除と依存関係の考え方 – 井上雅之著 (技術評論社)
- rpm コマンドリファレンス – Fedora Docs
