「設定 - レガシーカーネル」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

ページの作成:「== 概要 == 一般的に、カーネルをアップデートしても古いカーネルは削除せず、<br> 新バージョンとともに旧バージョンのカー…」
 
 
(2人の利用者による、間の8版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
一般的に、カーネルをアップデートしても古いカーネルは削除せず、<br>
一般的に、カーネルをアップデートしても古いカーネルは削除せず、新バージョンとともに旧バージョンのカーネルもGRUBから起動できるようにすることが多い。<br>
新バージョンとともに旧バージョンのカーネルもGRUBから起動できるようにすることが多い。<br>
<br>
新バージョンがうまく動かない場合を考えると安心できるシステムだが、カーネルのアップデートが比較的短い間隔で行われるディストリビューションでは、<br>
新バージョンがうまく動かない場合を考えると安心できるシステムだが、カーネルのアップデートが比較的短い間隔で行われるディストリビューションでは、<br>
ディスクスペースが圧迫されてしまうしGRUBのメニューも煩雑になる。<br>
ディスクスペースが圧迫されることやGRUBのメニューも煩雑になる。<br>
<br><br>
<br><br>


== 古いカーネルを削除する ==
== 古いカーネルを削除する ==
CentOSでは、yum-utilsというパッケージが用意されており、その中のpackage-cleanupコマンドを実行すれば、古いカーネルを簡単に削除できる。<br>
各ディストリビューションで設定方法が異なるため、変更前にバックアップを取ることを推奨する。<br>
まず、以下のコマンドを入力し、yum-utilsをインストールする。<br>
<br>
  sudo yum install yum-utils
==== RHEL ====
* 設定ファイル
*: /etc/yum.conf
*: または
*: /etc/dnf/dnf.conf
<br>
* installonly_limit パラメータで保持するカーネル数を指定する。
* デフォルトは3である。
* 最小値は2 (値1は明示的に禁止されている)
* 0に設定すると制限なし (非推奨)
* 特定のカーネルを除外したい場合は、同ファイルに <code>exclude=</code> または <code>excludepkgs=</code> を使用できる。
<br>
# /etc/yum.conf または /etc/dnf/dnf.conf
installonly_limit=3
<br>
また、RHELではdnf-utilsパッケージが存在しており、その中のpackage-cleanupコマンドを実行すれば、古いカーネルを簡単に削除できる。<br>
まず、dnf-utilsをインストールする。<br>
  sudo dnf install dnf-utils
<br>
<br>
yum-utilsのインストールが完了したら、--oldkernelsオプションを付けてpackage-cleanupコマンドを実行する。<br>
<code>--oldkernels</code>オプションを付加して、<code>package-cleanup</code>コマンドを実行する。<br>
  sudo package-cleanup --oldkernels
  sudo package-cleanup --oldkernels
<br>
<br>
初期設定では、最新カーネルと1世代前のカーネルを残し、それよりも古いカーネル(kernelとkernel-devel)が削除される。<br>
標準では、最新のカーネルと1世代前のカーネルを残して、2世代前以前のカーネル(kernelとkernel-devel)が削除される。<br>
もっと古いカーネルも残したい場合は、”package-cleanup”コマンド実行時に、”--count=残すカーネル数”を追加する。<br>
さらに古いカーネルも残す場合は、<code>package-cleanup</code>コマンドに、<code>--count=<残すカーネル数></code>オプションを付加する。<br>
例えば、最新版および2世代前のカーネルまで残すなら、以下のようにする。<br>
<br>
“sudo package-cleanup --oldkernels --count=3”
以下の例では、最新のカーネルから2世代前のカーネルを残している。<br>
sudo package-cleanup --oldkernels --count=3
<br>
===== SUSE =====
SUSEでは、古いカーネルは、SUSEが新しいカーネルで正常に再起動した後にのみ削除される。<br>
<br>
まず、複数のカーネルのマルチバージョンサポートが有効になっているか確認する。(初期設定では有効になっている)<br>
/etc/zypp/zypp.confファイルを開いて、multiversion項目に記述されている設定を確認する。<br>
マルチバージョンが有効になっている場合、次の行はコメント化されていない。<br>
multiversion = provides:multiversion(kernel)
<br>
また、マルチバージョンサポートを特定のカーネルに制限するには、multiversion項目にパッケージ名をカンマ区切りのリストとして追加する。<br>
multiversion = kernel-default,kernel-default-base,kernel-source
<br>
次に、古いカーネルを削除するには、/etc/zypp/zypp.confファイルの次の行を以下のように変更する。<br>
* 最新のカーネルと実行中のカーネルが異なる場合にのみ、それらを維持する場合
*: multiversion.kernels = latest,running
* 複数のカーネルを維持する場合(以下の例では、最新のカーネルと1つ前のカーネルを維持)
*: multiversion.kernels = latest,latest-1,running
* 複数のカーネルを維持する場合(以下の例では、最新のカーネルと2つ前のカーネルを維持)
*: multiversion.kernels = latest,latest-1,latest-2,running
<br>
上記のファイルの編集後、カーネルをクリーンアップする。<br>
sudo zypper purge-kernels
<br>
<u>※備考</u><br>
<u>TWでは、purge-kernels.serviceが動作しているため、自動的にクリーンアップを行っている。</u><br>
sudo systemctl start purge-kernels.service
<br>
==== Debian ====
* 設定ファイル
*: /etc/apt/apt.conf.d/01autoremove-kernels : 保持するカーネルのリストを含む自動生成ファイル
*: /etc/kernel/postinst.d/apt-auto-removal : カーネルインストール時に01autoremove-kernelsを生成するスクリプト
<br>
APT 2.4.5以降では、この機能が直接aptに実装され、デフォルトで2つのカーネルを保護する。<br>
カスタム設定を追加する場合は、/etc/apt/apt.conf.d/ ディレクトリに新しいファイルを作成することが可能である。<br>
<br>
また、Debianではスクリプトの編集が必要である。<br>
/etc/kernel/postinst.d/apt-auto-removal スクリプトが以下に示すものを保護する。<br>
* 現在実行中のカーネル
* インストール / 設定中のカーネル
* 最新のカーネル
* 1つの前のカーネル
<br>
* 2つだけに制限する方法
*: /etc/kernel/postinst.d/apt-auto-removal スクリプトを編集する。
*: まずバックアップを作成する。
*: <code>sudo cp /etc/kernel/postinst.d/apt-auto-removal{,.backup}</code>
*: <br>
*: スクリプト内の該当部分を編集して、保持するカーネル数を調整する。
*: スクリプトの先頭付近に以下に示す設定を追記する。
*: <syntaxhighlight lang="text">
# 保持するカーネル数 (実行中のカーネル以外)
NKER=1
</syntaxhighlight>
*: スクリプトを手動実行して設定を反映する。
*: <code>sudo /etc/kernel/postinst.d/apt-auto-removal $(uname -r)</code>
*: <br>
*: <u>※注意</u>
*: <u>スクリプトはカーネルのインストール / 削除時にのみ再実行される。</u>
<br>
また、以下に示す設定は、"カーネルを自動削除から保護" および "特定のカーネルバージョンを保護する" である。<br>
# 例:
sudo vi /etc/apt/apt.conf.d/01autoremove-kernels-override
<br>
# カーネルを自動削除から保護する場合
APT::NeverAutoRemove {
  "^linux-image-.*-generic$";
  "^linux-headers-.*-generic$";
  "^linux-image-extra-.*-generic$";
};
<br>
# 特定のカーネルバージョンを保護する場合
APT::NeverAutoRemove {
  "^linux-image-5\.15\.0-.*-generic$";
};
<br>
また、保持するカーネル数を変更する場合は、/etc/kernel/postinst.d/apt-auto-removal スクリプトを編集する必要がある。<br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]]

