Files
usb-ssd/examples/udev-rules
2025-08-07 19:28:22 +02:00
..
2025-08-07 19:28:22 +02:00
2025-08-07 19:28:22 +02:00

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

# 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

# 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

# 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

# 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

# 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"
# 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

# 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

# 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

# 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

# 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

# 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

# Read-Ahead Buffer optimieren
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
    ATTR{queue/read_ahead_kb}="1024"

Security-Features

Autorisierte Benutzer

# 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

# Problematische Devices ignorieren
SUBSYSTEM=="block", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", \
    ENV{UDISKS_IGNORE}="1"

Environment-Variables

Script-Konfiguration

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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