Wie schaffe ich mehr Speicherplatz in / boot?


563

Meine /bootPartition ist fast voll und ich erhalte jedes Mal eine Warnung, wenn ich mein System neu starte. Ich habe bereits alte Kernelpakete (Linux-Header ...) gelöscht. Eigentlich 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 fast wieder voll. Was kann ich sonst noch löschen? Gibt es noch andere Dateien, die mit den alten Kernel-Images verknüpft sind?

Hier ist eine Liste der Dateien, die sich auf meiner /bootPartition befinden:

:~$ 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

Derzeit verwende ich den 3.0.0-14-genericKernel.


5
Erwähnenswert ist, dass nicht jede Ubuntu-Installation eine separate / boot-Partition hat - oft ist es nur eine große Partition. Diese Antwort gilt für diejenigen, die über eine separate / boot-Partition verfügen. Diejenigen, die LVM oder "Full Disk" -Verschlüsselung verwenden, benötigen ein separates / boot, andernfalls kann es optional sein.
Thomasrutter

4
Wenn jemand das gleiche Problem wie ich hat: Nach / boot ist kein Speicherplatz mehr verfügbar. "Apt-get upgrade" schlägt fehl, wenn initrd-Dateien für die installierten Kernel neu generiert werden oder wenn das Skript update-initramfs nach Ansicht des Herstellers installiert wird Inhalt von / var / lib / initramfs-tools. In dieser Situation kann man alte Kernel nicht mit apt-get entfernen, da die fscking / boot-Partition keinen Platz mehr auf dem Gerät hat. Dies kann mit "dpkg -P" geschehen, gefolgt von der Bereinigung des entsprechenden Eintrags in / boot (um Speicherplatz freizugeben) und / var / lib / initramfs-tools (das initrd-Image wird nicht generiert).
Wojci

3
Ein wichtiger Punkt für korrekte Antworten ist, dass Sie aufgefordert werden, die Pakete zu entfernen, die die älteren Versionen des Kernels enthalten. Viele Webseiten, die dieses Problem beheben, empfehlen, die Dateien in der / boot-Partition direkt zu entfernen . Das kann eine Weile dauern, aber Sie können eventuell ein Paket aktualisieren, das die fehlenden Dateien für die Kernelversionen mit Paketen neu erstellt, wodurch Ihnen der Speicherplatz ausgeht.
Kgrittn

Antworten:


629

Sie haben viele unbenutzte Kernel. Entfernen Sie alle bis auf den letzten Kernel 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

Das Entfernen des linux-image-x.x.x-xPakets wird ebenfalls entfernt linux-image-x.x.x-x-generic.

Die Header werden in /usr/srcKernel-Modulen installiert und beim Erstellen von 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-*) nicht installiert ist.

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 des aktuell ausgeführten Kernels:

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, deren Namen mit linux-headers-<some number>oder beginnen linux-image-<some number>, druckt die Paketnamen für installierte Pakete aus und schließt dann den aktuell geladenen / ausgeführten Kernel aus (nicht unbedingt den neuesten Kernel!). Dies entspricht der Empfehlung, einen neueren Kernel zu testen, bevor ältere, bekannte Kernel entfernt werden.

Nach dem Upgrade des Kernels und dem Neustart, um ihn zu testen, können Sie alle anderen Kernel mit den folgenden Schritten 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]+//')")

16
Fantastische Antwort. Eine weitere Information würde helfen: Wie können Sie (sicher) feststellen, welchen Kernel Sie verwenden? Vermutlich kann man nicht einfach davon ausgehen, dass es das letzte ist ... Bearbeiten : Und es sieht so aus, als wäre die Antwort uname -a. Vermutlich am besten, um sicherzustellen, dass kein Neustart für die Installation eines neuen Kernels ansteht (wie ich es getan habe; ich habe jedoch die Nichtübereinstimmung zwischen uname -aund dem "neuesten" Kernel festgestellt ).
TJ Crowder

5
@freddyb Fertig. Beachten Sie, dass der Befehl andere Kernel als den geladenen / gebooteten ausgibt / entfernt .
Lekensteyn

9
Wenn die apt-get-Bereinigung aufgrund nicht erfüllter Abhängigkeiten fehlschlägt, können Sie den Ratschlägen unter askubuntu.com/questions/171209/…
svandragt

