Was ist der sicherste Weg, um eine Partition aufzuräumen / zu booten?


274

Ich habe 200 MB für die /bootPartition zugewiesen . Immer wenn ich versuche, den Kernel zu aktualisieren, erhalte ich eine Fehlermeldung, die besagt, dass der Kernel /bootvoll ist.

Was kann ich tun, /bootum die älteren Kernel zu bereinigen und zu entfernen / zu sichern?



Wenn / boot voll ist, lesen
nslntmnx

Antworten:


335

Befehlszeilenmethode:

Überprüfen Sie zuerst Ihre Kernel-Version, damit Sie das verwendete Kernel-Image nicht löschen. Führen Sie dazu Folgendes aus:

uname -r

Führen Sie nun diesen Befehl für eine Liste der installierten Kernel aus:

dpkg --list 'linux-image*' | grep ^ii

und lösche die Kerne, die du nicht mehr brauchst:

sudo apt-get remove linux-image-VERSION

Ersetzen Sie VERSION durch die Version des Kernels, den Sie entfernen möchten.

Wenn Sie mit dem Entfernen der älteren Kernel fertig sind, können Sie dies ausführen, um alle Pakete zu entfernen, die Sie nicht mehr benötigen:

sudo apt-get autoremove

Und schließlich können Sie dies ausführen, um die Kernel-Liste zu aktualisieren:

sudo update-grub

34
sudo dpkg --list 'linux-image*' | grep ^iimacht es ein bisschen einfacher, nur die installierten Kernel zu sehen. Auch ich finde das update-grubist harmlos aber nicht unbedingt nötig, das läuft automatisch wenn man einen Kernel deinstalliert.
Nelson

9
Verwenden Sie sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo "", um die Liste der Paketnamen abzurufen, mit denen verwendet werden soll sudo apt-get remove. head -n -3wird verwendet, um die letzten 3 Kernel im System zu belassen.
Sithsu

2
Mein einfacher apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
Einzeiler

27
sudo apt-get autoremovesollte ausreichen (in der Regel verlassen Sie mit den letzten 3 Kernel)
mbx

6
Dies ist eine gute Antwort, aber ich bezweifle, dass dies in den meisten (wenn nicht allen) Fällen funktionieren kann. Das Problem ist, dass /bootes voll ist und apt-getmit dem einen oder anderen Fehlercode fehlschlägt. Die Antwort unten ist ein bisschen „hackier“ (ich muss ich mich Stahl bekennen musste , dass zur Ausgabe rm -rfin /boot) , aber das einzige, das wahrscheinlich ist , in dieser Situation zu arbeiten.
Marco

284

HINWEIS: Dies ist nur möglich, wenn Sie apt nicht zum Aufräumen verwenden können, da es zu 100% voll ist

Wenn apt-get nicht funktioniert, weil Ihr / boot zu 100% ist, müssen Sie zuerst / boot bereinigen. Dies hat wahrscheinlich ein Kernel-Upgrade in einer Teilinstallation ausgelöst, was bedeutet, dass apt ziemlich eingefroren ist und Sie weiterhin zur Ausführung apt-get -f installauffordert, obwohl dieser Befehl weiterhin fehlschlägt.

Holen Sie sich die Liste der Kernel-Images und finden Sie heraus, worauf Sie verzichten können. Dieser Befehl zeigt installierte Kernel mit Ausnahme des aktuell ausgeführten an sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Notieren Sie sich die beiden neuesten Versionen in der Liste. Sie müssen sich keine Sorgen um die laufende Version machen, da diese hier nicht aufgeführt ist. Sie können das mit überprüfen uname -r.

Erstellen Sie einen Befehl zum Löschen aller Dateien in / boot für Kernel, die Sie nicht interessieren. Verwenden Sie die geschweifte Klammer, um gesund zu bleiben. Denken Sie daran, das aktuelle und die beiden neuesten Kernel-Images auszuschließen. Beispiel: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Sie können auch einen Bereich mit der Syntax {80..84} verwenden.

sudo apt-get -f install um aufzuräumen, was bei einer Teilinstallation unangenehm ist.

Wenn Sie auf einen Fehler stoßen, der eine Zeile wie "Interner Fehler: Image konnte nicht gefunden werden (/boot/vmlinuz-3.2.0-56-generic)" enthält, führen Sie den Befehl aus sudo apt-get purge linux-image-3.2.0-56-generic(mit Ihrer entsprechenden Version).

Zum Schluss sudo apt-get autoremovelöschen Sie die alten Kernel-Image-Pakete, die durch das manuelle Booten verwaist wurden.

Vorschlag, Ausführung sudo apt-get updateund sudo apt-get upgradePflege von Upgrades, die möglicherweise gesichert wurden, während Sie darauf warten, dass Sie die vollständige / Boot-Partition erkennen.

In Vorschlag 2 lesen Sie https://help.ubuntu.com/community/AutomaticSecurityUpdates und prüfen Sie, ob Unattended-Upgrade :: Remove-Unused-Dependencies in /etc/apt/apt.conf.d/50unattended-upgrades auf true gesetzt wird. Dies entspricht der Ausführung von autoremove nach jedem Sicherheitsupdate, um sicherzustellen, dass Sie nicht verwendete Kernel bereinigen, aber auch andere Dinge entfernen, von denen es denkt, dass sie nicht verwendet werden, um Sie in Zukunft vor diesem Problem zu bewahren.


3
Auf diese Weise habe ich die neueste für den nächsten Neustart und dann die vor, nur für den Fall, dass etwas in dieser einbricht. Normalerweise habe ich viel Platz, so dass es nicht schadet, ein paar zu haben, und es befriedigt meine Paranoia, wenn ich in einem bestimmten Szenario nicht genügend Sicherungsoptionen habe.
Flickerfly

