HDD Tray ermitteln LED blinken
Beschreibung:
Es gibt ein tolles tool. Mit der man die LED zum Tray blinken lassen kann.
Noch ein kleines Script dazu wo man nur dass device angeben muss.
Durchführung:
apt-get install -y lsscsi sg3-utils
Festplatten anzeigen lassen:
lsscsi -g
Ausgabe:
[1:0:0:0] cd/dvd Slimtype DVD A DS8ACSH LP5M /dev/sr0 /dev/sg17
[3:0:0:0] disk SEAGATE XS400ME70004 0004 /dev/sda /dev/sg0
[3:0:1:0] disk SEAGATE ST20000NM002D E004 /dev/sdb /dev/sg1
[3:0:2:0] disk WDC WUS721010AL5204 C980 /dev/sdc /dev/sg2
[3:0:3:0] disk SEAGATE ST20000NM002D E006 /dev/sdd /dev/sg3
[3:0:4:0] disk WDC WUS721010AL5204 C980 /dev/sde /dev/sg4
[3:0:5:0] disk SEAGATE ST20000NM002D E006 /dev/sdf /dev/sg5
[3:0:6:0] disk WDC WUS721010AL5204 C980 /dev/sdg /dev/sg6
[3:0:7:0] disk WDC WUS721010AL5204 C980 /dev/sdh /dev/sg7
[3:0:8:0] disk WDC WUS721010AL5204 C980 /dev/sdi /dev/sg8
[3:0:9:0] disk WDC WUS721010AL5204 C980 /dev/sdj /dev/sg9
[3:0:10:0] disk WDC WUS721010AL5204 C980 /dev/sdk /dev/sg10
[3:0:11:0] disk SEAGATE XS400ME70004 0004 /dev/sdl /dev/sg11
[3:0:12:0] disk WDC WUS721010AL5204 C980 /dev/sdm /dev/sg12
[3:0:13:0] disk WDC WUS721010AL5204 C980 /dev/sdn /dev/sg13
[3:0:14:0] disk WDC WUS721010AL5204 C980 /dev/sdo /dev/sg14
[3:0:15:0] disk WDC WUS721010AL5204 C980 /dev/sdp /dev/sg15
[3:0:16:0] enclosu BROADCOM VirtualSES 03 - /dev/sg16
[4:0:0:0] cd/dvd AMI Virtual CDROM0 1.00 /dev/sr1 /dev/sg18
Script:
nano /root/identify-disk.sh
Inhalt
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<USAGE
Usage:
identify-disk [--on|--off|--blink SECONDS] /dev/sdXsdX|sdX|sdXn
Beispiele:
identify-disk --on /dev/sdf
# LED an
identify-disk --off /dev/sdf # LED aussdg
identify-disk --blink 15 /dev/sdfsdg8 # LEDPartition 15sok, an,wird dannzu aussdg Hinweis:
- Findet Slot (Target) und Enclosure (SES) automatisch über lsscsi.
- Funktioniert auf SAS-Backplanes mit SES/SGPIO. Bei HW-RAID ohne SES
ggf. herstellerspezifisches CLI (storcli/perccli/ssacli/arcconf) nötig.normalisiert
USAGE
}
# Defaults
MODE="on"; BLINK_SECS=0
# Args parsen
if
[[ $# -lt 1 ]]; then&& { usage; exit 1; fi}
while [[ $# -gt 0 ]]; do
case "${1:-}" in
--on) MODE="on"; shift ;;
--off) MODE="off"; shift ;;
--blink) MODE="blink"; BLINK_SECS="${2:-}"; [[ -z "$BLINK_SECS" ]] && { echo "FehlenderFehlende SekundenwertSekunden bei --blink"; exit 1; }; shift 2 ;;
-h|--help) usage; exit 0 ;;
*) DISK="$1"; shift ;;
esac
done
# Binärdateien prüfen
command -v lsscsi >/dev/null || { echo "lsscsi fehlt. Bitte installieren."fehlt"; exit 1; }
command -v sg_ses >/dev/null || { echo "sg3-utils (sg_ses) fehlt. Bitte installieren."fehlt"; exit 1; }
# /dev/sdX normalisierenPräfix if+ [[Partitionen weg (sdg8 -z> "${DISK:-}" ]]; then usage; exit 1; fi
ifsdg)
[[ "$DISK" =~ ^sd[a-z]+[0-9]*$sd ]]; then&& DISK="/dev/$DISK"
fiBASE="$(basename if"$DISK")"
BASE_NOPART="${BASE%%[0-9]*}" # strip trailing digits
DISK="/dev/$BASE_NOPART"
[[ ! -e "$DISK" ]]; then|| { echo "Gerät nicht gefunden: $DISK"; exit 11; fi}
# Zeile in lsscsi finden – robust: /dev/sdX als eigenes Feld, nicht am Zeilenende
LINE="$(lsscsi -g | awk -v d="$DISK" '$0 ~ (" [[:space:]]" d "$[[:space:]]"){print; exit}')"
if [[ -z "$LINE" ]]; then
# Fallback (manche lsscsi-Formate): prüfe explizit das Blockdev-Feld
LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
fi
[[ -n "$LINE" ]] || { echo "Konnte $DISK nicht in lsscsi -g finden."; exit 11; fi}
# H:B:T:L extrahieren
if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
HOST="${BASH_REMATCH[1]}"; BUS="${BASH_REMATCH[2]}"; TARGET="${BASH_REMATCH[3]}" # das ist dein Slot/Schacht-Index; LUN="${BASH_REMATCH[4]}"
else
echo "Konnte SCSI-Adresse nicht parsen."; exit 1
fi
# Passendes SES-EnclosureSES (enclosure) auf gleichem Host:Bus finden
# Beispiel-Zeile: [3:0:16:0] enclosu BROADCOM VirtualSES ... /dev/sg16
SES_LINE="$(lsscsi -g | awk -v h="$HOST" -v b="$BUS" '
$2=="enclosu" && $1 ~ ("\\["h":"b":"){print; {print}
exit}' | head -n1))"
if
[[ -zn "$SES_LINE" ]]; then|| { echo "Kein SES/Enclosure auf Host:Bus ${HOST}:${BUS} gefunden."
echo "Dein Controller spricht evtl. kein SES direktgefunden (HW-RAID?) – nutzeNutze Hersteller-CLI.CLI)."; exit 11; fi
# SES /dev/sgX extrahieren (letztes Feld ist /dev/sgN)}
SES_DEV="$(echo "$SES_LINE" | awk '{print $NF}')"
if [[ ! -e "$SES_DEV" ]]; then|| { echo "SES-Gerät existiert nicht: $SES_DEV"; exit 11; fi
# Aktion ausführen}
case "$MODE" in
on) sg_ses --index="$TARGET" --set=ident "$SES_DEV"; echo "Identify-LED anan: (Slot $TARGET ($DISK) über $SES_DEV) – für $DISK"
SES_DEV";;
off) sg_ses --index="$TARGET" --clear=ident "$SES_DEV"; echo "Identify-LED ausaus: (Slot $TARGET ($DISK) über $SES_DEV) – für $DISK"
SES_DEV";;
blink) sg_ses --index="$TARGET" --set=ident "$SES_DEV"; echo "Identify-LED an (Slot $TARGET) – blinkefür $BLINK_SECS s…s: Slot $TARGET ($DISK)"; sleep "$BLINK_SECS"; sg_ses --index="$TARGET" --clear=ident "$SES_DEV"; echo "Identify-LED wieder aus."
;;
*)
usage; exit 1 ;;
esac
Ausführbar machen
chmod +x /root/identify-disk.sh