11
Sehr gründliche Antwort und funktioniert immer noch ... und wird auch 2014 benötigt. Ein bisschen lächerlich, dass es immer noch nicht automatisch von den GUI-Tools erledigt wird.
allprog

6
@ byf-ferdy Der Kernel ist ein wesentlicher Bestandteil des Betriebssystems. Wenn die neueste Version nicht vollständig mit Ihrer Hardware funktioniert, können Sie dennoch eine andere auswählen, von der aus Sie booten können. Eine nette Funktion wäre wahrscheinlich etwas, das alle automatisch installierten Kernel entfernt, die älter als ein Monat sind (mit Ausnahme der letzten beiden).
Lekensteyn

217

Ihre Bootpartition ist voll. Da es sich um ein Kernel-Update handelt, werden diese Dateien auf die Boot-Partition kopiert, sodass Sie eine Bereinigung durchführen müssen. Hier ist ein Blog-Beitrag , der Ihnen zeigt, wie Sie die alten Kernel-Images mit einem Befehl löschen können. Ich werde eine grundlegende Übersicht über die Methode geben. Verwenden Sie diesen Befehl, um die aktuelle Version Ihres Kernels auszudrucken:

uname -r

Verwenden Sie dann diesen Befehl, um alle von Ihnen installierten Kernel auszudrucken, die nicht Ihr neuester 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 steht. Beachten Sie, dass dies der größte Teil des endgültigen Befehls ist (siehe unten). Um diese alten Kernel zu deinstallieren und zu löschen, müssen Sie diese Argumente an folgende Adresse weiterleiten:

sudo apt-get -y purge

Jetzt können wir alles tun, was wir wollen, indem wir die letzten beiden Befehle zu diesem unheiligen Durcheinander kombinieren:

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 erledigt alles für Sie. Ich werde bestätigen, dass dies perfekt funktioniert, aber niemals jemandem im Internet vertrauen. :) Für weitere Informationen bietet der Blog-Beitrag eine sehr gute Erklärung dafür, was die einzelnen Teile des Befehls tun.


das passt auch zu linux-libc-dev: amd64
Frederick Nord

Was bewirkt die unbeabsichtigte Entfernung von "linux-libc-dev: amd64"?
ConfusedStack

@ FrederickNord danke für die Köpfe nach oben. Das wurde behoben. Es hätte einige Schwierigkeiten beim Kompilieren von C-Programmen verursacht.
Dward

9
Der Befehl hört sich gut an, aber wenn ich ihn ausführe, wird derselbe Fehler angezeigt, den ich erhalte, wenn ich etwas installieren möchte. Er kann nicht ausgeführt werden, da der Startvorgang voll ist: --------------- ----------- Die folgenden Pakete weisen nicht erfüllte Abhängigkeiten auf: linux-image-extra-4.2.0-27-generic: Hängt ab von: linux-image-4.2.0-27-generic, wird aber nicht ausgeführt zu installierendes linux-image-extra-4.2.0-30-generic: Hängt ab von: linux-image-4.2.0-30-generic, wird aber nicht installiert
Alex

109
sudo apt-get autoremove

Dieser Befehl erledigt die Arbeit automatisch.


7
Wie der Name schon sagt, handelt es sich bei apt-get AUTOremove um einen automatisierten Vorgang, bei dem das System "bestmöglich" errät, was Sie erreichen möchten. Es sollte nicht als Ersatz für die Verwaltung vernünftiger Systeme verwendet werden. Das Problem bei 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 haben, auf dem der Desktop nicht funktioniert (und manchmal auch nicht) auch bei einem komplett kaputten System).
Rinzwind

Hinweis: 1 von vielen Quellen für diesen Kommentar oben: linuxquestions.org/questions/debian-26/…
Rinzwind

7
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 diese zuerst zu lesen. Wenn vor der Verwendung dieses Befehls der gesunde Menschenverstand verwendet wurde, treten keine Probleme auf.
mchid

1
@ Rinzwind - Dieser Befehl hat 250 MB Speicherplatz geleert, indem alte "Linux-Header" entfernt wurden
Chinmaya B

3
Die automatische Entfernung funktioniert, wenn sie verwendet wird, bevor ein Platzmangel vorliegt. Sobald apt jedoch nicht mehr über genügend Speicherplatz verfügt und abgebrochen wird (und der Benutzer das Problem schließlich bemerkt), ist es zu spät, autremove oder eine andere apt-basierte Lösung auszuführen. Wenn dies bei Ihnen der Fall ist, probieren Sie eine der dpkg-basierten Lösungen aus.
user535733

