/ bootパーティションをクリーンアップする最も安全な方法は何ですか?


274

/bootパーティションに200 MBが割り当てられています。カーネルを更新しようとするたびに、基本的に/boot満杯であるというエラーメッセージが表示されます。

/boot古いカーネルをクリーンアップして削除/バックアップするにはどうすればよいですか?



/ bootがいっぱいの場合は、askubuntu.com
…を

回答:


335

コマンドライン方式:

まず、カーネルのバージョンを確認します。使用中のカーネルイメージを削除せずに実行します。

uname -r

ここで、インストールされているカーネルのリストについて次のコマンドを実行します。

dpkg --list 'linux-image*' | grep ^ii

そして、これを実行して、不要/不要になったカーネルを削除します。

sudo apt-get remove linux-image-VERSION

VERSIONを、削除するカーネルのバージョンに置き換えます。

古いカーネルの削除が完了したら、これを実行して不要になったパッケージを削除できます。

sudo apt-get autoremove

最後に、これを実行してgrubカーネルリストを更新できます。

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iiインストールされたカーネルだけを少し見やすくします。また、これupdate-grubは無害ではあるが厳密には必要ではなく、カーネルをアンインストールすると自動的に実行されると思います。
ネルソン14年

9
で使用sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""するパッケージ名のリストを取得するために使用しsudo apt-get removeます。head -n -3システムに最新の3つのカーネルを残すために使用されます。
Sithsu

2
私のシンプルなワンライナー:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb

27
sudo apt-get autoremove十分なはずです(通常、最後の3つのカーネルが残っています)
mbx

6
これは良い答えですが、ほとんどの場合(すべてではないにしても)に機能するとは思いません。問題/bootは完全であるため、apt-getエラーコードなどで失敗します。答えは以下のビット「hackier」(私はそれを発行する鋼自分自身に持っていたと告白しなければならないですrm -rf/boot)が、このような状況で作業する可能性があるだけ。
マルコ

284

注:これは、100%の/ bootが原因でaptを使用してクリーンアップできない場合のみです

/ bootが100%であるためにapt-getが機能しない場合は、最初に/ bootを削除する必要があります。これはおそらく、部分的なインストールでカーネルのアップグレードをキャッチしたため、aptが完全にフリーズしapt-get -f install、コマンドが失敗し続けても実行するように指示し続けます。