2025年11月6日 (木) 03:27時点における最新版

概要

一般的に、カーネルをアップデートしても古いカーネルは削除せず、新バージョンとともに旧バージョンのカーネルもGRUBから起動できるようにすることが多い。

新バージョンがうまく動かない場合を考えると安心できるシステムだが、カーネルのアップデートが比較的短い間隔で行われるディストリビューションでは、
ディスクスペースが圧迫されることやGRUBのメニューも煩雑になる。


古いカーネルを削除する

各ディストリビューションで設定方法が異なるため、変更前にバックアップを取ることを推奨する。

RHEL

  • 設定ファイル
    /etc/yum.conf
    または
    /etc/dnf/dnf.conf


  • installonly_limit パラメータで保持するカーネル数を指定する。
  • デフォルトは3である。
  • 最小値は2 (値1は明示的に禁止されている)
  • 0に設定すると制限なし (非推奨)
  • 特定のカーネルを除外したい場合は、同ファイルに exclude= または excludepkgs= を使用できる。


# /etc/yum.conf または /etc/dnf/dnf.conf

installonly_limit=3


また、RHELではdnf-utilsパッケージが存在しており、その中のpackage-cleanupコマンドを実行すれば、古いカーネルを簡単に削除できる。
まず、dnf-utilsをインストールする。

