/ bootパーティションが100%に達したため、アップグレードできません。古いカーネルを削除してスペースを空けることはできません


154

私がしようとしたとき、私の最初の問題でしたapt-get updateapt-get upgrade。アップグレード時に、次のエラーが表示されます。

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

私はapt-get install -fを実行しようとしましたが、これは出力です(プロンプトでyesと言った後)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

実行apt-get autoremoveしてみましたが、と同じエラーが表示されapt-get upgradeます。

私が実行するとdf、私はこれを取得し/bootます:

/dev/sda1                    233191     230297         0 100% /boot

だから、古いカーネルをパージしようとするべきだと他の場所で読みました。私が持っているカーネルをチェックしました:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

これで最も古いものを削除しようとすると:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

インストールを台無しにせずにブートを解放または延長するにはどうすればよいですか?


それはパッケージマネージャを使用し、他のパッケージマネージャのコマンドが失敗したとき、それは、少なくとも私にとっては、働いていた:私は@ mreiterの答えは最高かもしれないと思うaskubuntu.com/a/205776/247661
アーロン・ホール


1
@dskrvkはい!なぜRemove-Unused-Dependenciesデフォルトではないのですか?
スティーブンR.ルーミス

回答:


130

ルートファイルシステムのスペースを解放する

ルートファイルシステムの領域を解放するには、を実行してみてくださいapt-get clean

それでもうまくいかない場合は/var/cache/apt/archives、いくつかのファイルをキャッシュから手動で削除して、スペースを取り戻すことができます。例:

sudo rm linux-headers-*

.deb必要な場合、ここですべてのファイルを削除しても害はありません-それがapt-get cleanそうです。それらはapt再び必要になった場合に自動的に再ダウンロードされます。

/ bootファイルシステムのスペースを解放する

元のポスターには別の/bootパーティションがあり、それがいっぱいでaptシステムの動作を妨げています。彼がそこにスペースを空ける必要があります。

十分なスペースがある場合は/boot、設定ファイルに移動して削除します:

sudo rm config-3.2.0-19-generic-pae

たとえば、カーネルバージョンのいずれかの名前を使用して、とにかく削除する予定です。これにより、少しのスペース(約144K)が解放されます。

あなたはより多くのスペースが必要な場合は、個別に、古い削除vmlinuzinitrdabiSystem.mapあなたは(私のi386のカーネルのバージョンのいずれかのために22M程度)十分なスペースを持ってまで、ファイル。

何をするにしても、それらをすべて削除しないください。少なくとも、使用するカーネルの種類ごとに、ファイルの種類ごとに最新の2つの一致するバージョンを保持する必要があります。

次に、apt-get installコマンドを続行します。前述のように、削除したデブの一部を再ダウンロードする必要がある場合がありますが、その場合は自動的にダウンロードされます。再びaptが機能するようになったら、apt-getを使用して、削除したファイルに対応するパッケージを削除し、すべてが一致するようにクリーンアップします。


configファイルには、/bootカーネル設定で使用されたために、カーネルチームによって構築同じ名前のカーネルを。参照したり、独自のカーネルの構築を支援したい場合を除き、削除しても無害です。

最後に、/bootパーティションから古いカーネルパッケージまたは2つを手動で削除して、新しいカーネルパッケージのためのスペースをさらに確保します。


ほとんどすべての設定を削除してみました。まだ十分なスペースがないようです。そこにある他のどのファイルを削除しても安全ですか?私のルートファイルシステムはどこも満杯に近くないので、心配していません。
-Strifey16

手動で削除するファイルを追加して回答を更新しました。3.0.0.13および3.0.0.14セット(abiファイルを含むセットに5つのファイル)を削除するだけで十分だと思われます。
ジョンSグルーバー

2
これで修正されました。おそらく手動でファイルを削除することになると思いましたが、私はaptによってインストールされたものを使用してそれを行うことを常にためらっています。
Strifey16

