以前、CentOS6サーバの/bootの空き容量不足が原因でkernelのyumアップデートが正常に完了できなくなりました。保存されている古いkernelを削除することで一旦は解決しましたが、先日症状が再発してしまいました。今度は暫定対処と根本解決を行います。
1.症状の確認
ことの発端は「Anacron job ‘cron.daily’ on servername」のメールが朝に届くようになったこと。メールの内容は「/bootの空き容量が6MB足りず、yumのカーネルインストールに失敗している」とのこと。
/etc/cron.daily/0yum.cron: Error: Transaction Check Error: installing package kernel-2.6.32-573.12.1.el6.i686 needs 6MB on the /boot filesystem Error Summary ------------- Disk Requirements: At least 6MB more space needed on the /boot filesystem.
2.原因と対策
この症状の原因は主に3つ。
1つめは/boot領域の容量が小さいこと。このサーバは/bootに190MB割り当てていますが、riscascape.netで使っているお名前.comVPSサーバは約480MBですので本当はこれくらいの余裕が必要なのだと思います。対策は/bootのサイズ拡張。
2つめはkernelの保存数が5世代分もあること。前回が暫定対処として3世代分に減らしましたが何も困ったことはありませんでした。ということはyumの設定を変更して保存世代数を5から減らせば再発は防げるはず。
3つめはLinuxkernelそのものが肥大化していること。ただしkernelのアップデート内容はセキュリティ修正など最低限必要なものしか行われていないはずですし、現在のセキュリティ性を維持するにはyumのkernelアップデートを止めるわけにもいかないので、対策はなさそう。
ということで、今回は難しいことをしなくてもできる対策「yumのkernel保存数変更」を試します。
3.暫定対処
まずは現在の/boot使用状況を確認。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_server-LogVol01 455G 5.7G 426G 2% / tmpfs 1.4G 0 1.4G 0% /dev/shm /dev/md0 190M 157M 33M 82% /boot
次に暫定対処としてkernel2つを残して古いカーネルを削除します。
# package-cleanup --oldkernels --count=2 読み込んだプラグイン:fastestmirror, priorities --> トランザクションの確認を実行しています。 ---> Package kernel.i686 0:2.6.32-504.30.3.el6 will be 削除 ---> Package kernel.i686 0:2.6.32-573.1.1.el6 will be 削除 ---> Package kernel.i686 0:2.6.32-573.3.1.el6 will be 削除 --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ パッケージ アーキテクチャ バージョン リポジトリー 容量 ================================================================================ 削除: kernel i686 2.6.32-504.30.3.el6 @updates 91 M kernel i686 2.6.32-573.1.1.el6 @updates 92 M kernel i686 2.6.32-573.3.1.el6 @updates 92 M トランザクションの要約 ================================================================================ 削除 3 パッケージ インストール済み容量: 275 M これでいいですか? [y/N]y パッケージをダウンロードしています: rpm_check_debug を実行しています トランザクションのテストを実行しています トランザクションのテストを成功しました トランザクションを実行しています 削除中 : kernel.i686 1/3 削除中 : kernel.i686 2/3 削除中 : kernel-2.6.32-573.3.1.el6.i686 3/3 Verifying : kernel-2.6.32-573.1.1.el6.i686 1/3 Verifying : kernel-2.6.32-504.30.3.el6.i686 2/3 Verifying : kernel-2.6.32-573.3.1.el6.i686 3/3 削除しました: kernel.i686 0:2.6.32-504.30.3.el6 kernel.i686 0:2.6.32-573.1.1.el6 kernel.i686 0:2.6.32-573.3.1.el6 完了しました!
削除が完了したので空き容量を確認。33MBが115MBに増えてます。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_server-LogVol01 455G 5.7G 426G 2% / tmpfs 1.4G 0 1.4G 0% /dev/shm /dev/md0 190M 66M 115M 37% /boot
これで足りなかった6MB以上空き容量を確保できたので、yumの処理が完了するかyum-complete-transactionで確かめます。
yum-complete-transaction 読み込んだプラグイン:fastestmirror, priorities Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * rpmforge: ftp.riken.jp * updates: www.ftp.ne.jp base | 3.7 kB 00:00 epel | 4.3 kB 00:00 extras | 3.4 kB 00:00 rpmforge | 1.9 kB 00:00 updates | 3.4 kB 00:00 132 packages excluded due to repository priority protections No unfinished transactions left.
エラーなくいけますね。ひとまず暫定対処は完了です。
4.根本解決
kernelの保存数を5から3に減らすことにします。YUMの設定ファイルであるyum.confファイルを確認してみるとそれっぽい設定がありました。
# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 省略・・・
installonly_limitで調べてみるとRedhatのナレッジ6.3. Yum と Yum リポジトリの設定に詳しい解説がありました。
installonly_limit=value value は、installonlypkgs 指示文に表示されている単一のパッケージに同時にインストール可能なバージョンの最大数を表す整数です。 installonlypkgs 指示文のデフォルトには複数の様々なカーネルパッケージが含まれているため、installonly_limit の値を変更すると、単一のカーネルパッケージのインストール済みバージョンの最大数にも影響が及ぶ点に注意して下さい。/etc/yum.conf に表示されているデフォルト値は、installonly_limit=3 です。また、この値を低く、特に 2 より下に設定することは推奨されません。
CentOS6は5がデフォルトのようですがRHELは3のようです。2より下に設定することは推奨されませんとのことなので3に変更してみます。
# vi /etc/yum.conf installonly_limit=5 → installonly_limit=3
YUMはサービス常駐型ではないので再起動などは不要です。あとは効果を確認したいところですが、すぐに確認できるものではないので暫くしてから追記しようと思います。