# USB-SSD Management System - Udev Rules # Automatische Erkennung und Mounting von USB-C SSDs # # Installation: # sudo cp 99-ssd-automount.rules /etc/udev/rules.d/ # sudo udevadm control --reload-rules # sudo udevadm trigger # ============================================================================ # USB Storage Device Detection # ============================================================================ # USB Mass Storage Devices - Automatische Erkennung SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="add", \ RUN+="/usr/local/bin/ssd-detect.sh --device %k --udev-mode" # USB Storage Devices - Entfernung SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="remove", \ RUN+="/usr/local/bin/ssd-safe-eject.sh --device %k --udev-mode" # ============================================================================ # NTFS Filesystem Detection # ============================================================================ # NTFS Partitionen - Automatisches Mounting SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ntfs", ENV{ID_BUS}=="usb", ACTION=="add", \ ATTRS{removable}=="1", \ RUN+="/usr/local/bin/ssd-mount-manager.sh mount --device /dev/%k --auto-mount" # exFAT Partitionen - Alternative Unterstützung SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="exfat", ENV{ID_BUS}=="usb", ACTION=="add", \ ATTRS{removable}=="1", \ RUN+="/usr/local/bin/ssd-mount-manager.sh mount --device /dev/%k --auto-mount" # ============================================================================ # Device Permissions und Ownership # ============================================================================ # USB Storage Devices - Berechtigungen setzen SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ GROUP="disk", MODE="0660" # Device-Nodes für SSD-Management Gruppe SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{ID_FS_TYPE}=="ntfs|exfat", \ GROUP="ssd-users", MODE="0664" # ============================================================================ # Symlink Creation # ============================================================================ # Persistente Symlinks basierend auf UUID SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", \ SYMLINK+="disk/by-ssd-uuid/$env{ID_FS_UUID}" # Symlinks basierend auf Label SUBSYSTEM=="block", ENV{ID_FS_LABEL}!="", ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", \ SYMLINK+="disk/by-ssd-label/$env{ID_FS_LABEL}" # ============================================================================ # Spezifische Vendor/Product Rules # ============================================================================ # Samsung USB-C SSDs SUBSYSTEM=="block", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="61f*", \ ACTION=="add", \ RUN+="/usr/local/bin/ssd-detect.sh --device %k --vendor samsung" # SanDisk USB-C SSDs SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="55*", \ ACTION=="add", \ RUN+="/usr/local/bin/ssd-detect.sh --device %k --vendor sandisk" # Generic USB 3.0+ Storage SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{bcdUSB}=="0300|0310|0320", \ ATTRS{removable}=="1", ACTION=="add", \ RUN+="/usr/local/bin/ssd-detect.sh --device %k --usb3-mode" # ============================================================================ # Environment Variables für Scripts # ============================================================================ # Udev-Modus für alle SSD-Scripts SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{SSD_UDEV_MODE}="true", \ ENV{SSD_LOG_LEVEL}="INFO", \ ENV{SSD_USE_SYSLOG}="true" # Device-Informationen für Scripts SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{SSD_DEVICE_PATH}="/dev/%k", \ ENV{SSD_DEVICE_UUID}="$env{ID_FS_UUID}", \ ENV{SSD_DEVICE_LABEL}="$env{ID_FS_LABEL}", \ ENV{SSD_DEVICE_TYPE}="$env{ID_FS_TYPE}" # ============================================================================ # Systemd Service Integration # ============================================================================ # Systemd-Service für spezifische Devices starten SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ntfs", ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", ACTION=="add", \ TAG+="systemd", ENV{SYSTEMD_WANTS}="ssd-mount@%k.service" # Systemd-Service bei Device-Entfernung stoppen SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/bin/systemctl stop ssd-mount@%k.service" # ============================================================================ # Logging und Debugging # ============================================================================ # Debug-Informationen loggen (nur bei Debug-Modus) # SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ # RUN+="/usr/bin/logger -t udev-ssd 'Device %k: Action=%E{ACTION}, Type=%E{ID_FS_TYPE}, UUID=%E{ID_FS_UUID}'" # ============================================================================ # Sicherheits-Rules # ============================================================================ # Nur autorisierte Benutzer können auf SSD-Devices zugreifen SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{ID_FS_TYPE}=="ntfs|exfat", \ TEST!="/etc/ssd-management/authorized_users", \ GROUP="root", MODE="0600" # Blacklist für bekannte problematische Devices SUBSYSTEM=="block", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", \ ENV{UDISKS_IGNORE}="1" # ============================================================================ # Performance-Optimierungen # ============================================================================ # I/O-Scheduler für USB-SSDs optimieren SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ATTR{queue/scheduler}="mq-deadline" # Read-Ahead für USB-SSDs optimieren SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ATTR{queue/read_ahead_kb}="1024" # ============================================================================ # Cleanup und Maintenance # ============================================================================ # Alte Mount-Points bereinigen bei Device-Entfernung SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/usr/local/bin/ssd-mount-manager.sh cleanup --device %k" # Temporäre Dateien bereinigen SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/bin/rm -f /tmp/ssd-%k-*"