web-dev-qa-db-ja.com

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

/ 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).
42
Philip Howard

そのような場合、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のスペースによって異なります)

62
NickTux

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

Sudo apt autoremove --purge
Sudo apt autoremove
Sudo apt-get -f install
Sudo apt-get upgrade
5
msa

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

dpkg --list 'linux-image*'

現在のカーネルを表示:

uname -r

すべてのカーネルをリストしますを除く現在のカーネル:

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

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

すべてのカーネルを削除しますを除く現在のカーネル:

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
2
Hemant Thorat