古いカーネルバージョンを削除してブートメニューをクリーンアップするにはどうすればよいですか?

新しいLinuxカーネルをインストールするたびに、grub_configに残され、毎回ブートメニューが長くなります。

私はインストールされたパッケージを手動で検索して削除できることを知っています。

Ubuntuはそれらをきれいにしたり、ブートリストに表示されないようにする簡単な方法を提供しますか?

Ubuntuの16.04以降のバージョン

sudo apt autoremove

このコマンドは、依存関係を解決するために自動的にインストールされたが、依存しなくなったパッケージを削除します。 これには古いバージョンが含まれます linux-headers-*linux-image-*. (このプロセスについても賢明であり、カーネルの予備のバージョンをフォールバックとして残しています!)

11.10以降のバージョンのUbuntu

GRUB2とそのすべてのカーネルの表示

の最新バージョン Grub2 にインストールされている Ubuntu 最新のカーネルを自動的に表示し、インストールした古いカーネルを非表示にします。

GNU GRUB

あなたが表示されない場合は、あなたの grub -その後、押すことを忘れないでください Shift 起動中。

ご覧のとおり、最新のカーネルのみが表示されます。

表示されているオプションを選択した場合(を押します Enter)その後、すべての古いカーネルが表示され、起動できるようになります。

GNU GRUB Previous versions

古いカーネルを完全に削除する方法

利用可能な最新のカーネルで最初に起動します。

古いカーネルを削除するには、いくつかの方法があります。 個人的には、私は触れないだろう パソコン用管理人 これは、その提案を使用してコンピュータを破るために認められているので。

シナプス

別の方法は次のとおりです。 シナプス (sudo apt install synaptic)

を検索する linux-イメージ、カーネルを右クリックし、完全な除去を選択し、最後にをクリックします 適用する カーネルを削除するボタン。

検索を繰り返しますが、今回は linux-ヘッダ -以前に選択したカーネルイメージの関連するヘッダーを削除できます。

シナプス しかし、あなたが削除しようとしているものを確認しようとしません。.. 誤って最新のカーネルを削除したり、このツールを使用してすべてのカーネルを削除したりすると、起動できなくなる可能性があります Ubuntu!.

タイプを使用しているカーネルを確認することを忘れないでください:

uname -r

結果は次のようになります:

Terminal <uname -r>

結果と番号を覚えておいてください-対応する画像やヘッダーを削除しないようにしてください。

推薦

私の推奨は、最新のものを含む少なくとも2つまたはできれば3つのカーネルを維持することです。 推奨の理由は、最新のカーネルが起動できない理由や、broken wirelessなどの退行機能を導入している場合、少なくとも1つ/2つの他のカーネルを起動する必要があ

まず、システムを再起動して、最新のカーネルを使用していることを確認します。 次に、ターミナルを開き、現在のカーネルを確認します:

uname -r 

このカーネルを削除しないでください!

次に、以下のコマンドを入力して、システムにインストールされているすべてのカーネルを表示/一覧表示します。

dpkg --list 'linux-image-*'

現在のカーネルよりも低いすべてのカーネルを見つけます。 削除するカーネルがわかったら、以下の手順を実行して削除します。 以下のコマンドを実行して、選択したカーネルを削除します。

sudo apt-get purge linux-image-x.x.x-x-generic 

最後に、以下のコマンドを実行してgrub2を更新します

sudo update-grub2 

システムを再起動します。

古いカーネルを削除するための私のワンライナー(これはまた、ディスク領域を解放します)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

説明(覚えている, | 前のコマンドの出力を次のコマンドへの入力として使用します)

  • dpkg --list インストールされているすべてのパッケージを一覧表示
  • grep linux-image インストールされているlinuxイメージを探します
  • awk '{ print $2 }' 2番目の列(パッケージ名)を出力するだけです
  • sort -V 項目をバージョン番号順に並べます
  • sed -n '/'`uname -r`'/q;p' 現在のカーネルの前の行を出力します
  • xargs sudo apt-get -y purge 見つかったカーネルをパージします

