Frage Wie gebe ich mehr Speicherplatz in / boot frei?


Meine /boot Die Partition ist fast voll und ich erhalte jedes Mal eine Warnung, wenn ich mein System neu starte. Ich habe bereits alte Kernel-Pakete gelöscht (linux-headers ...), tatsächlich habe ich das getan, um eine neuere Kernel-Version zu installieren, die mit den automatischen Updates geliefert wurde.

Nach der Installation dieser neuen Version ist die Partition wieder fast voll. Was kann ich sonst noch löschen? Sind den alten Kernel-Images einige andere Dateien zugeordnet?

Hier ist eine Liste von Dateien, die auf meinem sind /boot Partition:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Momentan verwende ich die 3.0.0-14-generic Kernel.


524
2017-12-22 10:06


Ursprung


Es ist erwähnenswert, dass nicht jede Ubuntu-Installation eine separate / boot-Partition hat - oft wird es nur eine große Partition sein. Diese Antwort gilt für diejenigen, die eine separate / boot-Partition haben. Diejenigen, die LVM- oder "Full Disk" -Verschlüsselung verwenden, benötigen ein separates / boot, andernfalls kann es optional sein. - thomasrutter
Wenn jemand anderes das selbe Problem hat wie ich: Nachdem / boot keinen Platz mehr hat, wird "apt-get upgrade" fehlschlagen, wenn initrd-Dateien für die installierten Kernel neu erstellt werden oder das update-initramfs-Skript glaubt, dass sie installiert sind Inhalt von / var / lib / initramfs-tools. In dieser Situation kann man alte Kernel nicht mit apt-get entfernen, da die fscking / boot-Partition auf dem Gerät keinen Platz mehr hat. Man kann dies mit "dpkg -P" machen, gefolgt von der Bereinigung des entsprechenden Eintrags in / boot (um Speicherplatz freizugeben) und / var / lib / initramfs-tools (das initrd-Bild wird nicht erzeugt). - wojci
Ein wichtiger Punkt für korrekte Antworten ist, dass sie Ihnen sagen, dass Sie die Pakete enthält die älteren Versionen des Kernels. Viele Webseiten, die dieses Problem beheben, empfehlen direkt das Entfernen des Dateien in der / boot-Partition; Das kann eine Zeitlang funktionieren, aber Sie können eventuell ein Paket aktualisieren, das Dateien neu erstellt, die für die Kernel-Versionen fehlen, die Pakete enthalten, wodurch Sie keinen Speicherplatz mehr haben. - kgrittn
help.ubuntu.com/community/RemoveOldKernels - jarno


Antworten:


Du hast viele ungenutzte Kernel. Entferne alle außer den letzten Kernen mit:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Dies ist eine Abkürzung für:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Entferne den linux-image-x.x.x-x Paket wird auch entfernt linux-image-x.x.x-x-generic.

Die Header werden in installiert /usr/src und werden beim Aufbau von Out-Tree-Kernel-Modulen (wie dem proprietären nvidia-Treiber und der virtualbox) verwendet. Die meisten Benutzer sollten diese Header-Pakete entfernen, wenn das entsprechende Kernel-Paket (linux-image-*) es ist nicht installiert.

Führen Sie Folgendes aus, um alle installierten Kernel aufzulisten:

dpkg -l linux-image-\* | grep ^ii

Ein Befehl zum Anzeigen aller Kernel und Header, die entfernt werden können, mit Ausnahme von Strom laufender Kernel:

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

Es wählt alle Pakete aus, die mit beginnen linux-headers-<some number> oder linux-image-<some number>, druckt die Paketnamen für installierte Pakete und schließt dann die aktueller geladener / laufender Kernel (nicht unbedingt die neueste Kernel!). Dies passt in die Empfehlung, einen neueren Kernel zu testen, bevor ältere, bekannt gewordene Kernel entfernt werden.

Nachdem Sie Kernel aktualisiert und neu gestartet haben, können Sie alle anderen Kernel mit folgenden Methoden entfernen:

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

600
2017-12-24 14:34



Fantastische Antwort. Eine weitere Information würde helfen: Wie kann man (mit Sicherheit) sagen, welchen der Kernel du verwendest? Vermutlich kann man nicht einfach davon ausgehen, dass es der letzte ist ... Bearbeiten: Und es sieht aus wie die Antwort ist uname -a. Wahrscheinlich am besten, um sicherzustellen, dass Sie keinen ausstehenden Neustart-Neu-Installation-Kernel ausstehend haben (wie ich es getan habe, aber ich bemerkte das Missverhältnis zwischen uname -a und der "neueste" Kernel). - T.J. Crowder
@freddyb Fertig. Beachten Sie, dass die Befehle gedruckt / entfernt werden andere Kernel als der geladene / gebootete. - Lekensteyn
Wenn die apt-get-Bereinigung wegen nicht erfüllter Abhängigkeiten fehlschlägt, können Sie dem Ratschlag unter folgen askubuntu.com/questions/171209/ ... - svandragt
Sehr gründliche Antwort und funktioniert immer noch ... und immer noch benötigt im Jahr 2014. Etwas lächerlich, dass es immer noch nicht automatisch von den GUI-Tools gemacht wird. - allprog
@ byf-ferdy Der Kernel ist ein essentieller Teil des Betriebssystems, wenn die neueste Version irgendwie nicht vollständig mit Ihrer Hardware funktioniert, dann können Sie immer noch eine andere wählen, von der aus gestartet werden kann. Ein nettes Feature wäre wahrscheinlich etwas, das alle automatisch installierten Kernel entfernt, die älter als ein Monat sind (mit Ausnahme der letzten zwei). - Lekensteyn