9
sudo rm/ bootからの削除には使用しないでください。代わりに、sudo dpkg --purge古いlinux-imageパッケージを削除するために使用します。その後sudo apt-get -f install、破損した依存関係を修正するために使用します。
ジャルノ

4
いつかシステムがいっぱいになり、dpkgでさえ動作できなくなるかもしれませんが。しかしrm、その後使用することができます。
ヤルノ

66

私の場合、aptコマンドとdpkgコマンドは終了できず、削除できませんでした。インストール時に自動更新が失敗しました2.6.32-56-server

私の最初のステップは、使用するスペースを特定することでした。

cd /boot
du -sk *|sort -n

約30個のカーネルとサポートファイルがありました。

私がやったuname -a実行中のカーネルを取得するために、私は、Linuxの代替にあったことを識別2.6.32-43-serverしていたtar動作していなかったバージョンの6のを、そして齢でした。

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

次に、rm -rfバックアップしたことを実行しました。

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

これらのコマンドを例として示していますが、状況に応じて何を扱うかを決める必要があります。

スペース/bootができたので、走ることができました

apt-get -f install 

の失敗したインストールをクリーンアップするには2.6.32-56-server

それから

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

これにより、バックアップしたものを元に戻すことができました。

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

クリーンアップするには、次に実行できます:

apt-get autoremove

再起動して、の4%を使用するようになりました/boot


これはすべての提案の中で私にとって最も役に立ちました。どうもありがとうございました!
ジョシュアF.ローンツリー

/ bootからファイルを削除すると、インストールスクリプトと削除スクリプトがファイルが見つからないときにHARDに失敗するため、aptとdpkgがひどく壊れます。これがどのように機能するかはわかりません。
FizxMike

20

古いカーネルを削除するdpkg代わりに使用できapt-getます:

sudo dpkg -r linux-image-3.2.0-29-generic

多分これを使用するためのプラスがありますが、@ mreiterの提案はこれがうまくいかなかったときに私のために働きました(これはubuntuのIRCサポートチャネルで提案されました。)
アーロンホール

3
@AaronHallこの回答には、mreiterの回答の重要な部分(最後の行)が含まれているだけで、ヘッダーのクリーニングをカバーしていないため、はるかに短くなっています(別の/bootパーティションの場合は役に立ちません)。
メレビウス

9

ブートディレクトリに古いバージョンのファイルがまだ残っていることに気付きました。

$ ls /boot
vmcoreinfo-2.6.31-17-server

そして、パッケージマネージャーは古いバージョンをリストします。

dpkg -l | grep linux-image

したがって、このコマンドを使用しました(autoremove削除したくない最近の画像も削除します)

sudo apt-get purge linux-image-2.6.31-17-server

私はまだいくつかのヘッダーが残っていました:

dpkg -l | grep linux-headers

だから私はこれをやった:

sudo apt-get purge linux-headers-2.6.32-34

最後に、apt-get purgeで削除できなかったパッケージが1つ残っていました。

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

ソース:dpkgによってrcとしてマークされたパッケージを削除

sudo dpkg --purge linux-image-2.6.28-11-server

3

使用を確認/var/tmpしてをdu -sh /var/tmp/。そのフォルダ内のすべてのファイルを削除して、スペースを空けることができます。

その後、次を実行して古いカーネルを削除できます。

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub

/var/tmp古いカーネルとはどう関係しますか?そして、内のすべて削除するには、常に安全ではありません/var/tmp...
fosslinux

3

これは私が使用したものです:

sudo apt-get autoremove linux-image-xxxx

すべての古いカーネルに対してこれを行い、最新の2つだけを保持します。

古いカーネルを自動的に削除してGRUBを更新する場合は、Ubuntu Documentationを参照してください


2
これは受け入れられた答えであるはずです。すべてをクリーンアップしてもかまわない場合は、Linuxイメージを指定する必要さえありません。
Cyber​​Ed 16

2

私のために働いたのはAptitudeを使うことだけだった。

sudo aptitude

