Boot-Partition voll, alte Kernel können nicht gelöscht werden. Gebrochene Pakete

7

Es tut mir leid, dass ich gefragt habe, was wahrscheinlich wirklich einfach ist, aber ich google jetzt seit einer Woche und habe viele Dinge ohne Erfolg ausprobiert.

Zu Beginn wird bei jedem Start ein Popup-Fenster angezeigt, in dem angegeben wird, dass meine / boot-Partition voll ist, und der Synaptic Manager gibt an, dass linux-image-generic fehlerhaft ist, aber keine von beiden neu installiert werden kann (linux-image-extra- 3.13.0-54-generic und Linux-Image-generic).

Mein Terminal fordert mich auf, install -f zu verwenden, um Probleme zu beheben, also habe ich das versucht, und dies ist, was es zurückgegeben hat. Leider lerne ich noch und konnte den Code nicht knacken. Ich hätte gerne Hilfe

aksel@aksels-PC:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
 linux-image-3.13.0-54-generic
Suggested packages:
 fdutils linux-doc-3.13.0 linux-source-3.13.0 linux-tools
The following NEW packages will be installed:
 linux-image-3.13.0-54-generic
0 upgraded, 1 newly installed, 0 to remove and 344 not upgraded.
5 not fully installed or removed.
Need to get 0 B/14,7 MB of archives.
After this operation, 32,8 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 431129 files and directories currently installed.)
Preparing to unpack .../linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb ...
Done.
Unpacking linux-image-3.13.0-54-generic (3.13.0-54.91) ...
dpkg: error processing archive /var/cache/apt/archives/linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb (--unpack):
 cannot copy extracted data for './boot/vmlinuz-3.13.0-54-generic' to '/boot/vmlinuz-3.13.0-54-generic.dpkg-new': failed to write (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.13.0-54-generic /boot/vmlinuz-3.13.0-54-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.13.0-54-generic /boot/vmlinuz-3.13.0-54-generic
Errors were encountered while processing:
 /var/cache/apt/archives/linux-image-3.13.0-54-generic_3.13.0-54.91_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Dooblieve
quelle

Antworten:

8

Mit Linux-Purge

Zu diesem Zweck habe ich ein Hilfsskript erstellt. Es heißt linux-purgeund seine Projektseite befindet sich hier in Launchpad.net. In den Ankündigungskarten gibt es Installationsanweisungen hier .

In diesem speziellen Fall würden Sie ausführen

sudo linux-purge --fix

Manuelle Methode

Alternativ finden Sie in der Communiy Wiki-Hilfe, zu der ich beigetragen habe (als jarnos) , Anweisungen zum manuellen Ausführen der Aufgabe .

Wie auch immer, hier sind meine manuellen Anweisungen als Archiv:

Entfernen Sie zuerst alle verbleibenden temporären Dateien aus früheren Kernel-Updates.

sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*

(Möglicherweise liegt ein Fehler in Ubuntu 16.04 und älter vor.)

Listen Sie die erfolgreich installierten Kernel mit Ausnahme des gebooteten Kernels mit dem folgenden Befehl auf:

dpkg-query -W -f='${Status} ${Package}\n' | awk '/^[^ ]+ ok installed linux-image-[0-9]+/{print $4}' | grep -Fv $(uname -r)

Löschen Sie die Datei initrd.img eines nicht benötigten Kernels (aufgrund eines Fehlers ). Hier ist die ausgewählte Kernel-Version 4.2.0-23-generic:

sudo update-initramfs -d -k 4.2.0-23-generic

Löschen Sie den Kernel durch

sudo dpkg --purge linux-image-extra-4.2.0-23-generic linux-image-4.2.0-23-generic

um etwas Speicherplatz in / boot freizugeben. Wenn der Befehl fehlschlägt, hängt ein installiertes Paket vom Kernel ab. Die Ausgabe von dpkg gibt den Namen des Pakets an. Spülen Sie es zuerst.

Sie können auch das entsprechende Header-Paket löschen

sudo dpkg --purge linux-headers-4.2.0-23-generic

und sogar das gemeinsame Header-Paket

sudo dpkg --purge linux-headers-4.2.0-23

wenn kein anderes Paket davon abhängt; Andernfalls schlägt der Befehl fehl, kann aber sicher ausgeführt werden.

Dann renne

sudo apt-get install -f

um die unterbrochene Abhängigkeit zu beheben. Wenn dies aufgrund unzureichenden Speicherplatzes fehlschlägt, müssen Sie einen anderen Kernel wie oben beschrieben entfernen.

Beachten Sie, dass möglicherweise immer noch zu viele Kernel in Ihrem System installiert sind. Jetzt sollten Sie jedoch in der Lage sein, die zusätzlichen zu löschen, indem Sie z. B. sudo apt-get purgedie Namen der Kernel-Pakete gefolgt.

jarno
quelle
1
+1 purge-old-kernels, wodurch viel mehr Kontrolle darüber möglich ist, was aufbewahrt wird. ZB um NKernel zu behalten sudo purge-old-kernels --keep N.
mbdevpl
@mbdevpl ist jetzt purge-old-kernelsveraltet. Für mehr Kontrolle empfehle ich die Verwendung linux-purge. Bitte beachten Sie die aktualisierte Antwort.
Jarno
0

Der schnellste und einfachste Weg, alte Kernel zu entfernen, ist:

sudo apt-get autoremove

Dadurch wird normalerweise die Anzahl der installierten Kernel auf zwei oder drei reduziert. Führen Sie dies nach jedem Software-Update durch, bei dem ein neuer Kernel installiert wird, damit das Problem nicht erneut auftritt.

Rod Smith
quelle
1
Nun, das ist wahr, wenn er ein paar Kernel installiert hat, aber unter bestimmten Umständen wird "autoremove" keinen alten Kernel entfernen.
JohnRB
Manchmal ja; aber meistens funktioniert es. Es ist ein Befehl und es lohnt sich, ihn zuerst zu versuchen.
Rod Smith
1
Ich habe das früher versucht, leider hat es nichts getan
Dooblieve
In diesem Fall sollten Sie den komplexeren Ratschlägen anderer folgen. Wie groß ist Ihre /bootPartition? (Sie können dies durch Eingabe lernen df -h /boot.) Ich empfehle im Allgemeinen eine /bootPartition von 500 MB oder so. Wenn es kleiner als etwa die Hälfte ist, füllt es sich zu schnell. Es ist möglich, die Größe von Partitionen zu ändern, dies birgt jedoch ein gewisses Risiko, insbesondere wenn Sie den Startpunkt verschieben müssen.
Rod Smith
Downvoted, da die Lösung in diesem speziellen Fall nicht funktioniert. Das automatische Entfernen funktioniert auch nur für "automatisch" installierte Kernel (und andere Pakete). Es funktioniert nicht für Kernel, die (manuell) mithilfe von Software-Updates in Thrusty installiert wurden (siehe Fehler Nr. 1492709) .
Jarno
-1

Nun, es ist nicht überraschend, dass die apt-get-Funktionen fehlschlagen, wenn Ihre / boot-Partition voll ist. Sie müssen nur Speicherplatz in Ihrem / boot freigeben, Sie können dies grafisch oder über Terminal / ssh tun, was auch immer Sie möchten. Sie können nicht benötigte Pakete löschen (nicht entfernen!), Die Speicherplatz beanspruchen (Kernel seit Ihrem / boot-Teil), oder Sie können Ihre / boot-Partition erweitern, um sie größer zu machen, und dann den Befehl -f erneut ausführen. Wenn das alles eine andere Sprache als Sie ist, benötige ich weitere Informationen, um Ihnen genaue Befehle zu geben, die Sie ausführen müssen, um dies zu tun.

  1. Listen Sie Ihre installierten Kernel mit: dpkg -l | grep linux-image-
  2. Wie sind Systempartitionen angeordnet (was gibt die cat /etc/fstabAusgabe aus)?
  3. Listen Sie Ihren Speicherplatz mit dem df Befehl : auf .

Hier ist ein Link, der beim Entfernen alter Kernel helfen soll

JohnRB
quelle
Überprüfen Sie den Link. In der Zwischenzeit ist hier die Ausgabe Ihres zweiten Punktes: i.imgur.com/wa0HL6f.png
Dooblieve
Du behebst das. Entschuldigung, ich hatte keine Zeit und habe deine Antwort nicht gesehen. Ich hoffe es, denn Sie haben hier eine ganze Liste von Antworten. lol Wenn nicht, lass es mich wissen und ich werde deine Hand halten und gehen, du hast sie geworfen.
JohnRB
-1

Auf Ihrer Boot-Partition ist nicht mehr genügend Speicherplatz vorhanden. Das ist der Grund, warum apt-get fehlschlägt, es sagt es Ihnen sogar

Kein Apport - Bericht verfasst , da die Fehlermeldung eine zeigt Platte voll Fehler

Entfernen Sie alte Kernel vor der (Neu-) Installation, lassen Sie den neuesten und einen vorherigen.

#dpkg -l | grep linux-image-

listet alle installierten Kernel auf

sudo apt-get autoremove linux-image-##fill-in-with-result-from-previous-command##

wird sie entfernen

$apt-get install --reinstall linux-image-generic

werde den Rest erledigen

Offizielle Ubuntu-Seite zum Entfernen alter Kernel

czapa.ols
quelle
1
apt-getweigert sich, etwas zu entfernen, da der letzte Kernel, den er zu installieren versuchte, nicht passte /bootund nicht erfüllte Abhängigkeiten zurückblieb. Diese Abhängigkeiten können aus Platzgründen nicht installiert werden, und wirklich alte Kernel können aufgrund nicht erfüllter Abhängigkeiten in der globalen Paketliste nicht installiert werden. :(
Ben Voigt
1
versuchen Sie dies:#dpkg -l | grep linux-image- #dpkg --force-all -P linux-image-##fill-in-with-result-from-previous-command##
czapa.ols
Ja, dpkg kann immer noch Dinge entfernen, selbst wenn apt-get bei der Abhängigkeitsauflösung hängen bleibt.
Ben Voigt