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

344 lines
9.1 KiB
Markdown

# 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