Wie kann ich mehr Speicherplatz in / boot freigeben?

536

Meine /boot -Partition ist fast voll und ich bekomme jedes Mal eine Warnung, wenn ich mein System neu starte. Ich habe bereits alte Kernel-Pakete (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 wieder fast voll. Was kann ich sonst noch löschen? Gibt es einige andere Dateien, die mit den alten Kernel-Images verbunden sind?

Hier ist eine Liste von Dateien, die sich auf meiner Partition /boot 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.

    
user6722 22.12.2011, 11:06

21 Antwort

608

Sie haben viele ungenutzte Kernel. Entfernen Sie alle bis auf die 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 werden auch linux-image-x.x.x-x-generic entfernt.

Die Header werden in /usr/src installiert und beim Erstellen von Out-Tree-Kernel-Modulen (wie dem proprietären nvidia-Treiber und der Virtualbox) verwendet. Die meisten Benutzer sollten diese Headerpakete entfernen, wenn das entsprechende Kernelpaket ( 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 Kernels und Header, die entfernt werden können, mit Ausnahme des aktuellen laufenden Kernels:

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

Es wählt alle Pakete aus, deren Namen mit linux-headers-<some number> oder linux-image-<some number> beginnt, gibt die Paketnamen für installierte Pakete aus und schließt dann den aktuell geladenen / ausgeführten Kernel aus (nicht unbedingt den neuesten Kernel!). Dies passt in die Empfehlung, einen neueren Kernel zu testen, bevor ältere Kernel, deren Arbeit bekannt ist, entfernt werden.

Nach dem Upgrade der Kernel und dem Neustart zum Testen können Sie alle anderen Kernel mit folgendem Befehl entfernen:

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

Ihre Startpartition ist voll. Da es sich um ein Kernel-Update handelt, werden diese Dateien in die Boot-Partition kopiert. Sie müssen daher bereinigt werden. Hier ist ein Blogbeitrag , der Ihnen zeigt, wie es geht Löschen Sie die alten Kernel-Images mit einem Befehl. Ich werde eine grundlegende Zusammenfassung der Methode geben. Verwenden Sie diesen Befehl, um die aktuelle Version Ihres Kernels auszudrucken:

uname -r

Verwenden Sie 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 }' | grep -v -e 'uname -r | cut -f1,2 -d"-"' | grep -e '[0-9]'

Stellen Sie sicher, dass sich Ihr aktueller Kernel nicht in dieser Liste befindet. Beachten Sie, dass dies die Mehrheit des endgültigen Befehls ist (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 in diesem unheiligen Durcheinander kombinieren:

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

Und dieser eine Befehl wird alles für Sie erledigen. Ich werde bestätigen, dass dies perfekt funktioniert, aber niemandem im Internet trauen. :) Für weitere Informationen gibt der Blogbeitrag eine sehr gute Erklärung dazu, was jeder Teil des Befehls so ausführlich durchliest, dass Sie überzeugt sind, dass er das tut, was Sie möchten.

    
dward 21.02.2013 04:38
94
sudo apt-get autoremove

Dieser Befehl erledigt den Job automatisch.

    
karan 05.11.2012 06:58
38

Mit dem Synaptic Package Manager können Sie alte Kernel-Images problemlos auswählen und entfernen.

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, abhängig von den Dateien in Ihrem / boot-Ordner.

Klicken Sie mit der rechten Maustaste auf jedes dieser Linux-Pakete und wählen Sie die Option "Für vollständige Entfernung markieren". Klicken Sie anschließend auf die Schaltfläche "Übernehmen". Dadurch werden alle Dateien und alle zugehörigen Dateien entfernt. Ihr Ordner /boot sollte jetzt etwas aufgeräumter sein.

    
fossfreedom 24.12.2011 15:34
24

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 Kernel-Dateien aufzubewahren, können Sie alle auf einmal entfernen. Überprüfen Sie diesen Beitrag:
So entfernen Sie alle nicht verwendeten Linux-Kernel-Header, Bilder und -Module

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

Hier wird es vom Artikel-Link kopiert. Ich schlage vor, Sie lesen den gesamten Artikel:

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

Dies ist eine neue Antwort auf eine alte Frage, aber eine einfache Möglichkeit zum Reinigen dieser Sache (und mehr) ist die Installation von Ubuntu Tweak . Zur Installation :

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. Wechseln Sie zur Registerkarte "Hausmeister", und von hier sind es drei Klicks:

Es ist jedoch besser, den letzten Kernel (den Sie nie kennen) oder einen bekannten Arbeitskern zur Sicherheit zu verlassen. aber das ist leicht anpassbar.

Sie können dasselbe Tool verwenden, um viele Dinge zu bereinigen. Denken Sie daran, dass das System sie bei einem Bereinigen von Thumbnail-Cache oder TB-Cache neu erstellen muss, wenn sie benötigt werden.

    
Rmano 25.11.2014 14:11
17

Ich konnte das Problem durch Verwendung von dpkg beheben, um die Pakete direkt zu entfernen. Obwohl die Pakete immer noch in dpkg -l aufgeführt sind, werden die Dateien aus /boot entfernt, wodurch Speicherplatz frei wird.

[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 behebte apt-get -f install meine Abhängigkeitsprobleme und alles war gut mit der Welt.

Ich akzeptiere diese Antwort jedoch nicht, da ich immer noch wissen muss, ob ich die Größe von /boot erhöhen oder etwas anderes tun soll.

    
Phrogz 03.12.2011 19:47
12

Sie können aufhören, eine separate / boot-Partition zu verwenden, dann haben Sie keinen solchen begrenzten Speicherplatz. Hängen Sie dazu die Partition aus, mounten Sie sie an einer anderen Stelle und kopieren Sie alle Dateien dort 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

Sie können dann gparted verwenden, um die alte / boot-Partition zu löschen, und möglicherweise die root-Partition erweitern, um diesen Speicherplatz zu verwenden. Um die Root-Partition zu erweitern, müssen Sie von der Live-CD aus booten, und der freie Speicherplatz muss unmittelbar rechts liegen. Wenn sich die / boot-Partition aktuell links von der Root-Partition befindet, müssen Sie zuerst die Root-Partition nach links verschieben und sie dann erweitern. Dies kann jedoch eine sehr, sehr lange Zeit dauern Ärger.

    
psusi 22.12.2011 17:38
4

Bei mir sind sowohl apt-get purge als auch dpkg --remove fehlgeschlagen. Also musste ich ein paar ältere Kernel-Images aus / boot mit rm -f löschen.

    
orkoden 14.10.2013 11:22
4

Um das Beste aus den Antworten zu ziehen, lautet mein bewährter Ansatz:

  • uname -a , um den laufenden Kernel zu finden.
  • dpkg -l linux-{headers,image}-\* | grep ^ii , um alle derzeit 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 Kernel zu entfernen. Ersetzen Sie xx,yy,zz durch eine Liste der Kernel-Builds, die Sie entfernen möchten. Hierbei handelt es sich um alle Builds, die vom vorherigen Befehl aufgelistet wurden und älter sind als der derzeit ausgeführte Kernel. Stellen Sie sicher, dass Sie den aktuell laufenden Kernel nicht entfernen - Ihr System wird nicht mehr bootfähig. Möglicherweise müssen Sie auch die Kernelversion von 3.16.0 in das ändern, was auf Ihrem System installiert ist.
  • Optional können Sie ein zusätzliches sudo apt-get autoremove ausführen. Dadurch werden alle verbleibenden Abhängigkeiten der alten Kernel entfernt, die vom aktuellen Kernel nicht mehr benötigt werden. Dadurch wird mehr Platz frei.

Sie haben möglicherweise Header-Dateien ohne entsprechende Kernel-Versionen oder umgekehrt - fügen Sie einfach alle diese Versionen in den Befehl ein. APT beschwert sich darüber, dass einige Pakete nicht entfernt werden können, da sie nicht installiert sind. Dies schadet jedoch nicht.

Wenn etwas fehlschlägt ...

  • Wenn der Befehl apt fehlschlägt, weil kein Speicherplatz mehr auf Gerät 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, da die Pakete linux-image von den Paketen linux-headers der gleichen Version (die Sie auch deinstallieren möchten) benötigt werden, hat dpkg das Problem möglicherweise nicht gelöst. Überprüfen Sie die Ausgabe von dpkg -l erneut, und geben Sie in der Befehlszeile beliebige Paketnamen an. Auf einem meiner Systeme war zum Beispiel der Befehl sudo dpkg --purge linux-{image,headers}-3.16.0-{xx,yy,zz}-generic-pae .
  • Wenn Sie einen anderen Fehler erhalten, suchen Sie Hilfe - Sie haben möglicherweise ein anderes Problem als Sie dachten.
user149408 09.07.2015 22:24
2
  

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

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

Die in / boot aufgeführten Dateien enthalten mehrere alte Kernel-Images ( vmlinuz* ) und kompilierte Initrd-Images ( initrd.img* ) für diese Kernel, was darauf hindeutet, dass Sie noch über eine Viele alte Kernel-Pakete 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).

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

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

Stellen Sie sicher, dass Sie "3.2.0-23-generic" durch die 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 gerade laufenden Kernel nicht zu entfernen, oder Sie können nicht booten (Ubuntu warnt Sie möglicherweise nicht davor).

Sie finden Ihren aktuell laufenden Kernel mit:

uname -r
    
thomasrutter 29.08.2014 11:15
1

Sehr hilfreiches Hilfsprogramm , das Ihre Boot-Partition löscht

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

Verwenden Sie auf eigene Gefahr, aber es hat für mich funktioniert:

sudo bootnukem
    
Jonathan 14.08.2016 22:08
1

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

  • Ich habe die generierte alte Kernel-Version 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=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 Sie können später versuchen, no wieder in yes in update-initramfs.conf zu ändern.

    
aibrahim 23.03.2017 09:59
1

Alle Kernel auflisten:

dpkg --list 'linux-image*'

Zeigt den aktuellen Kernel an:

uname -r

Alle Kernel auflisten. EXCEPT aktuelles:

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

Stellen Sie sicher, dass Ihr aktueller Kernel nicht in dieser Liste enthalten ist.

Entfernen Sie alle Kernel. EXCEPT , aktueller Kernel:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print }' | 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 bei der Installation / Deinstallation von Dateien immer noch ein Fehler beim Startspeicherplatz auftritt, entfernen Sie direkt ein OLD -Image aus dem / boot-Verzeichnis

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