Ihre Startpartition ist voll. Da es sich um ein Kernel-Update handelt, werden diese Dateien in die Boot-Partition kopiert, so dass Sie sie reinräumen müssen. Hier ist ein Blogeintrag Das zeigt Ihnen, wie Sie die alten Kernel-Images mit einem Befehl löschen. Ich werde eine grundlegende Zusammenfassung der Methode geben. Verwenden Sie diesen Befehl, um die aktuelle Version Ihres Kernels auszudrucken:

uname -r

Verwenden Sie dann diesen Befehl, um alle installierten Kernel auszudrucken, die nicht der neueste Kernel sind:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Stellen Sie sicher, dass Ihr aktueller Kernel nicht auf dieser Liste ist. Beachten Sie, dass dies die Mehrheit des letzten Befehls ist (unten). Um diese alten Kernel zu deinstallieren und zu löschen, sollten Sie diese Argumente an folgende Pipes übergeben:

sudo apt-get -y purge

Jetzt können wir alles tun, was wir wollen, indem wir die letzten beiden Befehle in dieses unheilige Chaos einbinden:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Und dieser eine Befehl wird sich um alles für dich kümmern. Ich werde bestätigen, dass dies perfekt funktioniert, aber niemandem im Internet trauen. :) Für weitere Informationen gibt der Blog-Beitrag eine sehr gute Erklärung, was jeder Teil des Befehls tut, also lesen Sie es durch, damit Sie zufrieden sind, dass es tut, was Sie tun sollen.


200
2018-02-21 03:38



Das hat super funktioniert, danke. - Michael Durrant
Dies entspricht auch linux-libc-dev: amd64 - Frederick Nord
Was verursacht die unbeabsichtigte Entfernung von "linux-libc-dev: amd64"? - ConfusedStack
@FrederickNord danke für die heads-ups. Das Problem wurde behoben. Es hätte einige Schwierigkeiten bei der Erstellung von c-Programmen verursacht. - dward
Der Befehl hört sich gut an, aber wenn ich ihn ausführe, erhalte ich denselben Fehler, den ich bekomme, wenn ich etwas installieren will und es nicht kann, weil der Bootvorgang voll ist: --------------- ----------- Die folgenden Pakete haben noch nicht abgeschlossene Abhängigkeiten: linux-image-extra-4.2.0-27-generic: Hängt davon ab: linux-image-4.2.0-27-generic aber es geht nicht zu installieren linux-image-extra-4.2.0-30-generic: Hängt davon ab: linux-image-4.2.0-30-generic, aber es wird nicht installiert - Alex


sudo apt-get autoremove

Dieser Befehl erledigt den Job automatisch.


94
2017-11-05 05:58



Wie der Name schon sagt, handelt es sich bei apt-get AUTOremove um einen automatisierten Vorgang, bei dem das System seine "bestmögliche Schätzung" anwendet, was Sie erreichen möchten. Es sollte nicht als Ersatz für die Verwaltung des Common-Sense-Systems verwendet werden. Das Problem mit diesem Ansatz: Wenn Sie (oder ein Update) ein Paket entfernen, das Teil dieser Abhängigkeitsliste ist, möchte die Funktion zum automatischen Entfernen alle anderen Pakete in der Abhängigkeitsliste entfernen, sodass Sie ein System ohne Arbeitsoberfläche (und manchmal auch sogar mit einem völlig kaputten System). - Rinzwind
Referenz: 1 vieler Quellen für diesen Kommentar oben: linuxquestions.org/questions/debian-26/... - Rinzwind
Wenn linux-image-generic installiert ist und neue Kernel nicht explizit installiert wurden, werden alte Kernel entfernt. Der gesunde Menschenverstand besteht darin, keine Änderungen am System zu akzeptieren, ohne sie vorher zu lesen. Wenn der gesunde Menschenverstand vor der Verwendung dieses Befehls verwendet wurde, wird es keine Probleme geben. - mchid
@Rinzwind - Dieser Befehl hat 250 MB meines Speicherplatzes geleert, indem ich alte 'linux headers' entfernt habe - Chinmaya B
Autoremove funktioniert, wenn verwendet Vor ein Zustand außerhalb des Platzes existiert. Sobald apt jedoch nicht mehr genügend Speicherplatz hat und abbricht (und der Benutzer das Problem schließlich bemerkt), ist es zu spät, um autremove oder eine andere apt-basierte Lösung auszuführen. Wenn das bei Ihnen der Fall ist, probieren Sie eine der dpkg-basierten Lösungen aus. - user535733


