Debianで古いkernelが溜まってしまった場合の対処

Debianでサーバーを運用していて生真面目にアップデートを当てていると、だいたいいつの間にか古いkernelが溜まってしまうことになる。Debian的お作法でいくとだいたい/bootパーティションは別に分けるので、あまりにもたくさんのkernelが溜まるにまかせるといつの間にか/bootパーティションが古いkernelでパンクして新しい更新されたkernelのインストールに失敗するなんてことになる。とはいえ、新しいkernelに問題があった場合に備えて古いkernelを少しは残しておきたいし、いちいち新しいkernelが降ってくるたびにインストールされたlinux-imageパッケージの一覧を取得してどのkernelを残すか考え、手動でpurgeする作業をしていたが、さすがに面倒になってきた今日この頃。そこで、とうとうbyobuスクリプトをインストールすることにした。byobuは本来はターミナルマルチプレクサをtmux上に実現するスクリプトだが、同梱されているスクリプトの中になぜかkernelを整理するスクリプトが存在する。tmuxを普段使わない身としてはそのスクリプトだけ別にパッケージ化してもらいたいものだが、そうもいかないのであきらめてbyobuと依存するtmux等も一緒にインストールする。インストールはDebianでも一発だ。

sudo apt install byobu

これで依存するtmuxやらなんやらと一緒にインストールされる。

さて、実際に古いカーネルをpurgeする場合は新しい順にいくつのkernelを残した状態にするかを指定してpurge-old-kernelsを実行する。例えば、今bootしている最新のkernelに加えて、一個前の古いkernelを安全のために残したい場合は、2個のkernelを残すということで以下のように実行する。

sudo purge-old-kernels –keep 2

あとはpurgeすべきkernelがあった場合は削除処理をしてくれるので、対話的に実行すればよい。このスクリプトは–keepオプション以外のオプションを単純にaptに渡すだけのwrapperなので、対話的にしたくなければaptですべての質問にyesと答える-qyオプションをつければいいだろう。

あとは、/bootが足りなくなってるなと思ったときにこれを実行するだけだが、毎日のサーバーのリポートメールでついついパーティションごとの空き容量をチェックするのを忘れちゃうんだよね。