依存関係が満たされていないため、完全な/ bootをクリーンアップできません


43

/ bootがいっぱいであることを説明するエラーメッセージが表示されました。古いイメージファイルをクリーンアップしようとすると、ディスクのフルエラーまたは依存関係エラーが原因で常に失敗するようです。誰かが私が間違っているところを説明できますか?

$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run ‘apt-get -f install’ to correct these.
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

使った

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

取得するため

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

次に、削除する最初の画像を選択します

$ sudo apt-get purge linux-image-3.13.0-32-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

あなたの質問との出力を編集してくださいsudo apt-get autoremovels /boot
ムル

フロッグの答えを試してください。uname -rコマンドを使用して現在のカーネルバージョンを確認し、それ以外のカーネルを削除してみてください。
ムル

回答:


64

そのような場合、dpkgツールを使用して、いくつかのカーネルパッケージを強制的に削除します。 これは一般的な使用には推奨されておらず、少し危険ですが、そのような場合、依存関係が満たされていない場合に役立ちます。

まず、システムが起動されているカーネルを見つけます。現在ロードされているもの。ターミナルを開き(CTRL + ALT + T)、次のコマンドを発行します

uname -r

ロードされたカーネルが表示されます。これを削除しようとしないでください。

次に、コマンドを発行します

ls /boot 

インストールされているすべてのイメージが返されます。1つまたは2つを選んで、それらを削除してください。強制的に削除/パージしてみてください。例えば

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

空き容量を確保するために、他の画像にも同じことができます。

その後、不足しているパッケージのインストールを試みることができます、または

sudo apt-get install -f 

依存関係の解決を試みます。

最後に、「cleanup old kernels」コマンドを発行します

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

上記のコマンドは、現在ロードされているカーネルを除くすべてのカーネルを削除します。

個別の/ bootパーティションがあるため、そのスペースを追跡し、頻繁にクリーンアップする必要があることに注意してください(頻度は/ bootのスペースによって異なります)


1
こんにちは、それらを削除しようとするとエラーが発生しますsudo dpkg --force-all -P abi-3.13.0-32-generic dpkg:warning:リクエストを無視してabi-3.13.0-32-genericを削除しますインストール済み
フィリップハワード

9
これは、1つの変更を加えて機能しました:でカーネルイメージを削除した後dpkg、満たされていない依存関係に関する苦情を停止sudo apt-get -f autoremoveするためapt-getに実行する必要がありました。そうでなければ、sudo apt-get -f installどうやら私が削除したすべてのカーネルイメージを再インストールしようとし続けdpkg/bootようです。
mdunsmuir

4
強制パージとapt-get -f autoremove上記の@mdunsmuirコメントの後、上記のクリーンアップ操作中にすべての古いカーネルをインストールする必要があります。無関係な依存関係を無視し、単一の完全な古いカーネルを削除するように指示する方法はありますか?
NKijak

3
追加したいのは、エクストラもアンインストールする必要があることsudo dpkg --force-all -P linux-image-extra-3.13.0-32-genericです。それ以外の場合、これらのエクストラは実際のイメージに依存するため、-fフラグにより​​イメージが再インストールされ、ディスク領域が不足します。
ゴーストキーパー

1
@LonnieBest同意します。対照的に、Arch Linuxはフォールバックを1つだけ保持します。Fedoraにもこの問題はないようです。
フランクリンゆう

5

これがUbuntu 16.04で私のために働いたものです。

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade

この方法は私にとってはうまくいきました。
ボク

2

すべてのカーネルをリストします。

dpkg --list 'linux-image*'

現在のカーネルを表示:

uname -r

すべてのカーネルをリストEXCEPT現在1:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

現在のカーネルがそのリストにないことを確認してください。

すべてのカーネルを削除EXCEPT現在1:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

他のものをクリアする:

sudo apt-get autoremove

それでもファイルのインストール/アンインストールでブートディスク領域エラーが発生する場合は、/ bootディレクトリから古いイメージの1つを直接削除してください。ls-lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; 注:イメージを削除する前に、現在のカーネルイメージを再度確認してください。
ヘマントトー

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