40

Mit dem Synaptic Package Manager können alte Kernel-Images einfach ausgewählt und entfernt werden. Screenshot von 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 aus.

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

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 Übernehmen. Dadurch werden alle Dateien und alle zugehörigen Dateien entfernt. Ihr /bootOrdner sollte jetzt etwas aufgeräumter sein.


Ich bin am 14.04. Ich habe diese Situation in der Vergangenheit über die Befehlszeile gehandhabt, aber ich habe mich heute entschlossen, diese Methode auszuprobieren. Für mich befanden sich meine Linux-Images unter "Installiert" (manuell), "Nicht installiert" (lokal oder veraltet).
Ryan

8
Ach nein. Ich kann Synaptic nicht installieren, da kein Speicherplatz vorhanden ist /boot!
John McGehee

@JohnMcGehee fsck und parted sollten dieses Problem für Sie lösen.
FlipMcF

25

Vielen Dank für Ihren ausführlichen Beitrag zu Ihrem Problem. Dadurch bin ich in die richtige Richtung gegangen. Obwohl es nützlich ist, vorherige Kerneldateien beizubehalten, können Sie alle auf einmal entfernen. Lesen Sie hierzu den folgenden Beitrag:
So entfernen Sie alle nicht verwendeten Linux-Kernel-Header, Images und Module

Erledigt über die Kommandozeile. Wenn Sie dies per Fernzugriff tun, öffnen Sie mit WINSCP eine Terminalsitzung und fügen Sie sie einfach ein. Dies funktioniert sehr gut.

Hier ist es aus dem 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

23

Dies ist eine neue Antwort auf eine alte Frage, aber eine einfache Möglichkeit, diese Sache (und mehr) zu bereinigen, ist die Installation von Ubuntu Tweak . So installieren Sie es :

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 und zur Registerkarte "janitor" wechseln. Von hier aus sind es nur noch drei Klicks:

Ubuntu Tweak Hausmeister für alte Kernel

Es ist jedoch besser, aus Sicherheitsgründen den letzten Kernel (den Sie nie kennen) oder einen bekannten funktionierenden Kernel zu belassen. aber das ist leicht anpassbar.

Mit demselben Tool können Sie viele Dinge bereinigen. Denken Sie jedoch daran, dass das System sie bei Bedarf neu erstellen muss, wenn Sie den Miniatur- oder TB-Cache bereinigen.


Ich habe versucht, Ubuntu Tweak zu installieren und auch die Repository-Website aufzurufen. Es heißt, es ist nur für 13.10 und vor. Haben Sie eine aktualisierte Version für den 15.04?
JayCouture.com

@ JayCouture.com Die Version auf der Website ist für 14.04 (das "für 13.10 und früher" ist ein Link zu älteren Versionen). Ich ignoriere, ob es eine Version für 14.10 oder 15.04 gibt.
Rmano

19

Ich konnte das Problem beheben, indem ich dpkgdie Pakete direkt entfernte. Obwohl die Pakete weiterhin in aufgeführt sind dpkg -l, werden die Dateien entfernt /boot, um Speicherplatz freizugeben.

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 installbehoben meine Abhängigkeitsprobleme, und alles war gut mit der Welt.

Ich werde meine Antwort jedoch nicht akzeptieren, da ich immer noch wissen muss, ob ich mich /bootvergrößern oder etwas anderes tun soll.


Entweder sollten Sie zunächst keine separate / boot-Partition haben, oder Sie sollten die Partition vergrößern, da 100 MB zu klein sind.
Psusi

1
Danke, ich lösche über:sudo dpkg --remove linux-headers-3.5.0-28*
TiloBunt

2
und sudo dpkg --remove linux-image-3.5.0-28*für das Bild, überprüft überdf -h
TiloBunt

Danke, das hat mir auch geholfen. Ich habe ein paar alte Kernel entfernt ( nicht den, den ich gerade benutzte) und dann den gemacht apt-get -f install. Vergessen Sie auch nicht, später zu tun apt-get autoremove, um möglicherweise andere nicht benötigte zu entfernen.
Yajo

15

