#!/bin/bash # === PVE Kernel Cleaner Script === # Kompatibel mit EFI & BIOS, erkennt ZFS Pools und prüft Belegung # Erkennt auch Subscription-Status # Autor: Patrick Perlbach # Datum: 2025-06-20 set -e echo "==== PVE Kernel Cleaner ====" echo "" # 1. Prüfen ob EFI oder BIOS if [ -d /sys/firmware/efi ]; then echo "Bootmodus: EFI" else echo "Bootmodus: BIOS (Legacy)" fi # 1.1 Subscription-Status prüfen echo "" echo "APT-Repositories:" repo_files=$(find /etc/apt/ -name "*.list") if grep -rq "enterprise.proxmox.com" $repo_files; then echo "PVE Enterprise Repository (Subscription) ist aktiv" elif grep -rq "no-subscription" $repo_files; then echo "PVE No-Subscription Repository ist aktiv" else echo "Kein bekanntes PVE Repository aktiv, prüfe apt-Sources manuell" fi echo "" # 2. ZFS Pools prüfen echo "ZFS Pool Übersicht:" if command -v zpool &> /dev/null; then zpool list -Ho name,capacity | while read -r pool cap; do cap_num=$(echo $cap | tr -d '%') warn="" if (( cap_num >= 80 )); then warn="ACHTUNG: >80% belegt" fi echo " → $pool: $cap $warn" done else echo "ZFS ist nicht installiert oder zpool-Befehl nicht verfügbar." fi echo "" # 3. Liste der installierten PVE-Kernel anzeigen und alte Kernel identifizieren echo "Installierte PVE-Kernel:" kernel_list=$(dpkg --list | grep pve-kernel | awk '{print $2}' | sort -V) current_kernel=$(uname -r | cut -d '-' -f1-2) to_remove=() while read -r kernel; do version=$(echo "$kernel" | sed -n 's/^pve-kernel-\([0-9.]*-[0-9]*\).*/\1/p') if [ "$version" == "$current_kernel" ]; then echo " * $kernel (aktuell in Verwendung)" else echo " - $kernel (alt)" to_remove+=("$kernel") fi done <<< "$kernel_list" echo "" if [ ${#to_remove[@]} -eq 0 ]; then echo "Keine alten Kernel gefunden, nichts zu tun." exit 0 fi # 4. Nutzerabfrage zur Entfernung echo "Die folgenden alten Kernel könnten entfernt werden:" for k in "${to_remove[@]}"; do echo " - $k" done echo "" read -p "Möchtest du diese alten Kernel jetzt entfernen? (j/n): " confirm if [[ "$confirm" =~ ^[Jj]$ ]]; then echo "Entferne alte Kernel..." apt remove --purge -y "${to_remove[@]}" echo "Alte Kernel wurden entfernt." else echo "Abbruch, keine Kernel wurden entfernt." fi echo "" echo "==== Fertig ===="