344 lines
9.1 KiB
Markdown
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
|