Mit dem Synaptic Package Manager können alte Kernel-Images einfach ausgewählt und entfernt werden. Screenshot of Synaptic Package Manager

Wenn Sie Synaptic noch nicht installiert haben:

sudo apt-get install synaptic

Starten Sie die Anwendung und wählen Sie die angezeigten Optionen.

Sie sollten in der Lage sein, alle "linux-" Pakete mit der Version "2.6.x" hervorzuheben, wobei x entsprechend den Dateien in Ihrem / boot-Ordner zwischen 31 und 38 liegt.

Klicken Sie mit der rechten Maustaste auf jedes dieser Linux-Pakete und wählen Sie die Option "Zum vollständigen Entfernen markieren". Klicken Sie abschließend auf die Schaltfläche zum Anwenden. Dadurch werden alle Dateien und alle zugehörigen Dateien entfernt. Ihre /boot Ordner sollte jetzt ein bisschen aufgeräumter sein.


38
2017-12-24 14:34



Ich bin am 14.04. Ich habe diese Situation in der Vergangenheit über die Befehlszeile behandelt, aber ich entschied mich, diese Methode heute zu versuchen ... für mich befanden sich meine Linux-Images unter installiert (manuell), nicht installiert (lokal oder veraltet) - Ryan
Ach nein. Ich kann Synaptic nicht installieren, da kein Speicherplatz vorhanden ist /boot! - John McGehee
@JohnMcGehee fsck und trennte sollte dieses Problem für Sie lösen. - FlipMcF


Vielen Dank für Ihr detailliertes Schreiben Ihres Problems, das hat mich in die richtige Richtung gebracht. Obwohl es nützlich ist, vorherige Kernel-Dateien zu behalten, können Sie alle auf einmal entfernen.
So entfernen Sie alle nicht verwendeten Linux-Kernel-Header, Bilder und Module

Fertig über die Befehlszeile. Wenn Sie dies über Remote tun, verwenden Sie etwas wie WINSCP, um eine Terminalsitzung zu öffnen und sie einfach einzufügen, funktioniert sehr gut.

Hier ist es vom Artikel Link kopiert, ich schlage vor, Sie lesen den vollständigen Artikel:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

24
2018-06-01 12:53





Dies ist eine neue Antwort auf eine alte Frage, aber eine einfache Möglichkeit, dieses Ding (und mehr) zu reinigen, ist die Installation Ubuntu Tweak. Zu es installieren:

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

dann können Sie Ubuntu Tweak ausführen, gehen Sie zum "Hausmeister" Tab, und von hier aus ist es eine Frage von drei Klicks:

Ubuntu tweak janitor for old kernels

Es ist besser, den letzten Kernel (man kann nie wissen) oder einen bekannten funktionierenden Kernel für die Sicherheit zu verlassen; aber das ist leicht anpassbar.

Sie können das gleiche Werkzeug verwenden, um eine Menge Dinge zu säubern --- denken Sie daran, dass das System, wenn Sie den Thumbnail-Cache oder den TB-Cache säubern, diese neu erstellen muss, wenn sie benötigt werden.


22
2017-11-25 13:11



Ich habe versucht, Ubuntu Tweak zu installieren und auch auf die Repository-Website zu gehen. Es sagt, es ist nur für 13.10 und vorher. Hast du eine aktualisierte Version für 15.04? - JayCouture.com
@ JayCouture.com Die Version auf der Website ist für 14.04 (die "für 13.10 und davor" ist ein Link zu älteren Versionen). Ich ignoriere, wenn es eine Version für 14.10 oder 15.04 gibt. - Rmano


Ich konnte das Problem beheben, indem ich dpkg um die Pakete direkt zu entfernen. Obwohl die Pakete noch aufgelistet sind dpkg -l, die Dateien werden entfernt /bootFreiraum schaffen.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Danach, apt-get -f install reparierte meine Abhängigkeitsprobleme, und alles war gut mit der Welt.

Ich werde diese Antwort jedoch nicht akzeptieren, da ich immer noch wissen muss, ob ich meine erhöhen sollte /boot Größe oder etwas anderes tun.


17
2017-12-03 18:47



Sie sollten entweder keine separate / boot-Partition haben, oder Sie sollten ihre Größe erhöhen, wenn 100mb zu klein ist. - psusi
Danke, ich lösche über: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
und sudo dpkg --remove linux-image-3.5.0-28* für das Bild, geprüft über df -h - TiloBunt