Meine / boot Partition hat 100% erreicht und jetzt kann ich kein Upgrade durchführen. Alte Kernel können nicht entfernt werden, um Platz zu schaffen

154

Meine erste Ausgabe war, als ich versuchte, apt-get updateoder apt-get upgrade. Beim Upgrade erhalte ich folgende Fehlermeldung:

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.

Ich habe versucht, apt-get install -f auszuführen und dies war die Ausgabe (nachdem ich bei Aufforderung Ja gesagt habe)

(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)

Ich habe versucht zu rennen apt-get autoremoveund es gibt mir den gleichen Fehler wie apt-get upgrade.

Wenn ich renne df, bekomme ich das für /boot:

/dev/sda1                    233191     230297         0 100% /boot

Also habe ich an anderer Stelle gelesen, dass ich versuchen sollte, alte Kernel zu bereinigen. Ich habe nachgesehen, mit welchen Kerneln ich gearbeitet habe:

$ 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

Wenn ich versuche, das älteste mit diesem zu entfernen:

$ 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).

Wie kann ich den Start freigeben oder verlängern, ohne meine Installation zu beeinträchtigen?

Strifey16
quelle
Ich denke, @ mreiters Antwort ist vielleicht die beste: Sie verwendet den Paketmanager und hat funktioniert, als andere Paketmanager-Befehle fehlgeschlagen sind, zumindest für mich: askubuntu.com/a/205776/247661
Aaron Hall
1
@dskrvk Ja! Warum ist Remove-Unused-Dependenciesnicht die Standardeinstellung?
Steven R. Loomis

Antworten:

130

Freigeben von Speicherplatz im Root-Dateisystem

Um Speicherplatz im Root-Dateisystem freizugeben, können Sie versuchen, auszuführen apt-get clean.

Wenn dies nicht funktioniert, können Sie /var/cache/apt/archiveseinige Dateien manuell aus dem Cache entfernen, um Speicherplatz freizugeben. Beispiel:

sudo rm linux-headers-*

Es wird nicht schaden, alle .debDateien hier zu entfernen , wenn Sie müssen - das ist, was apt-get cleantut. Sie werden automatisch erneut heruntergeladen, aptwenn sie erneut benötigt werden.

Freigeben von Speicherplatz im / boot-Dateisystem

Das Original-Poster verfügt über eine separate /bootPartition. Diese ist voll und verhindert, dass das aptSystem funktioniert. Dort muss er Platz schaffen.

Wenn fast genug Speicherplatz vorhanden ist, /bootentfernen Sie ein oder zwei Konfigurationsdateien:

sudo rm config-3.2.0-19-generic-pae

Beispiel: Verwenden Sie jedoch den Namen einer der Kernel-Versionen, die Sie trotzdem entfernen möchten. Dadurch wird ein wenig Speicherplatz frei (ca. 144 KB pro Stück).

Wenn Sie mehr Platz benötigen einzeln entfernen alt vmlinuz, initrd, abiund System.mapDateien , bis Sie genügend Platz haben (etwa 22M für einen meiner i386 - Kernel - Versionen).

Was auch immer Sie tun, entfernen Sie nicht alle . Sie sollten für jede Art von Kernel, die Sie verwenden, mindestens die neuesten zwei übereinstimmenden Versionen jeder Art von Datei aufbewahren.

Fahren Sie dann mit Ihren apt-get install-Befehlen fort. Wie oben erwähnt, müssen sie möglicherweise einige der von Ihnen gelöschten Debs erneut herunterladen. In diesem Fall geschieht dies jedoch automatisch. Wenn Sie wieder mit apt arbeiten, entfernen Sie mit apt-get die Pakete, die den von Ihnen entfernten Dateien entsprechen - damit alles passt.


Die Konfigurationsdatei in /bootder Kernel - Konfiguration , die verwendet wurde , vom Kernel - Team zu bauen , den Kernel des gleichen Namen. Es sollte harmlos sein, es zu entfernen, es sei denn, Sie möchten es als Referenz oder als Hilfe beim Erstellen Ihrer eigenen Kernel.

Schließlich entfernen Sie manuell ein oder zwei alte Kernelpakete von der /bootPartition, um noch mehr Platz für das neue zu schaffen.

