はじめに (対象読者・この記事でわかること)

本記事は、RHEL6 の運用・保守を担当しているシステム管理者や、Red Hat 系 Linux のカーネル管理に不慣れなエンジニアを対象としています。
実務で「古いカーネルを削除しようとすると Error: Transaction test error」などのエラーが出て作業が止まってしまうケースに遭遇したことがある方は必見です。
この記事を読むことで、以下ができるようになります。

  • エラーの根本原因(依存関係や kernel パッケージのロック状態)を正確に把握できる
  • yumrpm コマンドを用いた安全なカーネル削除手順をステップバイステップで実践できる
  • 失敗した場合のトラブルシューティング手順と、再度削除を試みる際のベストプラクティスが身につく

前提知識

  • 基本的な 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

主な原因は次の三点です。

  1. 依存関係のロック
    kernel パッケージは kernel-firmwarekmod 系のパッケージと密接に連携しています。古いカーネルがまだ他パッケージから参照されていると、削除が阻止されます。

  2. 現在実行中のカーネル
    実行中のカーネルと同一バージョンを削除しようとすると、システムは安全性の観点からエラーを返します。uname -r で確認した上で、別バージョンを対象にする必要があります。

  3. 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 deplistrpm -q --whatrequires を併用します。

Bash
for 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 のキャッシュクリアとメタデータ更新

古いキャッシュが残っていると、誤った依存情報が残ることがあります。必ずキャッシュをクリアしましょう。

Bash
yum 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:削除後の確認

削除が完了したら、再度カーネル一覧を取得し、想定通りに残っているかを確認します。

Bash
rpm -qa | grep ^kernel- | sort -V

また、/boot ディレクトリに残っている vmlinuzinitramfs ファイルも手動で確認し、不要ファイルが残っていないかチェックします。

Bash
ls -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 オプションを使用し、削除後に依存関係の再インストールを行う

ベストプラクティスまとめ

  1. 常に実行中カーネルを除外
  2. 依存関係は必ず確認yum deplistrpm -q --whatrequires
  3. キャッシュは定期的にクリアyum clean all
  4. 削除前に対象一覧を出力し、目視で最終確認
  5. 自動化スクリプトは set -e とログ出力を入れ、失敗時に即座にロールバック

まとめ

本記事では、RHEL6 における古いカーネル削除時に頻出する依存関係エラーやロックエラーの原因を解説し、yumrpm を組み合わせた安全な削除手順をステップバイステップで示しました。

  • エラーの根本は依存関係と実行中カーネルのロック
  • 削除前に依存パッケージを洗い出し、キャッシュをクリアすることが必須
  • 具体的なコマンド例とトラブルシューティングを踏まえて、実務ですぐに適用可能

この手順を実践すれば、ディスク容量確保やセキュリティポリシー遵守のために不要なカーネルを安全に排除でき、今後のシステム運用がさらにスムーズになります。

参考資料