web-dev-qa-db-ja.com

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

最初の問題は、apt-get updateまたはapt-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).

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

153
Strifey16

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

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

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

Sudo rm linux-headers-*

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

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

オリジナルのポスターには別の/bootパーティションがあり、それがいっぱいでaptシステムが機能しません。彼はそこにスペースを空ける必要があります。

十分なスペースがある場合は、/bootに移動して、構成ファイルを1つまたは2つ削除します。

Sudo rm config-3.2.0-19-generic-pae

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

より多くのスペースが必要な場合は、十分なスペース(i386カーネルバージョンのいずれかで約22M)ができるまで、古いvmlinuzinitrdabi、およびSystem.mapファイルを個別に削除します。

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

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


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

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

129
John S Gruber

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

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

cd /boot
du -sk *|sort -n

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

uname -aを実行して実行中のカーネルを取得し、Linuxの代替2.6.32-43-serverを使用していることを確認し、実行されておらず古いバージョンの6つのtarを実行しました。

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

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

65
A.G. Russell

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

Sudo dpkg -r linux-image-3.2.0-29-generic
20
psusi

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

$ 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
9
mreiter

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

Sudo apt-get autoremove linux-image-xxxx

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

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

3
Samer

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

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

Sudo apt-get clean
Sudo apt install byobu
Sudo purge-old-kernels
Sudo apt autoremove
Sudo update-grub
3
Tertius

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

2
hexafraction

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

Sudo aptitude

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

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

1
Matthew Swanson

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

1
Wegko

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

そこで、ここでグーグルが提案した多くの提案に基づいてこのスクリプトを作成しました。これは何かをさらにインストールする必要はありません。スクリプトは、私自身の「予期しない」状況をサポートするために数回修正されました。たとえば、Raspberry Piでこれを実行すると、おそらく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
1
Tomas Tornevall

これを実行します:

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

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

0
Ardi Nusawan

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

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

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

いつでも好きなときに。

0
jarno

--boot()でいくつかの記事を見ましたが、dpkgが古いLinuxカーネルをパージしても解決されません。apt-get -f installまたはapt-get -f autoremov = eはカーネルを再インストールします。

私の場合、少なくとも署名されたパッケージと余分なパッケージも削除する必要がありました。カーネルはこれらのパッケージの依存関係であったため、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
Rhandi Martin

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

0
forzagreen