it-swarm.com.de

Wie schaffe ich mehr Speicherplatz in / boot?

Meine /boot -Partition 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 /boot -Partition 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-generic Kernel.

562
user6722

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

Durch das Entfernen des Pakets linux-image-x.x.x-x wird auch linux-image-x.x.x-x-generic entfernt.

Die Header werden in /usr/src installiert und beim Erstellen von Kernelmodulen (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 laufenden Kernels current:

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 Name mit linux-headers-<some number> oder linux-image-<some number> beginnt, druckt die Paketnamen für installierte Pakete und schließt dann das aktuell geladener/laufender Kernel aus (nicht unbedingt das spätestens 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]+//')")
627
Lekensteyn

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. 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. Lesen Sie sie durch, damit Sie zufrieden sind, dass sie das tun, was Sie möchten.

216
dward
Sudo apt-get autoremove

Dieser Befehl erledigt die Arbeit automatisch.

107
karan

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 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 /boot -Ordner sollte jetzt etwas aufgeräumter sein.

40
fossfreedom

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 zu behalten, können Sie alle auf einmal entfernen. Überprüfen Sie diesen Beitrag:
Entfernen aller 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
25
Omni

Dies ist eine neue Antwort auf eine alte Frage, aber eine einfache Möglichkeit, diese Sache (und mehr) zu säubern, ist die Installation von buntu Tweak . An installiere 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 janitor for old kernels

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 Thumbnail-Cache oder den TB -Cache bereinigen.

23
Rmano

Ich konnte das Problem beheben, indem ich dpkg verwendete, um die Pakete direkt zu entfernen. Obwohl die Pakete immer noch in dpkg -l aufgeführt sind, werden die Dateien aus /boot entfernt, um Speicherplatz freizugeben.

[email protected]:/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 hat apt-get -f install meine Abhängigkeitsprobleme behoben, und alles war in Ordnung mit der Welt.

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

19
Phrogz

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.

15
psusi

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 ^ii, um alle derzeit installierten kernelbezogenen Pakete aufzulisten. Dies beinhaltet den laufenden Kernel.
  • Sudo apt-get purge linux-{image,headers}-3.16.0-{xx,yy,zz}, um die alten Kernel zu entfernen. Ersetzen Sie xx,yy,zz durch eine Liste der Kernel-Builds, die Sie entfernen möchten. Dies sind alle Builds, die vom vorherigen Befehl aufgelistet wurden und älter sind als der aktuell ausgeführte Kernel. 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.0 auf die auf Ihrem System installierte Version ändern.
  • Optional können Sie einen zusätzlichen Sudo apt-get autoremove ausführen. Dadurch werden alle verbleibenden Abhängigkeiten der alten Kernel entfernt, die von dem aktuellen Kernel nicht mehr benötigt werden, und es wird mehr Speicherplatz freigegeben.

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 wird keinen Schaden anrichten.

Wenn etwas fehlschlägt ...

  • Wenn der Befehl apt aufgrund eines fehlschlägt, dass auf dem Gerät kein Platz mehr vorhanden ist , verwenden Sie stattdessen den entsprechenden Befehl dpkg: Sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}.
  • Wenn der Befehl dpkg immer noch nicht funktioniert, weil die linux-image -Pakete von den linux-headers -Paketen derselben Version (die Sie ebenfalls deinstallieren möchten) benötigt werden, konnte dpkg dies möglicherweise nicht beheben. Überprüfen Sie die Ausgabe von dpkg -l erneut, und geben Sie in der Befehlszeile alle Paketnamensuffixe an. Auf einem meiner Systeme war der Befehl, der schließlich funktionierte, beispielsweise 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.
8
user149408

Alle Kernel auflisten:

dpkg --list 'linux-image*'

Aktuellen Kernel anzeigen:

uname -r

Listen Sie alle Kernel auf AUSSER aktuelle:

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 aktuelle:

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 OLD - Images aus dem/boot-Verzeichnis.

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.

4
Hemant Thorat

Für mich sind beide apt-get purge und dpkg --remove fehlgeschlagen. Also musste ich ein paar ältere Kernel-Images aus/boot mit rm -f löschen.

4
orkoden

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

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

Die Dateien, die Sie in/boot do aufgelistet haben, enthalten mehrere alte Kernel-Images (vmlinuz*) und kompilierte initrd-Images (initrd.img*) für diese Kernel Viele alte Kernelpakete installiert.

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, sonst können Sie nicht booten (Ubuntu kann Sie möglicherweise davor warnen oder nicht).

Sie finden Ihren aktuell ausgeführten Kernel mit:

uname -r
2
thomasrutter

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:

buntu als Desktop-Betriebssystem für den einfachen alltäglichen Gebrauch hat keinen Grund, mit einer separaten\boot-Partition installiert zu werden, und so etwas bietet KEINEM "normalen Benutzer" etwas ... Eine Lösung ist also eine Neuinstallation ohne\Boot-Partition und auf diese Weise werden Sie 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)

1
koleygr

Ich hatte dieses Problem und mehr, als ich einige initrd-img-xxx -Dateien manuell aus dem/boot-Ordner entfernte und ein Problem damit hatte, dass diese alten Versionen weiterhin generiert wurden und den Ordner /boot füllten. Um das Problem zu beheben, folgte ich den folgenden Schritten:

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

    Sudo gedit /etc/initramfs-tools/update-initramfs.conf
    
  • Suchen Sie die Zeile update_initramfs=yes und ä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, no in update-initramfs.conf zurück auf yes zu setzen.

1
aibrahim

Super hilfreiches Dienstprogramm das wird Ihre Boot-Partition löschen

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

Benutzung auf eigene Gefahr, aber bei mir hat es geklappt:

Sudo bootnukem
1
Jonathan

Ich schrieb dieses Bash-Skript , um alte Kernel auf einmal selektiv zu löschen:

rm kernels real size

Alle Bash-Codes und Anweisungen sind im Link enthalten.

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 ein bisschen 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
wibbynut

[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, um abgeschlossen zu werden. 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 filename für die ältesten Bilddateien (jede hatte - 3.16.0- in ihren Namen). Sobald das erledigt war, hatte Sudo apt-get autoremove den Spielraum, den es 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 Vorgangs hat df für/boot eine Nutzungsrate von 42% zurückgegeben, um anzuzeigen, dass es wieder fehlerfrei ist.

0
Justin Case

/ 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 apt nicht mehr funktioniert. Wechseln Sie in diesem Fall zu/boot

    cd /boot

  5. Beginnen Sie mit dem manuellen Entfernen von Dateien, aber denken Sie auch daran, dass Sie die internen installed one's -Dateien nicht von Ihrem System 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

0
user225

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

0
Martin Ueding

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

#!/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
Anthony Kelly