Sie können aufhören, eine separate / boot-Partition zu verwenden, dann haben Sie dort nicht mehr so ​​wenig Speicherplatz. Hängen Sie dazu die Partition aus, hängen Sie sie an einer anderen Stelle ein und kopieren Sie alle Dateien in das Verzeichnis / boot in Ihrer Root-Partition. Entfernen Sie dann den Eintrag aus / etc / fstab und installieren Sie grub erneut. Zum Beispiel (Sie müssen die richtige Partition verwenden):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Anschließend können Sie mit gparted die alte / boot-Partition löschen und möglicherweise die Root-Partition erweitern, um diesen Speicherplatz zu nutzen. Um die Root-Partition zu erweitern, müssen Sie von der Live-CD booten und der freie Speicherplatz muss sofort rechts sein. Befindet sich die / boot-Partition derzeit links von der Root-Partition, müssen Sie die Root-Partition zuerst nach links verschieben und dann erweitern. Dies kann jedoch sehr, sehr lange dauern und ist möglicherweise nicht wert Ärger.


6
Das Verschieben von / boot auf meine Hauptpartition ist für mich keine Lösung, da alles außer / boot verschlüsselt ist. Das konntest du von meiner Frage nicht wissen, sorry.
user6722

Dies ist eine gute Lösung, wenn die oben genannten Lösungen nicht funktionieren, weil überhaupt kein Speicherplatz auf dem Startvolume vorhanden ist, oder wenn das Problem "Nicht genügend Speicherplatz" wiederholt auftritt. Bitte lesen Sie zuerst, warum es manchmal erforderlich ist, eine / boot-Partition zu haben: ( help.ubuntu.com/community/DiskSpace )
svandragt

@svandragt, es gibt heutzutage im Grunde keinen Grund mehr, eine / boot-Partition zu benötigen. Das einzige, was noch übrig ist, ist, dass Ihr BIOS kaputt ist und nicht die gesamte Festplatte sehen kann, und jede Maschine, die im letzten Jahrzehnt hergestellt wurde, unterliegt keiner solchen Einschränkung. Andere Legacy-Fälle wie Raid oder LVM werden jetzt von grub2 korrekt behandelt.
Psusi

Es gibt einige Gründe für eine separate Startpartition. Ich bin mir jedoch nicht sicher, ob die Vorteile den erhöhten Aufwand wert sind. 1. Das Betriebssystem kann von einem schnelleren Start über ext2 profitieren. 2. Die Sicherheit kann erhöht werden, indem als RO montiert / gebootet wird. (Rootkits, etc.) oder bleiben sogar zur Laufzeit unmountet. 3. grub (1) hat (hatte) noch einige probleme mit ext4. 4. Erforderlich für die Ausführung von lvm (grubv1). Dies gilt jedoch nicht für das Standard-Ubuntu-Setup.
David Cahill

lsblkkann verwendet werden, um zu bestimmen, welche Partition was ist
Mr Purple

9

Aus den obigen Antworten das Beste zu ziehen, ist mein bewährter Ansatz:

  • uname -a um den laufenden Kernel zu finden.
  • dpkg -l linux-{headers,image}-\* | grep ^iium alle aktuell installierten Kernel-bezogenen Pakete aufzulisten. Dies beinhaltet den laufenden Kernel.
  • sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}um die alten kerne zu entfernen. Ersetzen Sie xx,yy,zzdurch eine Liste der Kernel-Builds, die Sie entfernen möchten. Dies sind alle Builds, die im vorherigen Befehl aufgeführt sind und älter als der aktuell ausgeführte Kernel sind. Stellen Sie sicher, dass Sie den aktuell ausgeführten Kernel nicht entfernen - Ihr System wird nicht mehr bootfähig . Möglicherweise müssen Sie auch die Kernelversion von 3.16.0auf die auf Ihrem System installierte Version ändern .
  • Optional können Sie eine zusätzliche sudo apt-get autoremoveAktion ausführen, um alle verbleibenden Abhängigkeiten der alten Kernel zu entfernen, die von den aktuellen nicht mehr benötigt werden, und so mehr Speicherplatz freizugeben.

Möglicherweise sind Header-Dateien ohne passende Kernel-Versionen installiert oder umgekehrt. Fügen Sie einfach alle diese Versionen in den Befehl ein. APT wird sich beschweren, dass einige Pakete nicht entfernt werden können, weil sie nicht installiert sind, aber das schadet nicht.

