Setup installation

This commit is contained in:
2025-08-07 19:28:22 +02:00
parent e3f6363844
commit 17d74b261d
19 changed files with 6144 additions and 0 deletions

View File

@@ -0,0 +1,347 @@
#!/bin/bash
# ssd-mount-manager.sh - USB-C SSD Mount Management
# Zweck: Flexibles Mounting verschiedener SSDs auf konstanten Mount-Point
set -e
# Konfiguration
MOUNT_POINT="/mnt/ssd-storage"
CONFIG_FILE="/etc/ssd-mount.conf"
LOG_FILE="/var/log/ssd-mount.log"
# Logging-Funktion
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | sudo tee -a "$LOG_FILE"
echo "$1"
}
# Konfigurationsdatei erstellen
create_config() {
log_message "Erstelle Konfigurationsdatei..."
sudo tee "$CONFIG_FILE" > /dev/null << EOF
# SSD Mount Manager Konfiguration
# Erstellt: $(date)
# Standard Mount-Point
MOUNT_POINT="$MOUNT_POINT"
# Standard Mount-Optionen für NTFS
MOUNT_OPTIONS="defaults,uid=1000,gid=1000,umask=002,fmask=111,noatime"
# Automatisches Unmounting bei Shutdown
AUTO_UMOUNT=true
# Backup der letzten gemounteten SSD
LAST_DEVICE=""
LAST_UUID=""
EOF
log_message "Konfiguration erstellt: $CONFIG_FILE"
}
# Konfiguration laden
load_config() {
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
create_config
source "$CONFIG_FILE"
fi
}
# Mount-Point vorbereiten
prepare_mount_point() {
log_message "Bereite Mount-Point vor: $MOUNT_POINT"
if [ ! -d "$MOUNT_POINT" ]; then
sudo mkdir -p "$MOUNT_POINT"
log_message "Mount-Point erstellt: $MOUNT_POINT"
fi
sudo chown root:root "$MOUNT_POINT"
sudo chmod 755 "$MOUNT_POINT"
log_message "Mount-Point Berechtigungen gesetzt"
}
# Aktuelle Mounts prüfen
check_current_mount() {
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
log_message "Aktuell gemountet: $mounted_device auf $MOUNT_POINT"
return 0
else
log_message "Kein Device auf $MOUNT_POINT gemountet"
return 1
fi
}
# Device unmounten
unmount_device() {
log_message "Unmounte Device von $MOUNT_POINT..."
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
log_message "Unmounte $mounted_device..."
sudo umount "$MOUNT_POINT"
log_message "Device erfolgreich unmountet"
# Letztes Device in Config speichern
update_last_device ""
else
log_message "Kein Device zum Unmounten gefunden"
fi
}
# Safe-Eject Funktion
safe_eject_device() {
log_message "Starte Safe-Eject Prozess..."
# Externes Safe-Eject Script aufrufen
if command -v ssd-safe-eject >/dev/null; then
ssd-safe-eject eject
else
# Fallback: Integrierte Safe-Eject Funktionalität
perform_integrated_safe_eject
fi
}
# Integrierte Safe-Eject Funktionalität
perform_integrated_safe_eject() {
if ! mountpoint -q "$MOUNT_POINT"; then
log_message "Keine SSD gemountet - Safe-Eject nicht erforderlich"
return 1
fi
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
device_base=$(echo "$mounted_device" | sed 's/[0-9]*$//')
log_message "Safe-Eject für $mounted_device..."
# Vollständiger Sync
log_message "Führe Sync durch..."
sync
sleep 2
# Unmount
log_message "Unmounte Device..."
if sudo umount "$MOUNT_POINT"; then
log_success "Unmount erfolgreich"
else
log_error "Unmount fehlgeschlagen"
return 1
fi
# Hardware-Eject
log_message "Hardware-Eject..."
if command -v eject >/dev/null; then
if sudo eject "$device_base" 2>/dev/null; then
log_success "Hardware-Eject erfolgreich"
else
log_warning "Hardware-Eject fehlgeschlagen"
fi
else
log_warning "eject Befehl nicht verfügbar"
fi
# Finaler Sync
sync
log_success "Safe-Eject abgeschlossen - SSD kann entfernt werden"
update_last_device ""
}
# Device mounten
mount_device() {
local device="$1"
if [ -z "$device" ]; then
log_message "Fehler: Kein Device angegeben"
return 1
fi
if [ ! -b "$device" ]; then
log_message "Fehler: Device $device existiert nicht"
return 1
fi
log_message "Mounte Device: $device"
# Prüfe ob bereits etwas gemountet ist
if mountpoint -q "$MOUNT_POINT"; then
log_message "Mount-Point bereits belegt - unmounte zuerst..."
unmount_device
fi
# Device mounten
log_message "Mounte $device auf $MOUNT_POINT mit Optionen: $MOUNT_OPTIONS"
sudo mount -t ntfs-3g -o "$MOUNT_OPTIONS" "$device" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
log_message "Mount erfolgreich: $device auf $MOUNT_POINT"
# Device-Info speichern
device_uuid=$(sudo blkid -s UUID -o value "$device")
update_last_device "$device" "$device_uuid"
# Mount-Status anzeigen
show_mount_status
return 0
else
log_message "Fehler beim Mounten von $device"
return 1
fi
}
# Letztes Device in Config updaten
update_last_device() {
local device="$1"
local uuid="$2"
sudo sed -i "s|LAST_DEVICE=.*|LAST_DEVICE=\"$device\"|" "$CONFIG_FILE"
sudo sed -i "s|LAST_UUID=.*|LAST_UUID=\"$uuid\"|" "$CONFIG_FILE"
}
# Mount-Status anzeigen
show_mount_status() {
echo ""
echo "=== Mount-Status ==="
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
echo "✓ Gemountet: $mounted_device"
echo "✓ Mount-Point: $MOUNT_POINT"
# Speicherplatz anzeigen
df -h "$MOUNT_POINT"
echo ""
# Device-Details
device_uuid=$(sudo blkid -s UUID -o value "$mounted_device")
device_label=$(sudo blkid -s LABEL -o value "$mounted_device" 2>/dev/null || echo "Kein Label")
echo "UUID: $device_uuid"
echo "Label: $device_label"
# Zugriffstest
if [ -r "$MOUNT_POINT" ]; then
echo "✓ Lesezugriff: OK"
else
echo "✗ Lesezugriff: Fehler"
fi
if [ -w "$MOUNT_POINT" ]; then
echo "✓ Schreibzugriff: OK"
else
echo "✗ Schreibzugriff: Fehler"
fi
else
echo "✗ Kein Device gemountet auf $MOUNT_POINT"
fi
echo ""
}
# Verfügbare NTFS-Devices auflisten
list_ntfs_devices() {
echo "=== Verfügbare NTFS-Devices ==="
lsblk -f | grep ntfs | while IFS= read -r line; do
device=$(echo "$line" | awk '{print "/dev/" $1}')
uuid=$(echo "$line" | awk '{print $3}')
label=$(echo "$line" | awk '{print $4}')
size=$(lsblk -o SIZE "$device" 2>/dev/null | tail -1)
echo "$device | $size | UUID: $uuid | Label: $label"
done
echo ""
}
# Automatisches Device-Detection
auto_detect_device() {
log_message "Automatische Device-Erkennung..."
# Suche nach NTFS-Partitionen auf USB-Devices
for device in /dev/sd[a-z][0-9]*; do
if [ -b "$device" ]; then
fstype=$(lsblk -o FSTYPE "$device" 2>/dev/null | tail -1 | xargs)
if [ "$fstype" = "ntfs" ]; then
size=$(lsblk -b -o SIZE "$device" 2>/dev/null | tail -1)
size_gb=$((size / 1024 / 1024 / 1024))
# Nur Devices > 100GB berücksichtigen (typisch für SSDs)
if [ $size_gb -gt 100 ]; then
log_message "NTFS-SSD gefunden: $device (${size_gb}GB)"
echo "$device"
return 0
fi
fi
fi
done
log_message "Keine geeignete NTFS-SSD gefunden"
return 1
}
# Hauptfunktion
main() {
echo "=== USB-C SSD Mount Manager ==="
echo "Version: 1.0"
echo ""
load_config
prepare_mount_point
case "${1:-status}" in
"mount")
if [ -n "$2" ]; then
mount_device "$2"
else
# Auto-Detection
auto_device=$(auto_detect_device)
if [ -n "$auto_device" ]; then
echo "Auto-erkanntes Device: $auto_device"
echo "Mounten? (y/n)"
read -r response
if [ "$response" = "y" ] || [ "$response" = "Y" ]; then
mount_device "$auto_device"
fi
else
echo "Kein Device auto-erkannt. Verfügbare Devices:"
list_ntfs_devices
fi
fi
;;
"unmount"|"umount")
unmount_device
;;
"safe-eject"|"eject")
safe_eject_device
;;
"status")
show_mount_status
;;
"list")
list_ntfs_devices
;;
"remount")
if check_current_mount; then
unmount_device
sleep 2
fi
auto_device=$(auto_detect_device)
if [ -n "$auto_device" ]; then
mount_device "$auto_device"
fi
;;
*)
echo "Verwendung: $0 {mount [device]|unmount|safe-eject|status|list|remount}"
echo ""
echo "Befehle:"
echo " mount [device] - Device mounten (auto-detect wenn kein device)"
echo " unmount - Device unmounten (einfach)"
echo " safe-eject - Sichere USB-C SSD Entfernung mit Hardware-Eject"
echo " status - Mount-Status anzeigen"
echo " list - Verfügbare NTFS-Devices auflisten"
echo " remount - Unmount + Auto-detect + Mount"
;;
esac
}
# Script ausführen
main "$@"