Wie kann ich alte Kernel entfernen / neue installieren, wenn / boot voll ist?

31

Ich weiß, dass diese Frage schon oft gestellt wurde, aber bei mir ist sie wohl ein bisschen anders.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

Meine Bootpartition ist voll.

Aktueller Kernel:

# uname -r
3.2.0-35-generic

Alle Kernel:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

Also dachte ich daran, den 3.2.0.32-generischen Kernel zu entfernen mit:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Kein Erfolg.

Wenn ich es versuche apt-get -f installscheitert es auch:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Jede Hilfe wäre wirklich dankbar.

Update: Ich habe:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

Danach folgendes Problem mit apt-get -f install:

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)
Marcel
quelle
Siehe meine Antwort für den Fall, dass das automatische Entfernen aufgrund von Platzmangel nicht funktioniert.
nslntmnx

Antworten:

22

Sie können apt-get nicht verwenden, wenn Ihr Kernel veraltet ist.

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

Verwenden Sie, um lszu sehen, was sich in dem Ordner befindet. Entfernen Sie dann die ältesten ein oder zwei

sudo apt-get -f install

Dann können Sie entweder wie in

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

oder einfach weiter mit rm.

Sie sollten auch, sudo update-grubwenn Sie fertig sind

wlraider70
quelle
Mit dem Befehl install wurden viele alte Kernel neu installiert, was zu einer vollständigen Startdiskette führte. Der Löschbefehl hat das für mich gelöst.
SPRBRN
Ich verfolgte diese Antwort bis, sudo apt-get -f installstartete dann neu, um sicherzustellen, dass alles in Ordnung ist, und entfernte den Rest mit, apt autoremovewie in der vorherigen Befehlsausgabe vorgeschlagen.
Bart C
10

Anscheinend funktioniert dies:

sudo apt-get autoremove 

Laut apt-getManpage:

Mit autoremove werden Pakete entfernt, die automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu erfüllen, und die jetzt nicht mehr benötigt werden.

3.16.0-39 ist der, den ich installieren wollte, aber fehlgeschlagen ist, weil / boot voll war. 3.16.0-38 ist meine aktuelle Version. Sie sehen, dass -38 übersprungen wurde.

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.
ChePazzo
quelle
Ich mag diese Antwort, aber es fehlt ein Handbuch, um genau zu wissen, wofür autoremove.
s3m3n
1
Das automatische Entfernen funktioniert nur, wenn zuvor in der Warteschlange befindliche apt-Aktionen ordnungsgemäß ausgeführt wurden. Die automatische Entfernung funktioniert nicht, wenn bereits der Fehler "Kein Platz mehr auf dem Gerät" angezeigt wird. Diese zuvor in der Warteschlange befindlichen Aktionen schlagen fehl und die automatische Entfernung wird nicht ausgeführt. Mit anderen Worten, das automatische Entfernen funktioniert ... bis es nicht mehr funktioniert.
user535733
@ user535733 Sie sind richtig. Siehe meine Antwort für den Fall, dass das automatische Entfernen aufgrund von Platzmangel nicht funktioniert.
nslntmnx
7

Führen Sie in einem Terminal den folgenden Befehl aus:

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

Dieser Befehl listet alle derzeit installierten Linux-Kernel auf, wählt dann alle derzeit nicht verwendeten aus und entfernt sie.

Django23
quelle
2
Vielleicht möchten Sie erklären, was dieser Befehl genau macht. Es sieht ziemlich kompliziert aus: Im Allgemeinen sollten die Benutzer davon abgeraten werden, Befehle wie diese auszuführen, die sie nicht verstehen - insbesondere, wenn sie etwas für ihr System unbedingt benötigen.
Mtdevans
@mtdevans: Ich habe hinzugefügt, dass der obige Befehl alle derzeit installierten Linux-Kernel auflistet, dann alle derzeit nicht verwendeten auswählt und dann alle derzeit nicht verwendeten Kernel entfernt.
Kristian
4
Der Befehl ist nützlich. Führen Sie zunächst den Teil vor "| xargs" aus, um zu überprüfen, was Sie löschen möchten. Auch | grep -v wird möglicherweise benötigt, um den neuesten Kernel beizubehalten, der möglicherweise noch nicht verwendet wird, aber gewünscht wird.
Roman Susi
4
das ist gefährlich, da es auch zu linux-libc-dev passt: amd64
Frederick Nord
2
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

Wenn der obige Befehl ohne "sudo apt-get -y purge" mit Ihrem linux-libc-dev: amd64 übereinstimmt, können Sie dem regulären Ausdruck ein Semikolon hinzufügen, um es nicht einzuschließen:

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

Stellen Sie jetzt sicher, dass es gut aussieht, und fügen Sie "sudo apt-get -y purge" hinzu.

Cory W
quelle
1

Versuchen Sie dies für Ubuntu 12.04 sudo apt-get purge linux-image-[kernel version]

Dadurch werden alle Kernelversionen gelöscht. Wenn Ihr Boot-Ordner viele Kernel hat, vergessen Sie nicht, grub zu aktualisieren und Ihr System neu zu starten

Ex. sudo apt-get purge linux-image-3.11.6 *

alisaleh
quelle
2
Das Problem ist, dass dies nicht mehr funktioniert, wenn man einen Punkt hat, an dem es Abhängigkeitsprobleme gibt, wie das vor einem.
Paŭlo Ebermann
Das funktioniert bei mir!
Daniel
0

Viele Antworten geben an, "apt autoremove" zu verwenden, aber das funktioniert möglicherweise nicht, wenn / boot voll ist, da apt versucht, vor dem Entfernen Kernel hinzuzufügen.

Next apt autoremove entfernt keine in /etc/apt/apt.conf.d/01autoremove-kernels erwähnten Kernel, daher müssen wir das korrigieren.

Hier ist der Prozess, der für mich funktioniert hat.

Entfernen Sie unerwünschte Kernel-Konfigurationsdateien.

sudo dpkg --purge $ (COLUMNS = 200 dpkg -l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

Aktualisieren Sie /etc/apt/apt.conf.d/01autoremove-kernels, indem Sie ... ausführen.

sudo /etc/kernel/postinst.d/apt-auto-removal

Hoffentlich funktioniert apt autoremove.

sudo apt autoremove --purge

Andernfalls sollten Sie in der Lage sein, sehr alte und nicht verwendete Kernel manuell aus / boot zu entfernen.

Finden Sie zuerst heraus, welchen Kernel Sie ausführen.

uname -r

Entfernen Sie nicht Ihren aktuellen oder vorherigen Kernel.

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

Jetzt sollten Sie genügend Platz haben, um das automatische Entfernen von apt erneut zu versuchen. Wenn nicht, entfernen Sie einen anderen sehr alten Kernel. Natürlich immer aktuell und am ältesten.

nslntmnx
quelle
-2

Ich hoffe das kann helfen:

ich lösche normalerweise alte kerne mit ubuntu-tweak janitor, netter GUI und easy :)

Klicken Sie auf "System" und es wird eine Liste der alten Kernel angezeigt. Klicken Sie einfach darauf und bereinigen Sie sie

Mohur
quelle
1
Es ist ein Ubuntu-Server und ich bin durch Kitt verbunden. (Aber ich habe auch die Verfügbarkeit für Webmin auf dem Server)
Marcel
Wie kann ich diesen Ubuntu-Tweak-Hausmeister bitte installieren?
Jenny O'Reilly