sudo dnf install dnf-utils


--oldkernelsオプションを付加して、package-cleanupコマンドを実行する。

sudo package-cleanup --oldkernels


標準では、最新のカーネルと1世代前のカーネルを残して、2世代前以前のカーネル(kernelとkernel-devel)が削除される。
さらに古いカーネルも残す場合は、package-cleanupコマンドに、--count=<残すカーネル数>オプションを付加する。

以下の例では、最新のカーネルから2世代前のカーネルを残している。

sudo package-cleanup --oldkernels --count=3


SUSE

SUSEでは、古いカーネルは、SUSEが新しいカーネルで正常に再起動した後にのみ削除される。

まず、複数のカーネルのマルチバージョンサポートが有効になっているか確認する。(初期設定では有効になっている)
/etc/zypp/zypp.confファイルを開いて、multiversion項目に記述されている設定を確認する。
マルチバージョンが有効になっている場合、次の行はコメント化されていない。

multiversion = provides:multiversion(kernel)


また、マルチバージョンサポートを特定のカーネルに制限するには、multiversion項目にパッケージ名をカンマ区切りのリストとして追加する。

multiversion = kernel-default,kernel-default-base,kernel-source


次に、古いカーネルを削除するには、/etc/zypp/zypp.confファイルの次の行を以下のように変更する。

  • 最新のカーネルと実行中のカーネルが異なる場合にのみ、それらを維持する場合
    multiversion.kernels = latest,running
  • 複数のカーネルを維持する場合(以下の例では、最新のカーネルと1つ前のカーネルを維持)
    multiversion.kernels = latest,latest-1,running
  • 複数のカーネルを維持する場合(以下の例では、最新のカーネルと2つ前のカーネルを維持)
    multiversion.kernels = latest,latest-1,latest-2,running


上記のファイルの編集後、カーネルをクリーンアップする。

sudo zypper purge-kernels


※備考
TWでは、purge-kernels.serviceが動作しているため、自動的にクリーンアップを行っている。

sudo systemctl start purge-kernels.service


Debian

  • 設定ファイル
    /etc/apt/apt.conf.d/01autoremove-kernels : 保持するカーネルのリストを含む自動生成ファイル
    /etc/kernel/postinst.d/apt-auto-removal : カーネルインストール時に01autoremove-kernelsを生成するスクリプト


APT 2.4.5以降では、この機能が直接aptに実装され、デフォルトで2つのカーネルを保護する。
カスタム設定を追加する場合は、/etc/apt/apt.conf.d/ ディレクトリに新しいファイルを作成することが可能である。

また、Debianではスクリプトの編集が必要である。
/etc/kernel/postinst.d/apt-auto-removal スクリプトが以下に示すものを保護する。

  • 現在実行中のカーネル
  • インストール / 設定中のカーネル
  • 最新のカーネル
  • 1つの前のカーネル


  • 2つだけに制限する方法
    /etc/kernel/postinst.d/apt-auto-removal スクリプトを編集する。
    まずバックアップを作成する。
    sudo cp /etc/kernel/postinst.d/apt-auto-removal{,.backup}

    スクリプト内の該当部分を編集して、保持するカーネル数を調整する。
    スクリプトの先頭付近に以下に示す設定を追記する。
     # 保持するカーネル数 (実行中のカーネル以外)
     
     NKER=1
    
    スクリプトを手動実行して設定を反映する。
    sudo /etc/kernel/postinst.d/apt-auto-removal $(uname -r)

    ※注意
    スクリプトはカーネルのインストール / 削除時にのみ再実行される。


また、以下に示す設定は、"カーネルを自動削除から保護" および "特定のカーネルバージョンを保護する" である。

# 例:
sudo vi /etc/apt/apt.conf.d/01autoremove-kernels-override


# カーネルを自動削除から保護する場合

APT::NeverAutoRemove {
  "^linux-image-.*-generic$";
  "^linux-headers-.*-generic$";
  "^linux-image-extra-.*-generic$";
};


# 特定のカーネルバージョンを保護する場合

APT::NeverAutoRemove {
  "^linux-image-5\.15\.0-.*-generic$";
};


また、保持するカーネル数を変更する場合は、/etc/kernel/postinst.d/apt-auto-removal スクリプトを編集する必要がある。