カーネルイメージのリストを取得し、なしでできることを判断します。このコマンドは、現在実行中のカーネル以外のインストール済みカーネルを表示しますsudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`。リスト内の2つの最新バージョンに注意してください。ここにリストされていないので、実行中のものを心配する必要はありません。これはで確認できuname -rます。

健全性を保つためにブレース拡張を使用して、関係のないカーネルの/ boot内のすべてのファイルを削除するコマンドを作成します。現在のカーネルイメージと最新の2つのカーネルイメージを除外することを忘れないでください。例:sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*。構文{80..84}で範囲を使用することもできます。

sudo apt-get -f install 部分的なインストールで不機嫌になっているものをクリーンアップします。

「内部エラー:イメージが見つかりませんでした(/boot/vmlinuz-3.2.0-56-generic)」などの行を含むエラーが発生した場合は、sudo apt-get purge linux-image-3.2.0-56-generic適切なバージョンでコマンドを実行します。

最後に、sudo apt-get autoremove手動ブートクリーンによって孤立した古いカーネルイメージパッケージを消去します。

完全な/ bootパーティションを検出するのを待っている間に、バックアップが実行された可能性がある場合は、提案、実行sudo apt-get update、およびsudo apt-get upgradeアップグレードの世話をします。

提案2、https: //help.ubuntu.com/community/AutomaticSecurityUpdatesを確認し、/ etc / apt / apt.conf.d / 50unattended-upgradesでUnattended-Upgrade :: Remove-Unused-Dependenciesをtrueに設定することを検討してください。これは、各セキュリティ更新プログラムの後にautoremoveを実行して未使用のカーネルを確実にクリーンアップすることと同じですが、未使用と思われる他のものも削除し、将来この問題からあなたを救います。


3
このようにして、次回の再起動で最新のものを使用し、次に何かが壊れた場合に備えて前のものを使用します。通常、私には十分なスペースがあるので、いくつか持っていても害はなく、どのシナリオでも十分なバックアップオプションがないという私の妄想を満たします。
フリッカーフライ14

1
無人アップグレードが原因で問題が発生したことはありません。これは、deb以外のパッケージ化されたインストールで依存関係が失われることを主な問題とするシナリオを想像できます。phpをインストールし、それをアンインストールしてソースから新しいバージョンをインストールするとします。このバージョンには、以前のインストールで提供された依存関係がありますが、aptはまだ必要であることを認識していません。次回自動削除を実行すると、これらの依存関係はなくなります。自動化されている場合、これは少しわかりにくいかもしれません。リポジトリの外部にインストールしない場合、完全に安全であると思います。
フリッカーフライ

3
でこれを見た後、いくつかの(カーネルが自動的にアップグレードが、その後削除されませんされていた)vSphereの仮想サーバー、私が書いたPythonスクリプトを、それを自動化します。私はそれにもっと目を向けたいです
-EvanK

2
dpkg --purge$ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
フルブートで

1
/ bootをクリーンアップした後、apt-get install -fはまだ機能しません。使用df -iして/、古いカーネルのソースコード用の膨大な量のファイルのために、iノードが不足していることを発見しました/usr/src
クリストファー

51

これに関するドキュメントはhttps://help.ubuntu.com/community/RemoveOldKernelsにあります。

要約:使用

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

purge-old-kernelsこのツールは、経由でインストールすることができますsudo apt install byobu。マンページの説明は次のとおりです。

このプログラムは、システムから古いカーネルとヘッダーパッケージを削除し、ディスク容量を解放します。現在実行中のカーネルは削除されません。デフォルトでは、少なくとも最新の2つのカーネルを保持しますが、ユーザーは--keep パラメーターを使用してその値をオーバーライドできます。

コピーアンドペーストソリューションが必要な場合、ReSearchIT Engは以下を提案しました。

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
私の場合はaptのが原因保留中のカーネルに動作していないと示唆した修正がキャッチ-22である:
ジェームズバワリー

最初にaskubuntu.com/a/304388/284313で壊れたパッケージを修正する必要がありました。その後、ソリューションが機能しました。
ジェームズバワリー

3
これは今のところ受け入れられている解決策だと思います。
フランマルゾア

3
これは、受け入れられている答えよりもはるかに安全です。apt-get autoremove --purgeでも十分だと思う。
ウッド

7

小さなパーティションを放棄/bootしてルートに移動する方がはるかに簡単であることがわかりました。これにより、将来のスペース不足の問題も防止されます。

まず、ブートパーティションからルートにデータを移動します(として実行sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

/bootエントリを削除(またはコメント)し/etc/fstabます:

vim /etc/fstab

grubを更新し、すべてが正しいことを確認します。

update-grub

apt これで問題なくアップグレードできるはずです。

これにより、未使用の200mbパーティションが残ります(トラブルに見合う場合は、他のパーティションに使用できます)。


5
これは良い考えですが、ルートパーティションのディスク全体を暗号化する場合は機能しません。
パエロエベルマン

はい、/ bootを別のパーティションにする必要がある場合があります。別の例として、Grubは以前はLVMパーティションからロードできませんでした。
バスティオン

4

古いカーネルの削除(/ bootの空き領域へ):http : //askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-bootを参照してください

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

次に実行する

sudo apt-get update

1
これが機能した唯一のものでした。...素晴らしい解決策
ジョン

ベストアンサー!これは私のために働いた唯一のソリューションです。自動削除はバカです。依存関係が満たされていないカーネルを公式に削除する前に再インストールしようとします。私は何度も何度もスペースを使い果たしていました。この答えは金です​​。
ロニーベスト

3

sudo apt-get autoremove

これにより、最後の2つを除くすべてのカーネルが削除されます。Ubuntu 16.04 LTS /bootで100%の容量でテストされ、apt-get upgrade最後のカーネルアップグレードに失敗しました。カーネルの自動削除は繰り返し実行されるため、複数のカーネルがある場合、それらは一度に1つずつ削除されます。我慢してください。


1

ツールでできるのに、なぜ手作業でやるのですか?最近、新しいカーネル更新をプッシュするのに30秒かかるため、30秒後に再び必要になることがわかっています= P

このツールを使用することをお勧めしますbootnukem

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

それから

sudo bootnukem --dry-run

--dry-run安全に見えることを確認したら削除します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.