その後、開くと通常、下部に満たされていない依存関係について何かを言います。g提案された削除を続行するには、文字を打つことができます。何が起こるかをリストするページに移動します。

-壊れたカーネルの横にマイナスがあるはずです。gもう一度押すと、破損したカーネルが削除されます。を押しqて終了します。その後sudo apt-get autoremove、古いカーネルを削除してスペースを解放するために使用できるはずです。


1
これが唯一の有効な答えです。パッケージマネージャーは、パッケージを削除する前にパッケージをインストールしようとしたため、他のすべての回答は機能しませんでした。
machineaddict

2

パッケージを操作することはできません、他のファイルを操作することはできます。最初に、ホームフォルダを調べて、削除できるものがあるかどうかを確認します。そうでない場合は、十分な量のファイルを別のパーティション(またはフラッシュドライブ)に移動してsudo apt-get install -fから、パッケージの依存関係の問題(ほとんどの場合、.debファイルをインストールしたdpkg)をクリーンアップし、古いカーネルをすべて削除します。少なくとも10 MBを安全に確保したら、不要なソフトウェアまたはファイルを削除してみてください。


5
ホームフォルダは、中/ブートではありません
するThorbjörnRavnアンデルセン

1

Synaptic Package Managerを使用します。削除したいパッケージを選択するだけで、それに依存するパッケージも削除するよう求められます。私の経験では、カーネルパッケージは常に、相互に依存する2つのグループ(数え方によってはそれ以上)で提供されます。通常、「local / obsolete」フィルターを使用して古いものをすばやく見つけることができます。


2
たとえば、(テキストのみ)サーバーでは、Synapticはありません。したがって、実際にはサーバーの実行可能なソリューションではありません。
nerdoc

1

私は時々この問題と戦っていますが、実際に完全な仕事をする解決策はまだ見ていません。場合によっては、古いカーネルを削除すると依存関係になり、何も削除できなくなり、/ bootから手動でカーネルを削除する必要がありました。ただし、手動で削除されたカーネルがどこかにログに記録され、ファイルでrm -rfを実行しているためにファイルが欠落していることが報告されると、将来の問題を引き起こす可能性があるため、私はまだ完全な仕事をしたいと思っていました。

そこで、ここでグーグルが提案した多くの提案に基づいて、このスクリプトを作成しました。スクリプトは、自分自身の「予期しない」状況をサポートするために数回修正されました。たとえば、これをラズベリーパイで実行すると、おそらくupdate-grubは存在しません。また、場合によっては、最後のアップデーターを実行すると、サーバーがIPv6でスタックし、一部のサイトに到達できませんでした。

スクリプトは、依存関係のビルドのために完全にスタックしているカーネルを強制的に削除する必要があるかどうかを判断します。「正しく」実行できる場合はそうします。

#!/bin/bash

ipv4="-o Acquire::ForceIPv4=true"

if [ "$1" = "4" ] ; then
    withip=$ipv4
    echo "Going IPv4 ($withip)"
fi

echo "Autoremove+Purge."
apt-get $withip -y -f autoremove --purge >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "Auto Removal Failed!"
fi

echo "Old dependency fix."
apt-get $withip -f -y install >/dev/null 2>&1

if [ "$?" != "0" ] ; then
    echo "That failed. So we'll try to make up to it during this process."
fi