Wenn etwas fehlschlägt ...

  • Wenn der apt - Befehl aufgrund eines fehlschlägt keinen Platz mehr auf dem Gerät Fehler, verwenden Sie den entsprechenden Befehl dpkg statt: sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Wenn der Befehl dpkg immer noch nicht funktioniert, weil die linux-imagePakete von den linux-headersPaketen der gleichen Version (die Sie ebenfalls deinstallieren möchten) benötigt werden, hat dpkg das möglicherweise nicht gelöst. Überprüfen Sie die Ausgabe von dpkg -lund geben Sie in der Befehlszeile alle Paketnamensuffixe an. Zum Beispiel war auf einem meiner Systeme der Befehl, der schließlich funktionierte sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae.
  • Wenn Sie einen anderen Fehler bemerken, suchen Sie Hilfe - Sie haben möglicherweise ein anderes Problem als gedacht.

@ user535733 Der übliche Fall (zumindest der, auf den ich laufend stoße) ist, dass noch etwas Platz vorhanden ist /boot, nur nicht genug für ein anderes Kernelpaket. In diesen Fällen hat das oben Genannte gut funktioniert. Sie können jedoch den entsprechenden dpkgBefehl hinzufügen . Was purge, nein, es ist nicht eine Art von ‚kraft entfernen‘. Anders removeals beim Löschen von Konfigurationsdateien. Da / solange Kernel - Pakete installieren keine Konfigurationsdateien, removeund purgedas gleiche gilt für Kernel - Pakete tun.
user149408

Der vierte Punkt wurde mit dem entsprechenden Befehl dpkg hinzugefügt.
user535733

4

Für mich haben beide apt-get purgeund dpkg --removebeide versagt. Also musste ich ein paar ältere Kernel-Images aus / boot mit löschen rm -f.


4
Dies ist kein guter Weg, um Pakete zu entfernen. Obwohl diese Antwort nicht sehr spezifisch ist, warum das Entfernen auf die richtige Weise fehlgeschlagen ist, wären wir sicher in der Lage, die Ursache des Problems herauszufinden, wenn diese Informationen gegeben würden (natürlich in einer separaten Frage).
Thomasrutter

2
Ich glaube, es war gescheitert, weil die /bootPartition voll war. Dieser Befehl versucht zuerst, den Kernel auf den neuesten Stand zu bringen und stürzt No space left on devicebeim Erzeugen voninitrd.img
vp_arth

1
WARNUNG: Das direkte Entfernen von Dateien kann zu Problemen führen, da durch ein Update des Linux-Firmware-Pakets die Datei initrd.img für jede Version neu erstellt werden kann, von der angenommen wird, dass sie auf der Grundlage der Paketinformationen installiert wird. Siehe: askubuntu.com/questions/865577/…
kgrittn

1
danke, dies ist die lebensrettende endgültige Lösung, wenn nichts anderes funktioniert.
Jeff Puckett

4

Alle Kernel auflisten:

dpkg --list 'linux-image*'

Aktuellen Kernel anzeigen:

uname -r

Listen Sie alle Kernel AUSSER dem aktuellen auf:

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 steht.

Entferne alle Kernel AUSSER dem aktuellen:

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

Andere Sachen löschen:

sudo apt-get autoremove

Wenn Sie beim Installieren / Deinstallieren von Dateien immer noch einen Boot-Speicherplatzfehler feststellen, entfernen Sie direkt eines der ALTEN Images aus dem Verzeichnis / boot.

