9.1 KiB
9.1 KiB
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"
4. Symlink-Management
# 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
- Minimale Rules: Nur notwendige Rules aktivieren
- Performance: I/O-Optimierungen für kritische Systeme
- Security: Strenge Berechtigungen und Autorisierung
- Logging: Produktions-geeignetes Log-Level
- Testing: Umfassende Tests vor Deployment
Entwicklungsumgebung
- Debug-Logging: Erweiterte Logging-Rules aktivieren
- Flexible-Matching: Weniger restriktive Matching-Kriterien
- Rapid-Testing: Schnelle Rule-Reload-Zyklen
- Monitoring: Kontinuierliche Event-Überwachung
Sicherheit
- Principle of Least Privilege: Minimale Berechtigungen
- Device-Validation: Nur vertrauenswürdige Devices
- Audit-Logging: Vollständige Event-Protokollierung
- 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