echo "Now, going old kernel cleanup!"
kern=$(dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`)
hadErrors=0

for k in $kern
do
    echo apt-get -y purge $k
    apt-get $withip -y purge $k >/dev/null 2>&1

    if [ "$?" != "0" ] ; then
        echo "Failed apt-purge... Using plan B (--force-all -P)..."
        dpkg --force-all -P $k >/dev/null 2>&1
        echo "Rerunning stuff (apt-get -f -y install) for dependencies..."
        apt-get $withip -f -y install >/dev/null 2>&1
        if [ "$?" != "0" ] ; then
            echo "Still failing..."
            hadErrors=1
        fi
    fi
done

if [ "$hadErrors" = "1" ] ; then
    echo "I had errors. I should rerun this process, to see if there are more kernels that were left out after cleanup..."
    /usr/local/tornevall/cleankernel
fi

apt-get $withip autoremove
apt-get $withip update
apt-get $withip upgrade
apt-get $withip dist-upgrade

grb=$(which update-grub)
if [ "" != "$grb" ] ; then
    update-grub
else
    echo "Can't upgrade grub since update-grub is missing..."
fi

linux-purgeを試しましたか?ただし、現時点ではForce IPv4のことはありません。
ジャーノ

あなたのスクリプトは私のシステムのlinux-image-genericを消去しますが、これは悪いことです。
ジャーノ

古いカーネルがクリーンアップされると、何らかの理由で元に戻ります。少なくとも、このスクリプトを作成して以来、これは私にとって事実です。ただし、このスクリプトは、先に進む他のオプションがない場合に使用するものです。通常、アップグレードはこれを自分で処理しますが、この瞬間になると、他に何も機能しないときは、クリーンアップ後に通常より多くのカーネルがセットアップされるので、これは良いオプションかもしれません。この良し悪しがおそらく議論できる場合。
トマストルネヴァル

0

実行するだけでsudo apt-get -f autoremove問題が解決しました。


2
100%のディスク容量/ bootを使用しましたか?
fosslinux

私の監視履歴を見ると、そうではなかったようです。PS:Vagrant xenialを使用しており、ブートファイルシステム/dev/sda1がマウントされています/
forzagreen

0

これを実行します:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

出典:アップグレード後にこのエラーが発生します。助けてください


sudo dpkg-reconfigure -a thisは何をしますか?Ubuntuの16日のは、未知のオプション-a言う
Shivam Kotwalia

この質問でaptは、削除プロセス自体がでファイルを生成するため、カーネルパッケージを削除できません/boot。それがapt-get autoremove失敗する理由です。探している質問はaskubuntu.com/q/142926/158442で、既にautoremoveリストされています。
ムル

それは私のために、トリックをしたので、@muru、私はそれを投稿:D
Ardi Nusawan

私が言っていることは、あなたの問題はこれではなく、他の質問だったということです。
ムル

@muru oh ok it got it:D
アルディヌサ

0

apt-get -f installまたはapt-get -f autoremov eがカーネルを再インストールするため、dpkgが古いLinuxカーネルをパージしても解決されない/ bootに関する記事がいくつかあります。

私の場合、少なくとも署名されたパッケージと余分なパッケージも削除する必要がありました。カーネルはこれらのパッケージの依存関係であったため、aptを再インストールしました。通常、関連するカーネルパッケージは、「インストール」を呼び出す前に削除する必要があります。パージの直後にapt-get upgradeを試みた場合、エラーメッセージには、パージしたばかりのカーネルの依存関係が満たされていないパッケージが示されているはずです。

私の場合、次の戦術が有効でした:

#as sudo, repeat 1-3 for any old kernels; can be scripted
dpkg --force-all -P linux-image-4.4.0-112-generic 
dpkg --purge linux-image-extra-4.4.0-112-generic
dpkg --purge linux-signed-image-4.4.0-112-generic
apt-get -f install #dependency resolution didn't have work to do for kernel packages
apt-get autoremove --purge -f 
apt-get autoclean
apt-get upgrade

0

このようなlinux-purgeツールをインストールします。

次に、ターミナルで実行します。

sudo linux-purge --clear-boot --fix

次に、たとえばカーネルを削除します

sudo linux-purge --keep 1 --choose

追加:

カーネルの無人削除にlinux-purgeを使用して無人アップグレードを使用する場合は、/ etc / apt / apt.conf.d / 50unattended-upgradesを編集して未使用のものの削除を無効にし、systemdサービスを設定する必要があります実行中

/usr/local/bin/linux-purge --auto-only --keep 1 --yes

いつでも好きなときに。

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