web-dev-qa-db-ja.com

ターミナルから古いカーネルを削除する方法

古いLinuxカーネルをクリーンアップする方法について、さまざまな質問を行ってきました。彼らはすべて異なる答えを持っているようで、彼らは古いので、誰かが質問が古すぎると言って新しい投稿を開始する必要がありますので、ここにあります:

次のすべてを行いたい:

  1. ターミナルで古いLinuxカーネルを手動で削除します。
  2. すべての構成ファイルを削除する
  3. すべてのヘッダーファイルを削除する
  4. 不要なiノードを削除しますか?
  5. Dpkg -lの理由を説明してください| grep linux-imageは、ブート中にgrub2リストに表示される結果と同じ結果を返しません。
  6. Dpkg -lでrc vs iiを説明する| grep linux-imageリスト
  7. / usr/srcディレクトリ(またはこれらのファイルが他のUbuntuバージョンで見つかった場所)のエントリ間の矛盾と、余分なカーネルバージョンを決定する上記の2つの方法を説明します。
  8. 古いカーネルの完全なクリーンアップの結果は何ですか?依存関係について心配する必要がありますか?コンピューター上のアプリが古いカーネルの構成ファイルに依存しているかどうかを確認する方法を教えてください。

私が望まないもの:

  • 個人的にテストしていないか、完全なクリーンアップに関連するすべての問題に対処していない他の回答へのリンク。
  • 個人的にテストしていない回答。
  • すべてを一度に自動的にクリーニングしようとするスクリプト。進行中のすべてを完全に理解するまで、これを手動で行いたいだけです。

カーネルのビルドアップの問題に対する包括的な解決策を手に入れましょう。現在、アップグレードする前に古いバージョンのUbuntu(10.04)で遊んでいますが、Ubuntu 12.04でも同じ問題があります。ソリューションがバージョンごとに異なる場合は、ソリューションのテストに使用したバージョンを明記してください。

動作するもの:

uname -r

これは、現在使用しているカーネルバージョンを正しく返します。

機能しないもの:

Sudo apt-get autoremove
Sudo apt-get clean
Sudo apt-get autoremove linux-image-x.x.xx-xx-generic

私はうまくいくはずだと思ったが、しませんでした:

Sudo apt-get purge linux-image-x.x.xx-xx-generic

これは、dpkg -l | grep linux-imageによって生成されたリストを減らすために働きました:

Sudo dpkg --purge linux-image-x.x.xx-xx-generic

rc/iiの問題のスタート地点もここにあります:

iiは「インストールする必要があり、インストールする」ことを意味し、rcは「削除/アンインストールするが、構成ファイルはまだ存在する」ことを意味します。

これは、端末リストと起動時のgrub2メニューの不一致の問題に対処していると思います。思い出すと、iiリストはgrub2リストと一致します。ここでの質問は、最初にiiエントリがどのようにそこに到達したかです。

7
JamesH

/ bootがいっぱいになるまで古いカーネルが蓄積し、aptが壊れるのはバグです。 LP#135709 。Ubuntu 16.04以降のすべてのフレーバーで修正が実装されています。

この問題に気付いたほとんどのユーザーは、 '暗号化されていない/ bootパーティションを作成する'ディスク全体暗号化 'をインストールしました。小さいため、パーティションはすぐにいっぱいになり、これらのユーザーは他のユーザーよりもずっと早く問題に気付きます。

新しいカーネルがインストールされると、/ etc/kernel/postinst.d/apt-auto-removalスクリプトは古いカーネルを自動削除のeligibleとしてマークしますが、実行されません自動削除。自動削除の欠如は、元々、人間が削除されたパッケージのリストを確認できるようにすることを目的としていました。

LP#135709 のバグ修正は、ほとんどのユーザーで機能します。機能しない場合は、古いカーネルパッケージが自動削除の対象として適切にマークされないようにする別の根本的な原因があります。 Ubuntuサポートチャネルで1対1のヘルプを求めてください。

Ubuntuの古いバージョンでは、スペースを手動で保持するために古いカーネルの雑草を修正する必要があります。手動で修正する方法は、/ bootがいっぱいかどうかによって異なります。ほとんどのユーザーは、/ bootがいっぱいになるまで問題に気付かないため、aptおよびdpkg no-space-left-on-deviceエラーが発生します。

/ bootが一杯ではない場合、aptが適切に動作する場合、単純な

Sudo apt-get autoremove      ## Ubuntu 14.04 and older
Sudo apt autoremove          ## Ubuntu 16.04 and newer

自動削除の対象となるすべてのカーネルパッケージを削除する必要があります。

/ bootがいっぱいで、aptアクションが「デバイスにスペースが残っていません」というdpkgエラーで失敗した場合、自動削除を使用するには遅すぎます。

Aptdaemonはパッケージアクションをキューに入れるため、手遅れです。自動削除はキューの最後にあり、アクションが失敗した場合(スペース不足など)、aptは残りのキュー全体を中止します。 (これはおそらくapt/aptdaemonのバグです)

ここでのベストプラクティスは、「uname」および「dpkg」を使用して1つまたは2つの古いカーネルを削除し、aptがキューに入れられたアクションを完了するためのスペースを解放することです。その後、自動削除が機能します。

例:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ Sudo dpkg --remove linux-image-3.16.0-30-generic
$ Sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ Sudo apt autoremove         ## Ubuntu 16.04 and newer

長い間問題を無視していた場合、間違ったカーネルバージョンを指すlinux-image-genericのような二次効果があります、およびapt依存関係エラー。これらすべてを一度に修正する単一の方法はありません。

一般に、これらの問題のほとんどをクリーンアップする簡単な方法は、ローカルパッケージキャッシュから古いパッケージをクリーンアップし、パッケージデータベースを更新し、問題のパッケージを(ローカルキャッシュの代わりに)Ubuntuリポジトリから再インストールすることです。

$ Sudo apt-get update       ## Refresh the package database (14.04 and older)
$ Sudo apt update           ##                              (16.04 and newer)

$ Sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ Sudo apt autoclean        ##                                                    (16.04 and newer)

$ Sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ Sudo apt install --reinstall <packagename>         ##                (16.04 and newer)

それでもaptおよび/またはdpkgエラーが発生する場合は、Ubuntuサポートチャネルで1対1のヘルプを探してください。

7
user535733

これらのコマンドを試して、古い構成ファイルと古いカーネルを削除できます。

exec Sudo -i

CONFOLD=$(dpkg -l | grep '^rc' | awk '{print $2}')

KERNELCUR=$(uname -r | sed 's/-*[a-z]//g' | sed 's/-386//g')

PKGLINUX="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAPKGLINUX="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

KERNELSOLD=$(dpkg -l | awk '{print $2}' | grep -E "$PKGLINUX" | grep -vE "$METAPKGLINUX" | grep -v "$KERNELCUR")

apt-get purge "$CONFOLD"

apt-get purge "$KERNELSOLD"

update-grub
1
kyodake

以下のコマンドを実行して、インストールされているカーネルのリストを見つけることができます。

rpm -qカーネル

カーネルのリストを見つけたら、以下のコマンドを実行してカーネルを削除します。

Sudo apt-get remove linux-image-x.x.x.x-generic

0
vembutech