Warum entfernt apt-get autoremove meine alten Kernel nicht?


53

Meine Boot-Partition befindet sich auf einer SSD, sodass dort nicht mehr als 8 installierte Kernel-Versionen gespeichert werden können. Schließlich können einige Kernel-Updates nicht installiert werden, da meine Boot-Partition voll mit alten Versionen ist. Es gibt viele Fragen zum Entfernen alter Versionen (auch zum Automatisieren des Prozesses), aber meine Frage lautet einfach: Warum werden sie nicht apt-get autoremoveautomatisch erkannt und entfernt, und gibt es eine Möglichkeit, dies zu tun ? Ich meine, apt-getist das , was sie installiert hat, so dass es über sie Bescheid weiß, also warum wählt es, alle alten Versionen zu belassen?



1
Autoremove nicht entfernen alte Kernel unter den meisten Umständen. Kernel häufen sich an, da das System standardmäßig nicht automatisch automatisch entfernt wird. Dies ist eine Einstellung für unbeaufsichtigte Upgrades, die geändert werden kann. Autoremove kann alte Kernel nicht entfernen, wenn in der Warteschlange befindliche apt-Aktionen (wie das Installieren eines neuen Kernels) fehlschlagen (aufgrund von nicht genügend Speicherplatz). Siehe bugs.launchpad.net/bugs/1357093 für einen Patch unbeaufsichtigt-Upgrades , die werden automatisch alte Kernel entfernt beginnen.
user535733

Antworten:


36

Informationen zum Grund finden Sie in der Datei /etc/apt/apt.conf.d/01autoremove-kernels

Bildbeschreibung hier eingeben

Wie Sie sehen, wird apt angewiesen, die Kernel niemals automatisch zu entfernen, wie dies von einer anderen (Skript-) Datei mitgeteilt wird /etc/kernel/postinst.d/apt-auto-removal. Und hier ist es:

Bildbeschreibung hier eingeben

Wenn Sie 2 ausgewählte Kernel manuell installieren, dh den ersten und den aktuellen Kernel, entfernt apt-autoremove immer nur die älteren Versionen, die Sie nicht manuell installiert haben. Sie haben also immer diese 2 Optionen sowie die jeweils neuesten.

Aktualisieren:

Im /etc/kernel/postinst.d/apt-auto-removalgibt es diesen Teil:

if [ "$latest_version" != "$installed_version" ] \
   || [ "$latest_version" != "$running_version" ] \
   || [ "$installed_version" != "$running_version" ]
then
        # We have at least two kernels that we have reason to think the
        # user wants, so don't save the second-newest version.
        previous_version=
fi

Wenn Sie also die Ausgabe der 01autoremove-kernelsDatei vergleichen, werden uname -rSie feststellen, dass der aktuell ausgeführte Kernel und der zuletzt ausgeführte Kernel von diesem Skript niemals entfernt werden. Es stellt sich heraus, dass es eine andere Datei gibt /etc/apt/apt.conf.d/01autoremove, in der es Linien gibt:

    APT
    {
      NeverAutoRemove
      {
            "^firmware-linux.*";
            "^linux-firmware$";
      };
  VersionedKernelPackages
  {
        # linux kernels
        "linux-image";
        "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        # kfreebsd kernels
        "kfreebsd-image";
        "kfreebsd-headers";
        # hurd kernels
        "gnumach-image";
        # (out-of-tree) modules
        ".*-modules";
        ".*-kernel";
        "linux-backports-modules-.*";
        # tools
        "linux-tools";
  };

Sie können diese also auskommentieren und so die Kernel automatisch entfernen. Beachten Sie jedoch, dass Sie apt-autoremovedies auf Ihr eigenes Risiko tun


1
Sehr interessant! My /etc/apt/apt.conf.d/01autoremove-kernelshat viele Zeilen, aber nur zwei Versionen: 3.13.0. {39,43}. Aber dpkg -l linux-*listet vier Versionen auf, 3.13.0. {39,40,41,43}, was anderes als /etc/apt/apt.conf.d/01autoremove-kernelsdie Beibehaltung dieser mittleren Versionen, richtig?
BlueBomber

1
TL: DR: 01autoremoveist die Datei, die Sie wollen, 01autoremove-kernelsist wahrscheinlich nur ein Schutz, so dass Apt derzeit installierten Kernel und die neueste (nur für den Fall, dass die neuesten Schrauben)
Sergiy Kolodyazhnyy

1
Wenn ich nichts falsch verstehe 01autoremove, schützt es nur vor dem automatischen Entfernen von Abhängigkeitspaketen wie linux-image-extra. Das Ändern sollte keinen Einfluss darauf haben, ob eine linux-image-3.16.0-31-genericautomatische Entfernung durchgeführt wird oder nicht . Keines der darin enthaltenen Muster stimmt mit den Paketnamen überein, die automatisch entfernt werden sollen.
Peter Cordes

1
@PeterCordes Entfernen oder kommentieren Sie keine Zeilen in /etc/apt/apt.conf.d/01autoremove. Dies hilft Ihnen nicht beim automatischen Entfernen alter versionierter Kernelpakete, kann jedoch unerwünschte Auswirkungen haben. Die Datei schützt nicht vor dem automatischen Entfernen, linux-image-extrasondern Pakete, die regulären Ausdrücken im NeverAutoRemoveAbschnitt entsprechen.
jarno

2
@BlueBomber, der Grund, warum apt-get autoremovedie nicht aufgelisteten Kernel nicht entfernt werden, /etc/apt/apt.conf.d/01autoremove-kernelsist, dass diese Kernel als manuell installiert markiert sind. Siehe meine Antwort .
jarno

8

Für mich hat es geholfen, das neueste (X) Ubuntu (15.10) zu installieren. In früheren Versionen werden Kernelpakete möglicherweise als manuell installiert markiert, zumindest wenn sie mit Software Updater installiert wurden, sodass sudo apt-get autoremove --purgesie nicht gelöscht werden können. Es gibt Fehlerberichte bezüglich des Problems: Fehler # 1175637 , Fehler # 1439769

In früheren Versionen konnten Sie versuchen, automatisch installierte Kernelpakete zu markieren sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")und anschließend auszuführen, sudo apt-get autoremove --purgeum festzustellen, ob dies einen Unterschied macht. Der Befehl sollte weiterhin keine Kernelpakete entfernen, die in /etc/apt/apt.conf.d/01autoremove-kernels angezeigt werden. Es ist jedoch am sichersten, zuerst apt-get autoremovemit der --dry-runOption auszuführen .


Oh, der Autoremove-Befehl entfernt in der Regel zu viele Kernel, siehe Bug # 1440608
jarno 24.12.15

1
Das apt-markhat den Trick für mich getan und ich wünschte, ich könnte 10 mal höher stimmen: P
Mike Gleason jr. Couturier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.