古いカーネルを消去できません (依存関係の問題) が、/boot のスペースが不足しています

古いカーネルを消去できません (依存関係の問題) が、/boot のスペースが不足しています

Ubuntu 14.04.4 LTS を実行しており、apt-get を使用して新しいパッケージをインストールしようとしています。残念ながら、試すたびに次のようなメッセージが表示されます。

The following packages have unmet dependencies:
 linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed

グーグルで調べてみたら、これはブートパーティションのスペース不足が原因である可能性があります(そして案の定、 100% とdf表示されます)。ただし、そこで受け入れられた回答のコマンド/bootを実行しようとすると、上記と同じエラーが発生します。apt-get

を使わない別の解決策を探していたapt-getところ、この郵便受けは、sudo dpkg --purge linux-image-4.2.0-15-generic古くて未使用のカーネルで のようなものを使用することを推奨しています。

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)(前述の投稿から)は、いくつかの古いカーネルが状態pi(望ましいパージ、状態は次のようにインストール済み)にあることを示しています。これ

uname -r実行中のカーネルは 3.16.0-62-generic であると表示されるので、これらの古いカーネルを削除しても問題ないと考えました。しかし、次のようなsudo dpkg --purge linux-image-3.16.0-49-generic結果になる場合は、

dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
 dependency problems - not removing
Errors were encountered while processing:
 linux-image-3.16.0-49-generic

ガーグ!もう途方に暮れていて、手に負えない状態です(dpkg や apt-get についてはあまり詳しくありません)。だから助けが必要です。

質問:

  1. なぜ古いカーネルをアンインストールできないのですかdpkg?

  2. その質問が直接解決できない場合、最終的に私が知りたいのは次のことだと思います。新しいパッケージを再度インストールできる状態にするには、何をする必要がありますか?


私が試した他のもの:

  • sudo apt-get autoremove: 満たされていない依存関係に関する元のエラーが発生します
  • sudo apt-get -f autoremove: 結果:
linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) を解凍しています...
dpkg: アーカイブ /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack) の処理中にエラーが発生しました:
 './boot/vmlinuz-3.16.0-70-generic' から抽出したデータを '/boot/vmlinuz-3.16.0-70-generic.dpkg-new' にコピーできません: 書き込みに失敗しました (デバイスに空き容量がありません)
エラーメッセージにディスクがいっぱいのエラーが示されているため、apport レポートは書き込まれません
                                                                              dpkg-deb: エラー: サブプロセス paste がシグナルによって強制終了されました (パイプが壊れています)
/etc/kernel/postrm.d を調べています。
run-parts: /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic を実行しています
run-parts: /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic を実行
処理中にエラーが発生しました:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: サブプロセス /usr/bin/dpkg がエラーコードを返しました (1)

注記: この質問は「Unix & Linux スタック エクスチェンジ」

答え1

現在実行中のカーネルを表示するために使用しますuname -r。このバージョン番号のものは削除しないでください。

カーネルがどのパッケージ/bootに属しているかを確認できます。

for i in /boot/vmlinuz* ; do 
    dpkg -S $i| egrep -v $(uname -r)
done

これらのパッケージを削除するにはsudo apt-get purge パッケージ名 ...

同じバージョン番号を持つ他のパッケージを探すことで、削除するカーネルに関連する他のパッケージを見つけることができます。

バージョン番号を抽出するには:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4  

同じバージョン番号を持つ他のパッケージを見つけるには:

for j in $(
    for i in /boot/vmlinuz* ; do 
        dpkg -S $i| egrep -v $(uname -r)
    done |cut -d- -f3-4 ) ; 
do 
     dpkg -l "*$j*" | egrep '^ii|^rc'
done  

現在のカーネル以外のすべてのカーネルと、削除されたカーネルとバージョンが一致するすべてのパッケージの削除を自動化するには(デンジャー、ウィル・ロビンソン):

追加するだけ

| awk '{print $2}' | xargs sudo apt-get --dry-run purge

を前のコード フラグメントに追加します。目的の動作が確実に実行されたら、 を削除します--dry-run

がいっぱいでパッケージを削除できない場合は、最も古いファイルを削除して/boot空き容量を確保できます。/boot/boot/initrd.img*

関連情報