アンワインディング sed お問い合わせはこちらから:

  • -n 伝えます sed 静かにするには
  • `uname -r` 現在インストールされているカーネルリリースを出力します-出力がコマンドの一部として含まれるように、バックティックに含めます(これは次のように $(uname -r)
  • /something/q あなたが'something'と一致するときにstopと言います(この場合、somethingはの出力されます uname -r)-------- / 正規表現を囲む
  • p がプリントされています
  • その ; はコマンドセパレータなので、 /something/q;p あなたが何かを一致させるときに終了と言います,他の印刷

完全に, sed -n '/'`uname -r`'/q;p' 現在のカーネル名と一致するまで行を出力します。

あなたが(私のように)妄想しているなら、あなたは最後の部分を作ることができます xargs echo sudo apt-get -y purge 古いカーネルをパージするコマンドが出力されるように、実行する前に予期しないものが含まれていないことを確認できます。


ヘッダーを削除するための修正バージョン:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purgedpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

注: sed 呼び出しが変更されます。 "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" バージョンのみを抽出します(例:"3.2.0-44")。"-generic"または類似のものはありません。 uname -r


画像とヘッダーを削除するためのオールインワンバージョン(上記の2つのバージョンを組み合わせたもの):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

Ubuntu16.04+:

$ sudo apt autoremove...The following packages will be REMOVED:  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu15.10以下:

私はこれが最も簡単で最速の方法であることがわかります。 これは、最新のカーネルだけでなく、より多くの二つを保持します:

sudo apt-get install bikeshedsudo purge-old-kernels

保持される追加のカーネルの数を変更するには:

sudo purge-old-kernels --keep 3

Grubからのエントリの削除2エントリは、/etc/grub内のファイルを編集または削除することによって削除する必要があります。dフォルダ。 /Boot/grub/grub。cfgファイルは読み取り専用であり、通常は編集を必要としません。

カーネルが多すぎますか?

  • 現在使用しているカーネルがわからない場合は、端末タイプで uname-r.

  • APT経由で削除されたカーネル(Synaptic、"apt-get remove"など)は自動的にgrubを更新します。cfgおよびユーザーの処置は要求されません。

  • カーネル(およびメニューエントリ)を削除するための素晴らしいツールは、Ubuntu-Tweak、安全で使いやすいGUIアプリです。

  • Ubuntu tweakをインストールする

  • Ubuntuの-微調整は、アプリケーションの下で利用できるようになります>システムツール.

古いカーネルエントリを削除する

  • 左側の"Package Cleaner"を選択し、右側のパネルから"Clean Kernel"を選択します。

  • 右下の"ロック解除"ボタンを押して、パスワードを入力します。

  • 表示されたリストから、削除するカーネルイメージとヘッダーを選択します。 使用中のカーネルはリストされていません。

  • 右下の"Cleanup"ボタンを押して、選択したカーネルイメージとヘッダーを削除します。

Grubメニューからオペレーティングシステムを削除する

  • コンピュータから削除された他のオペレーティングシステムも、"update-grub"がrootとして実行されると、メニューから削除されます。

  • メニュー項目は、スクリプトによってGrub2メニューに配置されます。 他のオペレーティングシステムをメニューに入力したくない場合は、/etc/grubを無効にします。d/30_オスプロバー

  • スクリプトの実行を停止するには、次のコマンドを実行します
    sudo chmod -x /etc/grub.d/30_os-prober

  • /Etc/default/grubのDISABLE_30_OS-PROBER='true'

GrubメニューからMemtest86+を削除する
sudo chmod -x /etc/grub.d/20_memtest86+

  • Update-grubコマンドを実行して、変更をgrubに組み込むことができます。cfg

ソース

メモ:カーネルの更新後、新しいエントリがGRUBメニューに追加されます。必要に応じて、古いものを削除することができます。ただし、ほとんどの経験豊富なユーザーは、アップグレードで何か問題が発生し、トラブルシューティングのために古いカーネルバージョンを起動する必要があ

カーネルエントリを削除する別の方法(10.04より前)

GRUB2ではないGRUBの場合

スタートアップマネージャ

あなたはシステムの下でそれを見つけることができます>>管理>>



あなたが表示するどのように多くのカーネルを選択することができます第二のスクリーンショットで参照してください? 私は一般的にそれを1に保つだけですが、カーネルのアップグレードを取得すると、再起動する前に常に2に変更するので、新しいカーネルにハードウェアに問 新しいカーネルがうまく機能していることがわかったら、それを1に戻します。

純粋にcommandline、これは現在のものと2番目のものを除くすべてを削除します(以下のheadコマンドの"-2"を介して):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |    awk '{print "linux-image-" $0 " linux-headers-" $0}' )if [ -n "$OLD" ]; then    apt-get -qy remove --purge $OLDfiapt-get -qy autoremove --purge