1
Ich hatte noch nie ein Problem mit unbeaufsichtigten Upgrades. Ich kann mir Szenarien vorstellen, in denen dies ein Problem sein könnte, das hauptsächlich darin besteht, dass Abhängigkeiten bei nicht-deb-gepackten Installationen verloren gehen. Angenommen, Sie installieren PHP, deinstallieren es und installieren eine neuere Version aus dem Quellcode. Diese Version weist Abhängigkeiten auf, die durch die vorherige Installation bereitgestellt wurden, aber apt ist sich nicht bewusst, dass dies weiterhin erforderlich ist. Wenn Sie das nächste Mal die automatische Entfernung ausführen, werden diese Abhängigkeiten nicht mehr angezeigt. Wenn dies automatisiert ist, kann dies etwas verwirrend sein. Wenn Sie nicht außerhalb der Repositorys installieren, ist dies meiner Meinung nach absolut sicher.
Flickerfly

3
Nachdem ich dies auf mehreren virtuellen vsphere-Servern gesehen hatte (auf denen die Kernel automatisch aktualisiert, aber anschließend nicht entfernt wurden), schrieb ich ein Python-Skript, um es zu automatisieren. Ich hätte gerne mehr Augen
EvanK

2
Wenn Sie dpkg --purgeeinen $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
Vollboot verwenden,

1
Nach dem Aufräumen / Booten würde apt-get install -f immer noch nicht funktionieren. Mit Hilfe von df -ifand ich heraus, dass mir auch die Inodes ausgehen, /da es im/usr/src
Kristofer

51

Dokumentation hierzu finden Sie unter https://help.ubuntu.com/community/RemoveOldKernels

Zusammenfassend: Verwenden Sie

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

Das purge-old-kernelsTool kann über installiert werden sudo apt install byobu. Hier ist die Beschreibung von seiner Manpage:

Dieses Programm entfernt alte Kernel- und Header-Pakete vom System und gibt so Speicherplatz frei. Es wird niemals den aktuell laufenden Kernel entfernen. Standardmäßig werden mindestens die letzten 2 Kernel beibehalten, der Benutzer kann diesen Wert jedoch mithilfe des --keep Parameters überschreiben .

Wenn Sie eine Lösung zum Kopieren und Einfügen wünschen, schlug ReSearchIT Eng Folgendes vor:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge

3
In meinem Fall funktioniert apt aufgrund eines ausstehenden Kernels nicht und der vorgeschlagene Fix ist ein Catch-22:
James Bowery

Ich musste defekte Pakete zuerst mit askubuntu.com/a/304388/284313 reparieren. Danach funktionierte Ihre Lösung.
James Bowery

3
Ich denke, dies sollte ab sofort die akzeptierte Lösung sein.
Fran Marzoa

3
Dies ist viel sicherer als die akzeptierte Antwort. ich denke apt-get autoremove --purgesollte aber ausreichen.
Woodrow Barlow

7

Ich fand, dass es viel einfacher ist, die kleine Partition aufzugeben und /bootzur Wurzel zu wechseln . Dies verhindert auch in Zukunft Platzprobleme.

Verschieben Sie zuerst Ihre Daten von der Boot-Partition in das Stammverzeichnis (Ausführen als sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Entfernen (oder kommentieren) Sie den /bootEintrag in /etc/fstab:

vim /etc/fstab

Aktualisiere grub und stelle sicher, dass alles korrekt ist:

update-grub

apt sollte jetzt problemlos upgraden können.

Dadurch verbleibt eine unbenutzte 200-MB-Partition (die Sie für etwas anderes verwenden können, wenn Sie die Mühe wert finden).


5
Dies ist eine gute Idee, funktioniert jedoch nicht, wenn Sie eine Festplattenverschlüsselung für Ihre Root-Partition wünschen.
Paŭlo Ebermann

Ja, es gibt Fälle, in denen / boot eine separate Partition sein sollte. Ein weiteres Beispiel war, dass Grub zuvor nicht von einer LVM-Partition geladen werden konnte.
Bastion

4

Entfernen alter Kernel (um Speicherplatz auf / boot freizugeben) siehe: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

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

Dann renne

sudo apt-get update

1
Dies war die einzige, die funktionierte .... großartige Lösung
John

Beste Antwort! Dies ist die einzige Lösung, die für mich funktioniert hat. autoremove ist doof; Es wird versucht, alle Kernel mit nicht erfüllten Abhängigkeiten erneut zu installieren, bevor sie offiziell entfernt werden. Ich ging immer und immer wieder in Kreisen, denen der Raum ausgeht. Diese Antwort ist Gold.
Lonnie Best

3

sudo apt-get autoremove

Dadurch werden alle bis auf die letzten 2 Kernel entfernt. Getestet auf Ubuntu 16.04 LTS, als die /bootKapazität 100% betrug und apt-get upgradedas letzte Kernel-Upgrade fehlgeschlagen ist. Das automatische Entfernen des Kernels ist iterativ. Wenn Sie also mehrere Kernel haben, werden diese nacheinander entfernt. Also sei geduldig.


1

Warum von Hand, wenn Sie es mit einem Werkzeug machen können? Sie wissen, dass Sie es in 30 Sekunden erneut benötigen werden, da es 30 Sekunden dauert, bis sie ein neues Kernel-Update veröffentlicht haben = P

Ich empfehle die Verwendung dieses Tools, bootnukem

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Dann

sudo bootnukem --dry-run

Entfernen --dry-runSie, sobald Sie bestätigt haben, dass es sicher aussieht

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.