John S Gruber
quelle
Ich habe versucht, fast alle Configs zu entfernen. Es scheint immer noch nicht genug Platz zu haben. Welche anderen Dateien könnten sicher entfernt werden? Mein Root-Dateisystem ist bei weitem nicht voll, daher mache ich mir darüber keine Sorgen.
Strifey16
Ich habe meine Antwort mit den weiteren Dateien aktualisiert, die per Hand entfernt werden sollen. Es scheint mir, dass das Entfernen der Sätze 3.0.0.13 und 3.0.0.14 (fünf Dateien zum Satz einschließlich der Abi-Datei) ausreichen würde.
John S Gruber
2
Das hat es behoben. Mir war klar, dass es wahrscheinlich darauf ankommen würde, Dateien von Hand zu entfernen, aber ich zögere immer, dies mit irgendetwas zu tun, das von apt installiert wurde, also dachte ich, ich würde zuerst hier nachfragen.
Strifey16
9
Nicht sudo rmzum Entfernen von / boot verwenden. Verwenden Sie stattdessen, sudo dpkg --purgeum ein altes Linux-Image-Paket zu entfernen. Danach verwenden Sie sudo apt-get -f install, um die defekte Abhängigkeit zu beheben.
Jarno
4
Obwohl das System manchmal so voll sein kann, dass selbst dpkg nicht funktionieren kann. Aber rmkann dann verwendet werden.
Jarno
66

In meinem Fall konnten die aptBefehle und der dpkgBefehl nicht beendet und nicht entfernt werden. Das automatische Update war bei der Installation fehlgeschlagen 2.6.32-56-server.

Mein erster Schritt war, den zu verwendenden Raum zu identifizieren,

cd /boot
du -sk *|sort -n

Ich hatte ungefähr 30 Kernel und unterstützende Dateien.

Ich habe einen ausgeführt uname -a, um den laufenden Kernel zu erhalten. Ich habe festgestellt, dass ich mich auf einer Linux-Alternative befand, 2.6.32-43-serverund habe eine tarvon 6 Versionen ausgeführt, die nicht ausgeführt wurden und alt waren.

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

Ich habe dann eines rm -rfvon dem gemacht, was ich gesichert hatte:

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

Ich zeige diese Befehle als Beispiele, Sie müssen entscheiden, mit was Sie für Ihre Situation arbeiten werden.

Jetzt, wo ich etwas Platz hatte /boot, konnte ich rennen

apt-get -f install 

So bereinigen Sie die fehlgeschlagene Installation von 2.6.32-56-server.

Ich habe dann eine

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

Dies gab mir Raum, um das, was ich gesichert hatte, zurückzusetzen.

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

Zum Aufräumen könnte ich dann laufen:

apt-get autoremove

Ich habe neu gestartet und bin jetzt auf die Verwendung von 4% von /boot.

AG Russell
quelle
Dies war für mich von allen Vorschlägen am hilfreichsten. Vielen Dank!
Joshua F. Rountree
Das Entfernen von Dateien aus / boot bringt apt und dpkg schrecklich zum Erliegen, da ihre Installations- und Entfernungsskripte HART versagen, wenn die Dateien fehlen. Ich verstehe nicht, wie Sie das zum Laufen gebracht haben.
FizxMike
20

Sie können dpkganstelle von apt-getältere Kernel entfernen:

sudo dpkg -r linux-image-3.2.0-29-generic
Psusi
quelle
Vielleicht gibt es Gründe dafür, aber der Vorschlag von @ mreiter hat für mich funktioniert, als dies nicht der Fall war (dieser wurde auf Ubuntus IRC-Support-Kanal vorgeschlagen.)
Aaron Hall
3
@AaronHall Diese Antwort enthält einfach den Hauptteil der Antwort von mreiter (die letzte Zeile) und ist viel kürzer, da sie nicht die Bereinigung von Headern abdeckt (was im Fall einer separaten /bootPartition nicht hilft ).
Melebius
9

Mir ist aufgefallen, dass sich noch einige Dateien der alten Versionen im Boot-Verzeichnis befinden:

$ ls /boot
vmcoreinfo-2.6.31-17-server

Und der Paketmanager würde die alten Versionen auflisten:

dpkg -l | grep linux-image

Ich habe daher diesen Befehl verwendet ( autoremovewürde auch neuere Bilder entfernen, die ich nicht entfernen möchte)

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

Ich hatte noch ein paar Überschriften übrig:

dpkg -l | grep linux-headers

Also habe ich das gemacht:

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

Schließlich gab es noch ein Paket, das ich mit apt-get purge nicht entfernen konnte:

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

Quelle: Entfernen Sie ein Paket, das von dpkg als rc markiert wurde

