Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:server:alte-kernel-loeschen]] 

Alte Kernel löschen

Bei Updates wird immer wieder mal ein neuer Kernel installiert, alte Kernel werden aber nicht automatisch entfernt. Dies ist vor allem dann ärgerlich, wenn /boot auf einer eigenen Partition liegt, die durch die alten Kernel vollläuft.

Das Skript purge-old-kernels ist dazu gedacht, hier aufzuräumen. Standardmäßig wird der aktuell verwendete und ein weiterer Kernel behalten, alle anderen Kernel werden samt der zugehörigen Header und etwaiger Extensions gelöscht.

Im Skript kann man einstellen, ob man aptitude oder apt-get verwenden möchte.

Optionen sind:

purge-old-kernels -s

Es wird nur angezeigt, was passieren würde, wenn man das -s weglässt.

purge-old-kernels --keep 4

Es werden vier Kernel behalten (der aktuell laufende und weitere drei).

Und hier ist das Skript:

#!/bin/bash
#
# purge-old-kernels - remove old kernel packages
# Copyright (C) 2012 Dustin Kirkland <kirkland@ubuntu.com>
#
# Authors: Dustin Kirkland <kirkland@ubuntu.com>
# Kees Cook <kees@ubuntu.com>
#
# Minor modifications by Jörg Richter
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
 
# Ensure we're running as root
if [ "$(id -u)" != 0 ]; then
    echo "ERROR: This script must run as root. Hint..." 1>&2
    echo " sudo $0 $@" 1>&2
    exit 1
fi
 
# aptitude or apt-get?
APT="aptitude"
#APT="apt-get"
 
# NOTE: This script will ALWAYS keep the currently running kernel
# NOTE: Default is to keep 2 more, user overrides with --keep N
KEEP=2
SIMULATE="0"
 
# NOTE: Any unrecognized option will be passed straight through to apt-get/aptitude
APT_OPTS=
while [ ! -z "$1" ]; do
    case "$1" in
        --keep)
            # User specified the number of kernels to keep
            KEEP="$2"
            shift 2
        ;;
        -s)
            # User specified the number of kernels to keep
            SIMULATE="1"
            shift 1
        ;;
        *)
            APT_OPTS="$APT_OPTS $1"
            shift 1
        ;;
    esac
done
 
# Build our list of kernel packages to purge
# Original code, keeps non-generic linux-headers
#CANDIDATES=$(ls -tr /boot/vmlinuz-* | head -n -${KEEP} | grep -v "$(uname -r)$" | cut -d- -f2- | awk '{print "linux-image-" $0 " linux-image-extra-" $0 " linux-headers-" $0 " linux-headers-" ${0}}' )
 
CANDIDATES=""
for v in $(ls -tr /boot/vmlinuz-* | head -n -${KEEP} | grep -v "$(uname -r)$" | cut -d- -f2-); do
    CANDIDATES="$CANDIDATES linux-image-$v linux-image-extra-$v linux-headers-$v linux-headers-${v%-generic}"
done
 
 
 
for c in $CANDIDATES; do
    dpkg-query -s "$c" >/dev/null 2>&1 && PURGE="$PURGE $c"
done
 
if [ -z "$PURGE" ]; then
    echo "No kernels are eligible for removal"
    exit 0
fi
 
if [ "$SIMULATE" = "1" ]; then
    echo "$APT $APT_OPTS purge $PURGE"
else
    $APT $APT_OPTS purge $PURGE
fi
 [[anwenderwiki:server:alte-kernel-loeschen]] anwenderwiki/server/alte-kernel-loeschen.txt · Zuletzt geändert: 2016/06/20 22:07 von 127.0.0.1