Setup installation
This commit is contained in:
343
examples/udev-rules/README.md
Normal file
343
examples/udev-rules/README.md
Normal file
@@ -0,0 +1,343 @@
|
||||
# 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
|
Reference in New Issue
Block a user