Edited at

CentOS/RHELで古いカーネルを削除して/bootを整理する方法

More than 3 years have passed since last update.


はじめに

カーネルを更新し続けると、どんどん/boot領域に蓄積されて行き、ついには残り容量がなくなって更新さえできなくなってしまうことがあります。不要なカーネル情報は削除したいのですが、気をつけなければいけないのは、/etc/grub.confなどのようにカーネル情報を参照しているファイルが存在することです。よってこのあたりまで含めて綺麗にクリーンアップしてくれるツールがあると良いですね。


解決方法

yum-utilsパッケージのpackage-cleanupコマンドを利用します。例えば、下記の例だと


  • --oldkernelsを指定することで、古いkernel/kernel-develを削除すします。

  • --count=2にすることで、2世代残します。


実行例

# df -m /boot

Filesystem 1M-blocks Used Available Use% Mounted on
/dev/xvda1 248 137 99 59% /boot

# yum install -y yum-utils
(途中略)

# package-cleanup --oldkernels --count=2
(途中略)
Is this ok [y/N]: y
(途中略)

# ls -l /boot
total 51779
-rw-r--r-- 1 root root 106313 Mar 11 17:31 config-2.6.32-504.12.2.el6.x86_64
-rw-r--r-- 1 root root 106313 Apr 22 02:16 config-2.6.32-504.16.2.el6.x86_64
drwxr-xr-x. 3 root root 1024 Dec 2 09:13 efi
drwxr-xr-x. 2 root root 1024 May 27 04:27 grub
-rw------- 1 root root 19389459 Mar 21 13:27 initramfs-2.6.32-504.12.2.el6.x86_64.img
-rw------- 1 root root 19386450 May 13 00:37 initramfs-2.6.32-504.16.2.el6.x86_64.img
drwx------. 2 root root 12288 Dec 2 09:10 lost+found
-rw-r--r-- 1 root root 200256 Mar 11 17:32 symvers-2.6.32-504.12.2.el6.x86_64.gz
-rw-r--r-- 1 root root 200317 Apr 22 02:17 symvers-2.6.32-504.16.2.el6.x86_64.gz
-rw-r--r-- 1 root root 2545042 Mar 11 17:31 System.map-2.6.32-504.12.2.el6.x86_64
-rw-r--r-- 1 root root 2545609 Apr 22 02:16 System.map-2.6.32-504.16.2.el6.x86_64
-rwxr-xr-x 1 root root 4152720 Mar 11 17:31 vmlinuz-2.6.32-504.12.2.el6.x86_64
-rwxr-xr-x 1 root root 4151344 Apr 22 02:16 vmlinuz-2.6.32-504.16.2.el6.x86_64

# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/xvda2
# initrd /initrd-[generic-]version.img
#boot=/dev/xvda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-504.16.2.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.16.2.el6.x86_64 ro root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx console=hvc0 crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us
initrd /initramfs-2.6.32-504.16.2.el6.x86_64.img
title CentOS (2.6.32-504.12.2.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.12.2.el6.x86_64 ro root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx console=hvc0 crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us
initrd /initramfs-2.6.32-504.12.2.el6.x86_64.img

# df -m /boot
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/xvda1 248 62 175 26% /boot



補足

/etc/yum.confにinstallonly_limitとうパラメーターを設定しておくと、自動的に世代管理されるようです。SoftLayerのCentOS6では、下記のように設定されていたので、これを2とか3ぐらいに設定しておくと/bootがあふれる可能性は少なくなるのではないでしょうか。


世代管理

# cat /etc/yum.conf | grep install

installonly_limit=5