I created a smart version for UserScript plugin. You might need to translate the messages. Feel free to use it. #!/usr/bin/env bash
#description=Maximale Stabilität mit sauberem Status-Abschluss für Unraid v7.
#name=Smart Disk Cache Pro Final
SUCCESS_COUNT=0
ERROR_COUNT=0
TOTAL_COUNT=0
ERROR_LIST=""
# Funktion zum Auffüllen mit Punkten (für die Spaltenmitten)
fill() {
local str="$1"
local len="$2"
local dot=".................................................."
local res="${str}${dot}"
echo "${res:0:len}"
}
echo "Prüfung: $(date '+%Y-%m-%d %H:%M:%S')"
echo "----------------------------------------------------------------------------------------------------"
# KOPFZEILE: Status ohne Punkte am Ende
H_DEV=$(fill "Device" 10)
H_DRV=$(fill "Driver" 8)
H_TYP=$(fill "Typ" 5)
H_MOD=$(fill "Modell" 25)
H_SER=$(fill "Serial" 20)
H_STA="Status" # Hier keine Punkte
echo "${H_DEV} ${H_DRV} ${H_TYP} ${H_MOD} ${H_SER} ${H_STA}"
echo "----------------------------------------------------------------------------------------------------"
for DRIVE_PATH in /sys/block/sd*; do
DEV=$(basename "$DRIVE_PATH")
NODE="/dev/$DEV"
[ -e "$NODE" ] || continue
# USB-Geräte ignorieren
if [[ $(readlink -f "$DRIVE_PATH") == *"usb"* ]]; then continue; fi
((TOTAL_COUNT++))
# 1. Hardware Info sammeln
INFO=$(smartctl -i "$NODE")
IFACE="SATA"
echo "$INFO" | grep -qi "SAS" && IFACE="SAS"
MODEL=$(echo "$INFO" | grep -Ei "Device Model:|Vendor:" | head -1 | awk -F: '{print $2}' | xargs)
SERIAL=$(echo "$INFO" | grep -i "Serial Number:" | awk -F: '{print $2}' | xargs)
DRIVER=$(basename $(readlink "$DRIVE_PATH/device/driver" 2>/dev/null) 2>/dev/null || echo "???")
# 2. Cache-Aktivierung (hdparm & smartctl persistent)
hdparm -W 1 "$NODE" &>/dev/null
hdparm -A 1 "$NODE" &>/dev/null
smartctl -s wcache-sct,on,p "$NODE" &>/dev/null
smartctl -s lookahead,on "$NODE" &>/dev/null
# 3. Validierung je nach Interface
RAW_STATUS="FEHLER"
if [[ "$IFACE" == "SATA" ]]; then
hdparm -W "$NODE" 2>/dev/null | grep -q "1" && RAW_STATUS="AKTIV"
else
smartctl -g wcache "$NODE" 2>/dev/null | grep -qi "Enabled" && RAW_STATUS="AKTIV"
fi
# 4. Status-Formatierung & Statistik
if [ "$RAW_STATUS" == "AKTIV" ]; then
((SUCCESS_COUNT++))
FMT_STATUS="[AKTIV]"
else
((ERROR_COUNT++))
FMT_STATUS="[FEHLER]"
ERROR_LIST+="$DEV, "
fi
# 5. Datenzeilen: Spalten mit Punkten, Status am Ende frei
P_DEV=$(fill "/dev/$DEV" 10)
P_DRV=$(fill "$DRIVER" 8)
P_TYP=$(fill "$IFACE" 5)
P_MOD=$(fill "${MODEL:0:24}" 25)
P_SER=$(fill "${SERIAL:0:19}" 20)
echo "${P_DEV} ${P_DRV} ${P_TYP} ${P_MOD} ${P_SER} ${FMT_STATUS}"
done
echo "----------------------------------------------------------------------------------------------------"
# --- Unraid v7 Notification Engine ---
NOTIFY_BIN="/usr/bin/notify"
if [ $ERROR_COUNT -eq 0 ]; then
[ -x "$NOTIFY_BIN" ] && $NOTIFY_BIN -e "Disk Cache Optimizer" -d "Alle $SUCCESS_COUNT Laufwerke optimiert." -i "normal"
echo "Zusammenfassung: Alle $SUCCESS_COUNT Laufwerke sind aktiv."
else
CLEAN_ERROR_LIST=$(echo "$ERROR_LIST" | sed 's/, $//')
[ -x "$NOTIFY_BIN" ] && $NOTIFY_BIN -e "Disk Cache ERROR" -d "$ERROR_COUNT Fehler!" -m "Betroffen: $CLEAN_ERROR_LIST" -i "alert"
echo "Zusammenfassung: $ERROR_COUNT FEHLER gemeldet! ($CLEAN_ERROR_LIST)"
fi
echo "Script abgeschlossen."