sudo dpkg --purge linux-image-2.6.28-11-server
mreiter
quelle
3

Überprüfen Sie die Verwendung von /var/tmpmit du -sh /var/tmp/. Alle Dateien in diesem Ordner können gelöscht werden, um Platz zu schaffen.

Sie können dann Folgendes ausführen, um die alten Kernel zu entfernen:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub
Tertius
quelle
Was hat /var/tmpdas mit alten Kerneln zu tun? Und es ist nicht immer sicher, alles in /var/tmp... zu löschen
fosslinux
3

Das habe ich benutzt:

sudo apt-get autoremove linux-image-xxxx

Tun Sie dies für alle alten Kernel und behalten Sie nur die letzten beiden bei.

Wenn Sie die alten Kernel automatisch entfernen und GRUB aktualisieren möchten, lesen Sie Folgendes: Ubuntu-Dokumentation

Samer
quelle
2
Dies sollte die akzeptierte Antwort sein. Wenn es Ihnen nichts ausmacht, alles zu bereinigen, müssen Sie nicht einmal das Linux-Image angeben.
CyberEd
2

Ich fand, dass das einzige, was für mich funktionierte, die Verwendung von Aptitude war.

sudo aptitude

Wenn es sich dann öffnet, sagt es normalerweise etwas über nicht erfüllte Abhängigkeiten auf der Unterseite. Sie können den Buchstaben gdrücken, um mit der vorgeschlagenen Entfernung fortzufahren. Sie werden zu einer Seite weitergeleitet, auf der aufgelistet wird, was passieren wird.

-Neben den defekten Kernels sollte ein Minus stehen . Wenn Sie gerneut drücken, werden die beschädigten Kernel entfernt. Drücken Sie, qum den Vorgang zu beenden. Dann sollten Sie in der Lage sein, sudo apt-get autoremovedie alten Kernel zu entfernen und Speicherplatz freizugeben.

Matthew Swanson
quelle
1
Dies ist die einzig gültige Antwort. Alle anderen Antworten funktionierten nicht, da der Paketmanager ein Paket installieren wollte, bevor es entfernt werden konnte.
Machineaddict
2

Sie können nicht auf Pakete einwirken, aber Sie können auf andere Dateien einwirken. Sehen Sie sich zuerst Ihren privaten Ordner an und prüfen Sie, ob Sie etwas löschen können. Wenn nicht, versuchen Sie, eine große Anzahl von Dateien auf eine andere Partition (oder ein Flash-Laufwerk) zu verschieben, und versuchen Sie sudo apt-get install -fdann, die Probleme mit den Paketabhängigkeiten zu dpkgbeseitigen (höchstwahrscheinlich haben Sie eine .deb-Datei installiert). Entfernen Sie dann alle alten Kernel. Wenn Sie mindestens 10 MB sicher haben, löschen Sie nicht benötigte Software oder Dateien.

ζ--
quelle
5
Der Home-Ordner befindet sich nicht in / boot
Thorbjørn Ravn Andersen
1

Verwenden Sie den Synaptic Package Manager. Wählen Sie einfach das zu entfernende Paket aus und Sie werden aufgefordert, auch Pakete zu entfernen, die davon abhängen. Nach meiner Erfahrung kommen Kernelpakete immer in Gruppen von zwei (oder mehr, je nachdem, wie Sie zählen), die voneinander abhängig sind. Mit dem Filter "Lokal / Veraltet" können Sie in der Regel alte schnell finden.

Wegko
quelle
2
ZB auf einem (Nur-Text-) Server gibt es kein Synaptic. Also keine wirklich tragfähige Lösung für Server.
Nerdoc
1

Ich habe von Zeit zu Zeit mit diesem Problem gekämpft und immer noch keine Lösung gefunden, die wirklich den ganzen Job erledigt. In einigen Fällen führt das Entfernen alter Kernel zu Abhängigkeiten, die mich davon abhalten, etwas zu entfernen, und ich musste die Kernel manuell aus / boot entfernen. Ich wollte jedoch immer noch, dass ich den ganzen Job erledige, da ich mir vorstelle, dass die manuell gelöschten Kernel irgendwo protokolliert werden und zukünftige Probleme verursachen, wenn etwas Dateien als vermisst meldet, weil ich rm -rf für Dateien tue.

