/bootが独立したパーティーションに割り当てられているコンピューターで、apt-getコマンドでアップグレードしようとして
$ sudo apt-get upgrade
としたときに、/bootの容量がいっぱいでアップグレードできないときの対処方法。これは/boot内の不要なファイルを削除すればよい。特におかしなことをしなければ/bootには基本的にカーネルに関するファイルにしか置かれておらず、2~3種類のカーネルを置いても通常は100MBもならない。
以下は、とあるサーバーでの実際の手順例。まず、/boot内の容量の確認をする。
$ df /boot
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 240972 218396 10135 96% /boot
容量を96%も使っており空き容量(Available)が10MB程度では心許なく、この状態ではapt-getでアップグレードができない可能性が高い。稀に古いカーネルが消されずに残っていることがある。この場合、使用していない古いカーネルを削除する必要がある。
まず、現在使用中のカーネルのバージョンを確認する。
現在のカーネルのバージョンは3.13.0-35が使われていることがわかる。では、サーバーにインストールされているカーネルの一覧を表示してみる。
$ dpkg --get-selections | grep linux-image
linux-image-3.13.0-24-generic install
linux-image-3.13.0-27-generic deinstall
linux-image-3.13.0-29-generic install
linux-image-3.13.0-30-generic install
linux-image-3.13.0-32-generic install
linux-image-3.13.0-33-generic install
linux-image-3.13.0-34-generic install
linux-image-3.13.0-35-generic install
linux-image-extra-3.13.0-24-generic install
linux-image-extra-3.13.0-27-generic deinstall
linux-image-extra-3.13.0-29-generic install
linux-image-extra-3.13.0-30-generic install
linux-image-extra-3.13.0-32-generic install
linux-image-extra-3.13.0-33-generic install
linux-image-extra-3.13.0-34-generic install
linux-image-extra-3.13.0-35-generic install
linux-image-generic install
過去にカーネルが8つインストールされた履歴を確認でき、そのうちの1つしかアンインストール(deinstall)されておらず、これらのファイルが/bootに残ってしまっていることがわかる。
通常、カーネルは2つ(現在起動をしているものと、念のため1つ前のもの)あれば十分で、古いものを残す理由はない。1つ前のものを念のため残すとして、上の例では、3.13.0-24~33は消しても全く問題無い。そこで消す。以下は3.13.0-24を消す例。
$ sudo apt-get remove linux-image-3.13.0-24-generic
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
linux-image-3.13.0-24-generic linux-image-extra-3.13.0-24-generic
(以下表示省略)
このように、1つずつ消す。今の例では24~33を削除した。結果がこれ。
$ dpkg --get-selections | grep linux-image
linux-image-3.13.0-24-generic deinstall
linux-image-3.13.0-27-generic deinstall
linux-image-3.13.0-29-generic deinstall
linux-image-3.13.0-30-generic deinstall
linux-image-3.13.0-32-generic deinstall
linux-image-3.13.0-33-generic deinstall
linux-image-3.13.0-34-generic install
linux-image-3.13.0-35-generic install
linux-image-extra-3.13.0-24-generic deinstall
linux-image-extra-3.13.0-27-generic deinstall
linux-image-extra-3.13.0-29-generic deinstall
linux-image-extra-3.13.0-30-generic deinstall
linux-image-extra-3.13.0-32-generic deinstall
linux-image-extra-3.13.0-33-generic deinstall
linux-image-extra-3.13.0-34-generic install
linux-image-extra-3.13.0-35-generic install
linux-image-generic install
最後に、念のために不要なファイルを削除しておく。
$ sudo apt-get autoremove
最後に/bootの空き容量を確認する。なお、表示は上の例と違ってMB単位にしている。
$ df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 236M 68M 156M 31% /boot
/bootは通常100MB使えればよい。これでapt-getコマンドで問題なくアップグレードできるようになる。
なお、10年前ならいざ知らず、現在のLinuxで/bootのみ単独のパーティーションに割り振る必要は無いが、Linuxによっては、パーティーションの設定を自動にしてインストールすると、自動的に先頭パーティーションに数百MB程度の/boot用のパーティーションが作成されることがある。このような場合は仕方がないので、このまま運用することになる。
/bootディレクトリは15年ほど前(Debianの2.0、Redhatの7.3頃)は、先頭のパーティーションに数百MB程度確保すると運用が楽と言われていた。現在、その必要性はほとんど無いが、このディレクトリの使用容量はさほど変わっておらず、今回の例のように自動で数百MBのパーティーションに割り当てられてしまったとしても、運用上まったく問題ない。また、向こう10年はこれでも問題ないはず。