この記事には改訂版あり
shobon.hatenablog.com
以上、2022/5/4 追記。
長いので結論を先に。
# dnf remove --oldinstallonly (最新の世代だけ残す) または # dnf remove $(dnf repoquery --installonly --latest-limit=-2) (最新の2世代だけ残す)
なぜ上記のようになるかは、以下の通り。
CentOS 7 までは、
# package-cleanup --oldkernels --count=2
などとして古いカーネルを削除できた。
CentOS 8で同じようにやっても、package-cleanup の引数に --oldkernels が無いエラーとなる。
# package-cleanup --oldkernels --count=2 package-cleanup has to be executed with one of the options: --dupes, --leaves, --orphans, --problems or --cleandupes
CentOS 8では、dnfコマンドのオプションで古いカーネルを削除できる。
dnfコマンドでは、パッケージを検索する repoquery オプションとともに、検索オプションを指定できる。
これを使って、インストール済みカーネルのリストを確認する。
# dnf repoquery --installonly kernel-0:4.18.0-147.3.1.el8_1.x86_64 kernel-0:4.18.0-147.5.1.el8_1.x86_64 kernel-0:4.18.0-193.6.3.el8_2.x86_64 kernel-core-0:4.18.0-147.3.1.el8_1.x86_64 kernel-core-0:4.18.0-147.5.1.el8_1.x86_64 kernel-core-0:4.18.0-193.6.3.el8_2.x86_64 kernel-modules-0:4.18.0-147.3.1.el8_1.x86_64 kernel-modules-0:4.18.0-147.5.1.el8_1.x86_64 kernel-modules-0:4.18.0-193.6.3.el8_2.x86_64
以下のようにすると、最新の世代だけを残して、古いカーネルを削除できる。
# dnf remove --oldinstallonly
ある世代数を残したければ、repoquery と併せて、--latest-limit オプションを指定する事で、古い世代を取得する事もできる。
書式としては、--latest-limit=世代 のように指定する。
# dnf repoquery --installonly kernel-0:4.18.0-147.3.1.el8_1.x86_64 kernel-0:4.18.0-147.5.1.el8_1.x86_64 kernel-0:4.18.0-193.6.3.el8_2.x86_64 kernel-core-0:4.18.0-147.3.1.el8_1.x86_64 kernel-core-0:4.18.0-147.5.1.el8_1.x86_64 kernel-core-0:4.18.0-193.6.3.el8_2.x86_64 kernel-modules-0:4.18.0-147.3.1.el8_1.x86_64 kernel-modules-0:4.18.0-147.5.1.el8_1.x86_64 kernel-modules-0:4.18.0-193.6.3.el8_2.x86_64 # dnf repoquery --installonly --latest-limit=1 kernel-0:4.18.0-193.6.3.el8_2.x86_64 kernel-core-0:4.18.0-193.6.3.el8_2.x86_64 kernel-modules-0:4.18.0-193.6.3.el8_2.x86_64 →最新の世代 # dnf repoquery --installonly --latest-limit=2 kernel-0:4.18.0-147.5.1.el8_1.x86_64 kernel-0:4.18.0-193.6.3.el8_2.x86_64 kernel-core-0:4.18.0-147.5.1.el8_1.x86_64 kernel-core-0:4.18.0-193.6.3.el8_2.x86_64 kernel-modules-0:4.18.0-147.5.1.el8_1.x86_64 kernel-modules-0:4.18.0-193.6.3.el8_2.x86_64 →最新から2世代 # dnf repoquery --installonly --latest-limit=-1 kernel-0:4.18.0-147.3.1.el8_1.x86_64 kernel-0:4.18.0-147.5.1.el8_1.x86_64 kernel-core-0:4.18.0-147.3.1.el8_1.x86_64 kernel-core-0:4.18.0-147.5.1.el8_1.x86_64 kernel-modules-0:4.18.0-147.3.1.el8_1.x86_64 kernel-modules-0:4.18.0-147.5.1.el8_1.x86_64 →最新以外の世代 # dnf repoquery --installonly --latest-limit=-2 kernel-0:4.18.0-147.3.1.el8_1.x86_64 kernel-core-0:4.18.0-147.3.1.el8_1.x86_64 kernel-modules-0:4.18.0-147.3.1.el8_1.x86_64 →最新から2世代以外
これを利用して、冒頭の記載のようにすると、最新から2世代以外を削除できる。