ls -lh /boot/*-3.13.0-119*;

rm /boot/*-3.13.0-119*; 

HINWEIS: Bitte überprüfen Sie das aktuelle Kernel-Image erneut, bevor Sie ein Image löschen.


2

Ich habe bereits alte Kernelpakete (Linux-Header ...) gelöscht

linux-headers-*sind keine Kerne. Kernel-Pakete sind die genannten linux-image-*. Die genannten linux-headers-*sind Entwicklungspakete zum Kompilieren von Kernel-Modulen: Sie befinden sich nicht im Verzeichnis / boot und sind nicht für die alltägliche Verwendung Ihres Systems erforderlich.

Die Dateien , die Sie in / boot aufgelistet tun mehr altes Kernel - Images (enthalten vmlinuz*) und kompilierten initrd Bilder ( initrd.img*) für den Kern, das ist ein Zeichen dafür , dass Sie immer noch eine Menge alten Kernel - Pakete installiert haben.

Sie sollten in der Lage sein, Ihre installierten Kernel mit aufzulisten

aptitude search ~ilinux-image

(Beachten Sie, dass dies wahrscheinlich auch Pakete zurückgibt, die keine Kernel sind.)

Normalerweise müssen nicht mehr als zwei Kernel installiert werden - der derzeit verwendete und der vorherige (als Fallback). So können Sie die älteren nacheinander entfernen:

sudo apt-get autoremove linux-image-3.2.0-23-generic

Stellen Sie sicher, dass Sie "3.2.0-23-generic" durch die aktuelle Kernel-Version ersetzen, die Sie entfernen möchten! Entfernen Sie auch keine Pakete wie linux-image-generic. Sie müssen wirklich vorsichtig sein, um den aktuell ausgeführten Kernel nicht zu entfernen, da Sie sonst nicht booten können (Ubuntu kann Sie möglicherweise davor warnen oder nicht).

Sie finden Ihren aktuell ausgeführten Kernel mit:

uname -r

1

Ich hatte dieses Problem und mehr, als ich einige initrd-img-xxxDateien manuell aus dem / boot entfernte und ein Problem damit hatte, dass diese alten Versionen weiterhin generiert wurden und den /bootOrdner füllten . Um das Problem zu beheben, habe ich folgende Schritte ausgeführt:

  • Ich habe die generierte alte Kernelversion manuell entfernt, um Speicherplatz freizugeben.
  • Sie bearbeiten eine Textkonfigurationsdatei als Superuser. Fügen Sie daher Folgendes in ein Terminal ein:

    sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Suchen Sie die Zeile update_initramfs=yesund ändern Sie sie in update_initramfs=no. Speichern und beenden Sie die Datei und führen Sie dann Folgendes aus:

    sudo dpkg --configure -a
    

Das hat mein Problem gelöst. Das basierte auf diesem Blog

Hoffentlich sollte beim Neustart alles in Ordnung sein, und später können Sie versuchen, das noZurück zu yesin zu ändern update-initramfs.conf.


1

Ich zeige, dass diese Frage auch 2017 neue Kommentare und Antworten hat, aber eine Antwort fehlt, die ich hier für sehr nützlich halte:

Ubuntu als Desktop-Betriebssystem für den einfachen alltäglichen Gebrauch hat keinen Grund, mit einer separaten \ boot-Partition installiert zu werden, und so etwas wird einem "allgemeinen Benutzer" NICHT etwas bieten ... Eine Lösung ist also eine Neuinstallation ohne \ boot-Partition und so weiter So wirst du nie ein solches Problem haben

PS: Meine Antwort kann in der akzeptierten Antwort gelöscht oder hinzugefügt werden ... (Ich denke, es wird einigen Leuten auf diese Weise helfen)



0

In aptitude oder synaptic gibt es einen Abschnitt "alt oder manuell installiert verpackt". Dort sollten die alten Linux-Pakete sein.


0

Es gibt ein Bash-Skript, das ich unten geschrieben habe und das den Prozess ein bisschen benutzerfreundlicher macht.

YMMV - es wurde für Mint 14 gemacht. Ich lerne noch BASH, also ist es wahrscheinlich etwas klobig. Verwenden Sie auf eigenes Risiko, aber es funktioniert bei mir!

#!/bin/bash

endCol='\e[0m'
bold_red='\e[1;31m'
bold_green='\e[1;32m'
bold_yellow='\e[1;33m'

title_color='\e[0;30;47m'

function show_kernel_info {
clear
current_kernel=$(uname -r)
echo "Current ACTIVE kernel is:"
echo -e "  "$bold_yellow$current_kernel$endCol
echo "This kernel will be TOTALLY EXCLUDED from all actions in this script."
echo "Also, one fallback non-active kernel will be always left untouched."
echo ""
echo "These are the non-active kernels stored in /boot:"
count_of_old_kernels_in_boot=$(ls -o /boot/initrd* | grep -c -v "$current_kernel")
if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo " * No non-active kernels found! *"
else
  ls -o /boot/initrd* | grep -v "$current_kernel"
fi
echo ""
list_of_old_kernels=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic" | head -n 1)
count_of_old_kernels_installed=$(dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -c -v "linux-image-generic")
echo "Listing of all unused kernels still installed in the system (these may not exist in /boot):"
if [ $count_of_old_kernels_installed = 0 ]; then
  echo " * No unused kernel installs found! *"
else
  dpkg --list | grep linux-image | awk -F' ' '{ print $2 }' | grep -v "$current_kernel" | grep -v "linux-image-generic"
fi
echo ""
}

function exit_script {
free_space_after=$(df -BM /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
let freed_space=$free_space_after-$free_space_before
echo ""
echo "Results (in MB)"
echo "---------------"
echo "Free space in /boot before script was run: "$free_space_before
echo "Free space now: "$free_space_after
echo ""
echo "Amount of space freed up = "$freed_space
echo ""
echo "Press any key to exit."
read -s -n 1
echo ""
exit
}

# Main code
echo ""
echo -e $title_color" --------------------------- "$endCol
echo -e $title_color" -   Kernel Cleanup v1.0   - "$endCol
echo -e $title_color" --------------------------- "$endCol
echo ""
echo "Maximise this window for readability."
echo "Press any key to continue."
read -s -n 1
echo ""
echo "This script will remove old unused kernels, but it will prompt you before removing each one."
echo "It will never remove the current running kernel, and will also leave one fallback kernel."
echo "It can also remove source files from /usr/src for each kernel removed."
echo "This is normally safe to do and will free up lots more space."
echo ""
echo "Do you want that done as well? (y/n, enter=yes)"
valid_input=0
while [ "$valid_input" = "0" ]; do
  read -s -n 1 YesNo_input
  if [ "$YesNo_input" = "" ]; then
    YesNo_input="y"
  fi
  case $YesNo_input
  in
    y)
    RemoveSource="y"
    valid_input=1
    ;;

    Y)
    RemoveSource="y"
    valid_input=1
    ;;

    n)
    RemoveSource="n"
    valid_input=1
    ;;

    N)
    RemoveSource="N"
    valid_input=1
    ;;
  esac
done

free_space_before=$(df -h /boot | tail -n 1 | awk -F' ' '{ print $4 }' | tr -d M)
show_kernel_info
while [ $count_of_old_kernels_in_boot -gt 1 ]; do
  # failsafe check if somehow the current kernel is about to be removed!
  if [ "$current_old_kernel" = "$current_kernel" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow the current kernel has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  # failsafe check if somehow a linux-image-generic entry is about to be removed
  if [ "$current_old_kernel" = "linux-image-generic" ]; then
    echo -e $bold_red"ERROR!"$endCol" Somehow one of the linux-image-generic entries has crept into the removal process!"
    echo "I refuse to do that! Aborting script."
    exit_script
  fi
  echo "Command about to be executed is:"
  echo "  $ sudo apt-get purge \"$current_old_kernel\""
  check_in_boot=$(echo $current_old_kernel | sed 's/linux-image/initrd.img/g')
  if [ -e /boot/$check_in_boot ]; then
    echo -e $bold_yellow"Note:"$endCol" This kernel exists in /boot but it NON-active, so it's OK to remove."
  else
    echo -e $bold_green"Totally safe to remove:"$endCol" This kernel does NOT exist in /boot."
  fi
  echo ""
  echo "Are you sure you want to remove this kernel?"
  echo "(*upper case* Y=yes / any other key will exit the script)"
  read -s -n 1 yes_no
  echo ""
  # Only entering a single upper case Y will work!
  if [ "$yes_no" != "Y" ]; then
    echo "Aborting script."
    exit_script
  fi
  echo "Removing kernel "$current_old_kernel"..."
  sleep 1
  sudo apt-get -y purge $current_old_kernel
  if [ "$RemoveSource" = "y" ]; then
    current_old_source=$(echo $current_old_kernel | sed 's/linux-image/linux-headers/g')
    current_old_source=$(echo $current_old_source | sed 's/-generic//g')
    current_old_source=$(echo $current_old_source | sed 's/-pae//g')
    sudo apt-get -y purge $current_old_source
  fi
  show_kernel_info
done

if [ $count_of_old_kernels_in_boot = 0 ]; then
  echo -e $bold_red"There are no NON-active kernels to remove!"$endCol
else
  echo -e $bold_red"There is only one NON-active kernel left in /boot!"$endCol
  echo "This script will not remove the last non-active kernel so that you have at least one backup kernel."
fi
echo "Aborting script."
exit_script

0

[Als AskUbuntu Noob kann ich erst einen Kommentar abgeben, wenn der Ruf gleich 50 ist.]

Mein Server hat das auch gemacht. Im wahrsten Sinne des Wortes hat keine der hier erwarteten Antworten funktioniert, da diese einen gewissen Arbeitsbereich beim / booten erfordern, damit sie ausgeführt werden können. Wenn die Startpartition voll ist, wird sie abrupt beendet, ohne dass eines der Images gelöscht wird.

Das einzige, was mir geholfen hat, war, das aktuelle Bild zu überprüfen und dann manuell sudo rm filenamenach den ältesten Bilddateien zu suchen (jede hatte -3.16.0-30 im Namen). Sobald das erledigt war, sudo apt-get autoremovehatte er den Wackelraum, den er brauchte, um seine Arbeit zu erledigen. Es wurden einige mit dieser Version verbundene Fehler hervorgehoben, zum Beispiel: "depmod: FATAL: konnte /boot/System.map-3.16.0-30-generic: Keine solche Datei oder kein solches Verzeichnis laden", aber das ist zu erwarten.

Nach Abschluss des dfVorgangs wurden 42% für / boot zurückgegeben, um anzuzeigen, dass der Computer wieder funktionsfähig ist.


1
Der Beitrag, den Sie suchen, ist askubuntu.com/questions/171209/…
muru

@muru Nun ja ... Ich würde vorschlagen, dass das Original-Poster auch diesen Rat benötigt. Sobald / boot voll ist, schlagen diese Skriptversionen, die versuchen, es zu beheben, ebenfalls fehl, da / boot voll ist.
Justin Case

Nun, es gibt zwei ähnliche Probleme: a) wenn das System warnt, dass Ihre Festplatte voll ist, aber apt-getgenügend Speicherplatz zum Weiterarbeiten vorhanden ist, und b) wenn ein apt-getFehler auftritt, weil die Festplatte zu voll ist. Das ist der andere Beitrag.
muru


0

Speichern Sie dieses Skript unter /usr/local/bin/remove_kernels.sh(denken Sie daran, Ausführungsberechtigungen zu erteilen sudo chmod 755 /usr/local/bin/remove_kernels.sh):

#!/bin/sh
if test $(id -u) != 0; then
 echo Error: You must be root to run this script!
 exit 1
fi
apt purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )
update-grub

Um dann alle alten Kernel zu entfernen, tippe einfach: sudo remove_kernels.sh


0

/ boot Partition kann manchmal etwas seltsam sein

Starten Sie nicht direkt, um Kernedateien zu löschen.

Schritte zum folgen

  1. Überprüfen Sie, ob das aktuell installierte Betriebssystem vom Linux-System verwendet wird

    uname -r

    Dies sollte den Namen des aktuell auf dem System installierten Kernel-Images anzeigen

  2. Beginnen Sie nun mit dem Löschen zusätzlicher Dateien, mit Ausnahme derjenigen, die auf Ihrem System installiert sind

    apt-get remove linux-image-XXXXX

  3. Entfernen Sie auch die Header-Datei

    apt-get remove linux-headers-XXXXX

  4. Es kann auch vorkommen, dass ein Fehler aufgetreten aptist. Wechseln Sie in diesem Fall zu / boot

    cd /boot

  5. Beginnen Sie mit dem manuellen Entfernen von Dateien, aber denken Sie auch sehr sorgfältig daran, die Kerndateien nicht installed one'svon Ihrem System zu löschen .

    rm linux-image-XXXXX

    rm linux-image-extra-XXXXXX

  6. Nach dem Entfernen der korrekten Dateien wird die Bereinigung, falls vorhanden, teilweise installiert

    apt-get -f install

  7. Entfernen Sie zusätzliche Dateien, die sich dort befinden, als manuell bereinigte Startdateien

    apt-get autoremove

  8. Aktualisiere grub

    update-grub

  9. Zuletzt aktualisieren Sie Ihre Systempakete

    apt-get update


-1

Wenn Sie nicht mehr unbenutzte Dateien entfernen können und wenn Sie eine andere Partition mit / oder freiem Speicherplatz auf demselben Gerät haben, können Sie die Größe der / boot-Partition nach parted / gparted ändern . (Es ist auch auf den Installationsmedien enthalten.)

Warnung : Das Ändern der Partitionsgröße ist ein gefährlicher Vorgang. Speichern Sie Ihre wichtigen Daten auf einem anderen Datenträger, bevor Sie dies tun!


Die meisten Betroffenen kleiner separater / Boot-Partitionen haben sich bei der Installation für die Verschlüsselung der gesamten Festplatte entschieden, für die LVM erforderlich ist. Diese Lösung scheint mehr Probleme zu verursachen, als sie für diese Benutzer löst.
user535733
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.