更新: purge-old-kernels非推奨 今日は。

私はトリッキーな条件でもカーネルをパージするスクリプトを作りました。 それはと呼ばれます linux-purge そして、あなたはそれを見つけることができます ここでは、.

システムが壊れていないときに、現在使用されているカーネルよりも古いカーネル(および関連するパッケージ)を消去したいだけの場合は、次のように使 このスクリプト.

古いカーネルの削除に関して私が貢献したUbuntuのドキュメントページもあります ここでは、.

あなたは従うことができます "Unattended-upgrades"パッケージセクションの使用自動セキュリティ更新 これを実行するためのUbuntu Wikiの記事。

次の行を変更する必要があります /etc/apt/apt.コンフ...d/50unattended-アップグレード ファイル;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

Unattended-Upgrade::Remove-Unused-Dependencies "true";

カーネルを含む古いパッケージを自動的に削除する。

また、行を削除またはコメントします

"^linux-image.*"; 

ファイルの"NeverAutoRemove"セクションで /etc/apt/apt.コンフ...d/01オートレモーブ.

すでにUbuntuに付属している可能性のある最速/簡単な方法(少なくとも12.04以降に適用可能)は次のとおりです apt-get. 使用されていない古いカーネルバージョンをすべて削除したい場合は、次の操作を行います(使用していない以前のバージョンを除く)。 これは、現在のカーネルバージョンが何らかの方法で失敗した場合、以前の状態に戻る方法があることを確認するためです)。 次の操作を行います:

sudo apt-get autoclean

これにより、古いファイル(カーネルバージョンを含む)が削除されます。 多くの古いバージョンがある場合は、カーネルバージョンを削除しても問題がないことを確認する必要があるため、しばらく時間がかかります。 私にとっては、最後の12のカーネルバージョンを削除するのに約2分かかりました。 また、次の操作を行うこともできます:

sudo apt-get clean

これは、aptのcacheフォルダにダウンロードされて保存されているすべてのものを排除します。 最後にあなたが持っている:

sudo apt-get autoremove

これは、未使用のパッケージをチェックし、必要に応じてそれらを削除します。 これは、もはやインストールされている任意のアプリbytを必要とされているこれらのライブラリや依存パ

どのカーネルとヘッダーがインストールされているかを把握するには、次を使用します

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

その後、それらを一つずつ、または一緒に削除することができます、ちょうど最新のを維持することを確認してくださ

削除を自動化するための便利なコマンドやスクリプトもいくつかあります。

http://ubuntuforums.org/showthread.php?t=1658648

未使用のカーネルとヘッダーをすべて削除するには、次の主張:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge

(使用 apt-get -y 質問せずに削除するには)

ここでは、18.04.1で実行されたときに何が起こるかです:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

`sudo apt-get autoremove’はUbuntu14.04+でトリックを行う必要があります

ジョブを実行するには、purge-old-kernelsというubuntuコマンドがあります。 私の[回答]を見る(grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu

私はこのページに戻り続けます。… @hobsによるコメントは、あなたのカーネルが自動インストールされている場合にのみ機能します-しかし、あなたはsudo apt-get autoremove--purgeを作ります答えapt-markアドバイスに従https://help.ubuntu.com/community/RemoveOldKernels

古いカーネルの蓄積はバグであり、修正が進行中です。Bug #1357093 “Kernels not autoremoving, causing out of space err...” : Bugs : unattended-upgrades package : Ubuntu … 修正がリリースされると、古いカーネルはデフォルトで自動削除されます。

@hobsカーネルが自動的にインストールされていない場合、コマンドはUbuntu Studio14.04で私のためにトリックをしませんが、Software Updaterによってインストールされています。

古いカーネルを削除するだけでなく、メニューのrecovery項目を削除したい場合は、’/etc/default/grub’のこの行のコメントを解除します。#GRUB_DISABLE_LINUX_RECOVERY=“true”

最近のリリースでは、UbuntuはGrubのサブメニューにカーネルを隠しているので、それほど目立たないものではありません。 しかし、スペースを節約するために余分なカーネルを削除することは良い考えかもしれません、特に、あなたが別の小さな/bootパーティションを持っている

Ubuntuを新しいリリースにアップグレードした後、以前のリリースからカーネルを削除するのに役立つ答えを見つけることができません。grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntuバグ報告

私は仕事をするスクリプトを作った。 私の賞金目標に達した後、私はそれを公開します:Bountysource