Falscher Fehler bei vollem Datenträger: apt-get kann nicht installiert oder entfernt werden

24

Beim Upgrade meines Ubuntu 12.04-Servers ist der folgende Fehler aufgetreten. Jetzt apt-getkann kein Paket installiert oder entfernt werden.

Entpacken von linux-headers-3.13.0-62 (von ... / linux-headers-3.13.0-62_3.13.0-62.102 ~ exact1_all.deb) ...
dpkg: Fehler bei der Verarbeitung von /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack):
 /usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new kann nicht erstellt werden 
(während der Verarbeitung von `./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h '): Auf dem Gerät ist 
kein Speicherplatz mehr vorhanden. Es wurde kein Apport-Bericht geschrieben, da die Fehlermeldung auf einen Datenträger hinweist voller Fehler
 dpkg-deb: Fehler: Einfügen von Unterprozessen wurde durch ein Signal abgebrochen (Rohrbruch)
Bei der Verarbeitung sind Fehler aufgetreten:
 /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb
E: Unterprozess / usr / bin / dpkg hat einen Fehlercode zurückgegeben (1)

Obwohl mir nicht wirklich der Speicherplatz ausgeht,

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  4.7G  1.8G  69% /  

Wie auch immer, meine Inodes sind voll,

# df -i
Filesystem     Inodes   IUsed  IFree IUse% Mounted on
/dev/sda1      458752  455214   3538  100% /

Ich habe mehr als zehn alte Kernel, aber ich kann diese nicht entfernen, da mein Kernel apt-getselbst lahm ist. Daher kann ich diesem Beitrag, der ein ähnliches Problem meldet, nicht folgen .

Die einzige Möglichkeit scheint, einige ältere Kernel manuell zu löschen. Wird es ein Problem verursachen?

Gibt es einen besseren Ausweg? Kann ich vorerst reservierten Platz für root nutzen und ältere Kernel entfernen?

souravc
quelle
1
Tatsächlich habe ich einige ältere Kernel manuell entfernt /usr/src, um die Situation loszuwerden. Zum Glück ging alles gut und aptfing wieder an zu arbeiten. Aber ich werde Sie bitten, sich wieder anzuschließen, bevor Sie so etwas auf einer Produktionsmaschine machen. Ich habe es auf einer virtuellen Maschine gemacht, die ein vollständiges Backup hatte.
souravc
Es klappt! Ich habe dasselbe hier getan (Ubutu 14.04.1), um auf Kernel 4.4.0-51-generic zu aktualisieren. Ich bin mir nur nicht sicher, ob es in Zukunft Probleme geben wird. Vielen Dank.
Moreno

Antworten:

36

Ich weiß, dass dieser Beitrag etwas alt ist, aber ich habe hier eine Antwort für jeden gefunden, der über diesen Beitrag stolpert: https://help.ubuntu.com/community/RemoveOldKernels

Für den Fall, dass dieser Link nicht funktioniert, finden Sie hier das entsprechende Snippet:

Alte Kernel sicher entfernen

Für Benutzer von LVM-Systemen, verschlüsselten Systemen oder Systemen mit begrenztem Speicher besteht das häufigste Problem darin, dass die / boot-Partition einfach voll ist. Der Paketmanager kann aus Platzgründen kein ausstehendes Upgrade installieren. Außerdem kann apt-get ein Paket aufgrund einer unterbrochenen Abhängigkeit nicht entfernen.

Dieses Problem kann schnell und einfach von der Shell aus behoben werden. Identifizieren Sie einfach einen oder zwei alte Kernel, die manuell entfernt werden sollen, damit der Paketmanager genügend Speicherplatz für die Installation des Upgrades in der Warteschlange hat.


$ sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*  
                                  ## In Ubuntu 16.04 and earlier there may be leftover temporary
                                  ## files to delete.
                                  ## See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814345

$ uname -r                        ## This command identifies the currently-running kernel
4.2.0-21-generic                  ## This is the current kernel.
                                  ## DO NOT REMOVE it!

$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)
                                  ## This command lists all the kernels excluding the booted
                                  ## kernel in the package database, and their status.
rc  linux-image-4.2.0-14-generic  ## The oldest kernel in the database
                                  ## Status 'rc' means it's already been removed
ii  linux-image-4.2.0-15-generic  ## The oldest installed kernel. Eligible for removal.
                                  ## Status 'ii' means Installed.
ii  linux-image-4.2.0-16-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-18-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-19-generic  ## The previous good kernel. Keep
iU  linux-image-4.2.0-22-generic  ## DO NOT REMOVE. Status 'iU' means it's not installed,
                                  ## but queued for install in apt.
                                  ## This is the package we want apt to install.

                                  ## Purge the oldest kernel package using dpkg instead of apt.
                                  ## First you need to remove the image initrd.img file manually
                                  ## due to Bug #1678187.
$ sudo update-initramfs -d -k 4.2.0-15-generic
$ sudo dpkg --purge linux-image-4.2.0-15-generic linux-image-extra-4.2.0-15-generic
                                  ## If the previous command fails, some installed package
                                  ## depends on the kernel. The output of dpkg tells the name
                                  ## of the package. Purge it first.

                                  ## Also purge the respective header package.
$ sudo dpkg --purge linux-headers-4.2.0-15-generic
                                  ## Try also purging the common header package.
$ sudo dpkg --purge linux-headers-4.2.0-15
                                  ## Do not worry, if the previous command fails.

$ sudo apt-get -f install         ## Try to fix the broken dependency.

Ich folgte mit:

sudo apt-get autoremove --purge
Junkle
quelle
9

Ich fand jetzt einen Ausweg aus der Situation und entfernte ein paar ältere Kernel aus /usr/src, um die Situation loszuwerden. Zum Glück ging alles gut und apt begann wieder zu arbeiten.

Es wird dringend empfohlen, vor dem Entfernen älterer Kernel auf einer Produktionsmaschine ein Backup durchzuführen.

souravc
quelle
Jede bessere Lösung ist immer noch willkommen. Ich poste diesen Kommentar als Antwort, da es jemandem helfen kann.
Souravc
1
Nachdem einige alte Kernel entfernt und ausgeführt apt-get autoremove und einige Abhängigkeiten installiert wurden, wurden apt-get -f installmeine Probleme
behoben
DANKE DIR. Ich entfernte alle der linux- * unter /bootaber nicht genutzt , dkpgso gibt es immer noch die waren *-headerDateien in/usr/src
Dylan Pierce