# Udev Rules für USB-SSD Management ## Übersicht Diese Udev-Rules ermöglichen die automatische Erkennung und Verarbeitung von USB-C SSDs auf Linux-Systemen. Sie integrieren sich nahtlos mit dem USB-SSD Management System und bieten Hardware-Event-basierte Automatisierung. ## Verfügbare Rules ### `99-ssd-automount.rules` **Zweck**: Umfassende Udev-Rules für automatische SSD-Erkennung und -Management **Hauptfunktionen**: - Automatische USB Storage Device Erkennung - NTFS/exFAT Filesystem Detection - Device-Permissions und Ownership Management - Persistente Symlink-Erstellung - Systemd-Service Integration - Performance-Optimierungen - Security-Features ## Installation ### Standard-Installation ```bash # Rules-Datei kopieren sudo cp 99-ssd-automount.rules /etc/udev/rules.d/ # Udev-Rules neu laden sudo udevadm control --reload-rules # Bestehende Devices neu triggern sudo udevadm trigger # Installation verifizieren ls -la /etc/udev/rules.d/99-ssd-* ``` ### Test der Installation ```bash # USB-SSD anschließen und Events überwachen sudo udevadm monitor --environment --udev # Spezifisches Device testen sudo udevadm test /sys/block/sdb # Rule-Syntax validieren sudo udevadm test --action=add /sys/block/sdb ``` ## Rule-Kategorien ### 1. USB Storage Device Detection ```bash # Automatische Erkennung bei USB-Device-Anschluss SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="add", \ RUN+="/usr/local/bin/ssd-detect.sh --device %k --udev-mode" # Automatische Behandlung bei Device-Entfernung SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="remove", \ RUN+="/usr/local/bin/ssd-safe-eject.sh --device %k --udev-mode" ``` ### 2. Filesystem-spezifische Rules ```bash # NTFS-Partitionen automatisch mounten 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-Support 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" ``` ### 3. Device-Permissions ```bash # Basis-Berechtigungen für USB Storage SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ GROUP="disk", MODE="0660" # Erweiterte Berechtigungen für SSD-Management SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{ID_FS_TYPE}=="ntfs|exfat", \ GROUP="ssd-users", MODE="0664" ``` ### 4. Symlink-Management ```bash # UUID-basierte Symlinks SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", \ SYMLINK+="disk/by-ssd-uuid/$env{ID_FS_UUID}" # Label-basierte Symlinks SUBSYSTEM=="block", ENV{ID_FS_LABEL}!="", ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", \ SYMLINK+="disk/by-ssd-label/$env{ID_FS_LABEL}" ``` ## Vendor-spezifische Rules ### Samsung USB-C SSDs ```bash # Samsung-spezifische Erkennung 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 ```bash # SanDisk-spezifische Erkennung 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 ```bash # USB 3.0+ Devices 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" ``` ## Systemd-Integration ### Service-Aktivierung ```bash # Systemd-Service für spezifische Devices 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" # Service-Deaktivierung bei Entfernung SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/bin/systemctl stop ssd-mount@%k.service" ``` ## Performance-Optimierungen ### I/O-Scheduler ```bash # Optimaler I/O-Scheduler für USB-SSDs SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ATTR{queue/scheduler}="mq-deadline" ``` ### Read-Ahead Tuning ```bash # Read-Ahead Buffer optimieren SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ATTR{queue/read_ahead_kb}="1024" ``` ## Security-Features ### Autorisierte Benutzer ```bash # Zugriff nur für autorisierte Benutzer 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" ``` ### Device-Blacklist ```bash # Problematische Devices ignorieren SUBSYSTEM=="block", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", \ ENV{UDISKS_IGNORE}="1" ``` ## Environment-Variables ### Script-Konfiguration ```bash # 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 ```bash # Device-Details 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}" ``` ## Debugging und Troubleshooting ### Debug-Modus aktivieren ```bash # Debug-Logging aktivieren (auskommentiert in Produktion) 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}'" ``` ### Event-Monitoring ```bash # Udev-Events in Echtzeit überwachen sudo udevadm monitor --environment --udev # Spezifische Events filtern sudo udevadm monitor --subsystem-match=block --property-match=ID_BUS=usb # Event-Details anzeigen sudo udevadm info --query=all --name=/dev/sdb1 ``` ### Rule-Testing ```bash # Rule-Syntax testen sudo udevadm test /sys/block/sdb # Spezifische Action testen sudo udevadm test --action=add /sys/block/sdb # Rule-Matching prüfen sudo udevadm test --action=add /sys/block/sdb 2>&1 | grep "RUN" ``` ## Custom-Rules erstellen ### Basis-Template ```bash # Custom-Rule Template SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ENV{ID_FS_TYPE}=="ntfs", \ ATTRS{idVendor}=="YOUR_VENDOR", \ ACTION=="add", \ RUN+="/path/to/your/script.sh --device %k" ``` ### Erweiterte Matching-Kriterien ```bash # Mehrere Kriterien kombinieren SUBSYSTEM=="block", \ ENV{ID_BUS}=="usb", \ ATTRS{removable}=="1", \ ENV{ID_FS_TYPE}=="ntfs", \ ENV{ID_FS_LABEL}=="BACKUP*", \ ATTRS{size}=="976773168", \ ACTION=="add", \ RUN+="/usr/local/bin/backup-ssd-handler.sh --device %k" ``` ## Maintenance und Cleanup ### Automatische Bereinigung ```bash # Mount-Points bereinigen 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 entfernen SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/bin/rm -f /tmp/ssd-%k-*" ``` ### Log-Rotation ```bash # Log-Dateien rotieren SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \ ACTION=="remove", \ RUN+="/usr/sbin/logrotate -f /etc/logrotate.d/ssd-management" ``` ## Best Practices ### Produktionsumgebung 1. **Minimale Rules**: Nur notwendige Rules aktivieren 2. **Performance**: I/O-Optimierungen für kritische Systeme 3. **Security**: Strenge Berechtigungen und Autorisierung 4. **Logging**: Produktions-geeignetes Log-Level 5. **Testing**: Umfassende Tests vor Deployment ### Entwicklungsumgebung 1. **Debug-Logging**: Erweiterte Logging-Rules aktivieren 2. **Flexible-Matching**: Weniger restriktive Matching-Kriterien 3. **Rapid-Testing**: Schnelle Rule-Reload-Zyklen 4. **Monitoring**: Kontinuierliche Event-Überwachung ### Sicherheit 1. **Principle of Least Privilege**: Minimale Berechtigungen 2. **Device-Validation**: Nur vertrauenswürdige Devices 3. **Audit-Logging**: Vollständige Event-Protokollierung 4. **Access-Control**: Benutzer-basierte Zugriffskontrolle ## Troubleshooting ### Häufige Probleme #### Rules werden nicht ausgeführt ```bash # Rules-Syntax prüfen sudo udevadm test /sys/block/sdb # Rules neu laden sudo udevadm control --reload-rules sudo udevadm trigger # Permissions prüfen ls -la /etc/udev/rules.d/99-ssd-* ``` #### Scripts werden nicht gefunden ```bash # Script-Pfade prüfen which ssd-detect.sh ls -la /usr/local/bin/ssd-* # Permissions prüfen ls -la /usr/local/bin/ssd-detect.sh ``` #### Device-Matching funktioniert nicht ```bash # Device-Eigenschaften anzeigen sudo udevadm info --query=all --name=/dev/sdb1 # Matching-Kriterien testen sudo udevadm test --action=add /sys/block/sdb1 ``` ## Changelog ### Version 0.1.0 - Umfassende USB-SSD Detection Rules - Systemd-Service Integration - Performance-Optimierungen - Security-Features - Vendor-spezifische Rules - Debugging und Troubleshooting Support