Ich wurde heute mal wieder von zabbix darauf aufmerksam gemacht, das auf einem System keine Inodes mehr frei sind. Also drauf und mal nachgeschaut was da los ist und wie zu vermuten war, lagen da wieder um die 20 Versionen alter Kernel und Header auf dem System. Ein apt-get autoremove wurde aber mit nicht erfüllten Abhänigkeiten seitens des aktuellen Kernels angetan. Also mal ein apt-get install -f und schauen was er sagt:
(Lese Datenbank ... 478551 Dateien und Verzeichnisse sind derzeit installiert.) Entpacke linux-headers-2.6.32-54 (aus .../linux-headers-2.6.32-54_2.6.32-54.116_all.deb) ... dpkg: Fehler beim Bearbeiten von /var/cache/apt/archives/linux-headers-2.6.32-54_2.6.32-54.116_all.deb (--unpack): Konnte »/usr/src/linux-headers-2.6.32-54/drivers/scsi/osd/Kbuild.dpkg-new« nicht anlegen (während der Verarbeitung von »./usr/src/linux-headers-2.6.32-54/drivers/scsi/osd/Kbuild«): Auf dem Gerät ist kein Speicherplatz mehr verfügbar Es wurde kein Apport-Bericht verfasst, da die Fehlermeldung auf einen Fehler wegen voller Festplatte hindeutet dpkg-deb: Unterprozess einfügen mit Signal (Datenübergabe unterbrochen (broken pipe)) getötet Fehler traten auf beim Bearbeiten von: /var/cache/apt/archives/linux-headers-2.6.32-54_2.6.32-54.116_all.deb E: Sub-process /usr/bin/dpkg returned an error code (1)
Es sind also noch so wenige Inodes frei, das er noch nicht einmal die fehlende Paket installieren kann. Nach etwas hin und herprobieren merkte dann Christoph an das ich doch mal versuchen sollte ein paar Kernel mit dpkg zu deinstallieren, was auch funktionierte. Im Anschluss lief dann auch das apt-get autoremove durch und am Ende waren dann statt
/dev/vda1 498736 494193 4543 100% /
wieder
/dev/vda1 498736 141814 356922 29% /
frei.
Um das nun dauerhaft zu umgehen, wollen wir die alten Kernel Header automatisch entfernen lassen. Dies kann man erreichen indem man in der Datei /etc/apt/apt.conf.d/50unattended-upgrades die Zeile
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
nach
Unattended-Upgrade::Remove-Unused-Dependencies "true";
ändert. Außerdem entfernt oder kommentiert man die Zeile
"^linux-image.*";
in der Sektion „NeverAutoRemove“ der Datei /etc/apt/apt.conf.d/01autoremove.
[Update]
In Ubuntu 12.04 und Debian existiert diese Zeile allerdings nicht mehr
"^linux-image.*";
in der 01autoremove, dafür gibt es nun die 01autoremove-kernels. Diese wird automatisch generiert durch /etc/kernel/postinst.d/apt-auto-removal und enthält die aktuellen Versionen.
Danke an darksider3
darksider3
In der 01autoremove-kernels werden übrigens alle Kernel(jedenfalls bei Debian) ausgeschlossen, was ich nicht bearbeiten würde…
Ansonsten sehr hilfreich :-)
Sebastian
Durch deinen Hinweis ist mir gerade aufgefallen das die Zeile “^linux-image.*”; unter Precise wohl gar nicht mehr exisitiert. Das beschriebene System, wo ich das gemacht hab war noch nenn Lucid.
Danke dir für den Hinweis ;-)