rm /boot/*-3.13.0-119*; 

HINWEIS: Bitte überprüfen Sie das aktuelle Kernelbild erneut, bevor Sie ein Bild löschen.

    
Hemant Thorat 10.07.2018 12:35
0

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

    
Martin Ueding 22.12.2011 12:59
0

Es gibt ein Bash-Skript, das ich unten geschrieben habe, wodurch der Prozess benutzerfreundlicher wird.

YMMV - es wurde für Mint 14 entwickelt. Da es immer noch BASH lernt, ist es wahrscheinlich etwas klobig. Verwendung auf eigene Gefahr, aber es funktioniert für mich!

#!/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  }' | grep -v "$current_kernel" | grep -v "linux-image-generic")
current_old_kernel=$(dpkg --list | grep linux-image | awk -F' ' '{ print  }' | 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  }' | 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  }' | 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  }' | 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  }' | 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
    
wibbynut 08.03.2014 07:33
0

[Als AskUbuntu-Noob kann ich bis zur Reputation = 50 nicht kommentieren, deshalb nicht abstimmen.]

Mein Server hat dies auch gemacht. Buchstäblich keine der erwarteten Antworten, die hier bearbeitet wurden, da für diese ein gewisser Arbeitsraum für / boot erforderlich ist. Wenn die Boot-Partition voll ist, wird sie abrupt beendet, ohne die Images zu löschen.

Das einzige, was für mich funktionierte, war, das aktuelle Bild zu überprüfen und dann manuell sudo rm filename für die ältesten Bilddateien (jede hatte -3.16.0-30 im Namen). Sobald dies erledigt war, hatte sudo apt-get autoremove den nötigen Spielraum, um seine Arbeit zu erledigen. Es wurden einige mit dieser Version verbundene Fehler hervorgehoben, zum Beispiel: "depmod: FATAL: /boot/System.map-3.16.0-30-generic: Keine solche Datei oder Verzeichnis nicht geladen", aber das ist zu erwarten.

Nach Abschluss dieses Vorgangs lieferte df 42% für / boot, um anzuzeigen, dass es wieder einwandfrei ist.

    
Justin Case 08.02.2017 01:44
0

Ich habe dieses bash-Skript geschrieben um selektiv alte Kernel auf einmal zu löschen:

Der gesamte Bash-Code und die Anweisungen sind im Link enthalten.

    
WinEunuuchs2Unix 31.07.2017 01:46
0

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

Ubuntu als Desktop-Betriebssystem für den alltäglichen Gebrauch hat keinen Grund, mit einer separaten \ Boot-Partition installiert zu werden, und etwas Ähnliches bietet KEINEN "gewöhnlichen Benutzer" ... Eine Lösung ist also eine Neuinstallation Ohne \ boot-Partition haben Sie so ein Problem nie.

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

    
koleygr 20.08.2017 08:58
0

Speichern Sie dieses Skript als /usr/local/bin/remove_kernels.sh (denken Sie daran, die 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 alle alten Kernel zu entfernen, geben Sie einfach ein: sudo remove_kernels.sh

    
Anthony Kelly 08.10.2018 18:27
-1

Wenn Sie nicht mehr nicht verwendete Dateien entfernen können und andere Partitionen mit / oder freiem Speicherplatz auf demselben Gerät vorhanden sind, können Sie die Größe der Boot-Partition ändern, indem Sie parted / gparted . (Es ist auch auf Installationsmedien enthalten.)

Warnung : Das Ändern der Größe der Partition ist gefährlich. Speichern Sie Ihre wichtigen Daten auf anderen Medien, bevor Sie dies tun!

    
Rudolf Dovičín 02.01.2015 22:42