Also habe ich dieses Skript geschrieben, basierend auf vielen Google-Vorschlägen, die keine weitere Installation von etwas erfordern. Das Skript wurde einige Male geändert, um einige meiner "unerwarteten" Situationen zu unterstützen. Wenn Sie dies beispielsweise auf einem Himbeer-Pi ausführen, ist update-grub wahrscheinlich nicht vorhanden. In einigen Fällen steckten die Server beim Ausführen der letzten Updater bei IPv6 fest, wo einige Sites nicht erreichbar waren.

Das Skript findet heraus, ob es Kernel, die aufgrund von Abhängigkeits-Builds vollständig blockiert sind, zwangsweise entfernen muss, oder ob es dies auf die "richtige" Weise kann.

#!/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
Tomas Tornevall
quelle
Hast du linux-purge ausprobiert ? Derzeit gibt es das Force IPv4-Ding jedoch nicht.
jarno
Ihr Skript würde Linux-Image-generische in meinem System löschen, was schlecht ist.
Jarno
Sie werden aus irgendeinem Grund zurückgesetzt, wenn die alten Kernel aufgeräumt wurden. Zumindest war das bei mir so, seit ich dieses Skript erstellt habe. Dieses Skript verwende ich jedoch, wenn es keine anderen Optionen gibt, um fortzufahren. Normalerweise kümmern sich die Upgrades selbst darum, aber in diesem Moment, wenn nichts anderes funktioniert, kann dies eine gute Option sein, da normalerweise mehr Kernel nach der Bereinigung eingerichtet werden. Ob dies gut oder schlecht ist, ist wahrscheinlich diskutierbar.
Tomas Tornevall
0

Einfach loslaufen sudo apt-get -f autoremovelöste mein Problem.

Forzagreen
quelle
2
Hatten Sie 100% Speicherplatz / Boot-Nutzung?
fosslinux
Wenn ich meine Überwachungshistorie betrachte, schien dies nicht der Fall zu sein. PS: Ich bin auf Vagrant xenial und mein Boot-Dateisystem /dev/sda1ist auf/
forzagreen 29.04.18
0

Führen Sie Folgendes aus:

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

Quelle: Ich bekomme diesen Fehler nach dem Upgade. bitte hilf

Ardi Nusawan
quelle
Was macht sudo dpkg-reconfigure -a das? Auf Ubuntu 16 heißt es unbekannte Option -a
Shivam Kotwalia
Bei dieser Frage können aptKernelpakete nicht entfernt werden, da der Entfernungsprozess selbst Dateien in generiert /boot, die bereits voll sind. Deshalb apt-get autoremovescheitert. Die Frage, die Sie suchen, ist askubuntu.com/q/142926/158442 , die bereits autoremoveaufgeführt ist.
Muru
@muru Ich habe es gerade gepostet, weil es den Trick gemacht hat, für mich: D
Ardi Nusawan
Ich bin mir sicher, dass dies der Fall war. Ich sage, dass Ihr Problem die andere Frage gewesen wäre, nicht diese.
muru
@muru oh ok habs verstanden: D
Ardi Nusawan
0

Ich habe ein paar Artikel über / boot gesehen, die voll sind und die nicht durch das Löschen alter Linux-Kernel durch dpkg behoben werden, da apt-get -f install oder apt-get -f autoremov e die Kernel neu installiert.

Zumindest in meinem Fall mussten die signierten und zusätzlichen Pakete ebenfalls entfernt werden - die Kernel waren Abhängigkeiten für diese Pakete, sodass sie möglicherweise neu installiert wurden. Im Allgemeinen sollten verwandte Kernelpakete vor dem Aufruf von 'install' gelöscht werden. Wenn Sie direkt nach dem Löschen versucht haben , ein Upgrade zu erhalten , sollte in der Fehlermeldung angegeben sein, welche Pakete eine nicht erfüllte Abhängigkeit von dem Kernel hatten, den Sie gerade gelöscht haben.

In meinem Fall hat die folgende Taktik funktioniert:

#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
Rhandi Martin
quelle
0

Installieren Sie das Linux-Purge- Tool wie folgt .

Dann starte im Terminal:

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

Entfernen Sie dann die Kernel weiter, indem Sie z

sudo linux-purge --keep 1 --choose

Extra:

Wenn Sie linux-purge für die unbeaufsichtigte Entfernung des Kernels verwenden möchten, anstatt dafür unbeaufsichtigte Upgrades zu verwenden, sollten Sie das Entfernen nicht verwendeter Inhalte deaktivieren, indem Sie /etc/apt/apt.conf.d/50unattended-upgrades bearbeiten und einen systemd-Dienst einrichten ausführen

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

wann immer du willst.

jarno
quelle