159 lines
6.4 KiB
Plaintext
159 lines
6.4 KiB
Plaintext
# USB-SSD Management System - Udev Rules
|
|
# Automatische Erkennung und Mounting von USB-C SSDs
|
|
#
|
|
# Installation:
|
|
# sudo cp 99-ssd-automount.rules /etc/udev/rules.d/
|
|
# sudo udevadm control --reload-rules
|
|
# sudo udevadm trigger
|
|
|
|
# ============================================================================
|
|
# USB Storage Device Detection
|
|
# ============================================================================
|
|
|
|
# USB Mass Storage Devices - Automatische Erkennung
|
|
SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="add", \
|
|
RUN+="/usr/local/bin/ssd-detect.sh --device %k --udev-mode"
|
|
|
|
# USB Storage Devices - Entfernung
|
|
SUBSYSTEM=="block", ATTRS{removable}=="1", ENV{ID_BUS}=="usb", ACTION=="remove", \
|
|
RUN+="/usr/local/bin/ssd-safe-eject.sh --device %k --udev-mode"
|
|
|
|
# ============================================================================
|
|
# NTFS Filesystem Detection
|
|
# ============================================================================
|
|
|
|
# NTFS Partitionen - Automatisches Mounting
|
|
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 Partitionen - Alternative Unterstützung
|
|
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"
|
|
|
|
# ============================================================================
|
|
# Device Permissions und Ownership
|
|
# ============================================================================
|
|
|
|
# USB Storage Devices - Berechtigungen setzen
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
GROUP="disk", MODE="0660"
|
|
|
|
# Device-Nodes für SSD-Management Gruppe
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
ENV{ID_FS_TYPE}=="ntfs|exfat", \
|
|
GROUP="ssd-users", MODE="0664"
|
|
|
|
# ============================================================================
|
|
# Symlink Creation
|
|
# ============================================================================
|
|
|
|
# Persistente Symlinks basierend auf UUID
|
|
SUBSYSTEM=="block", ENV{ID_FS_UUID}!="", ENV{ID_BUS}=="usb", \
|
|
ATTRS{removable}=="1", \
|
|
SYMLINK+="disk/by-ssd-uuid/$env{ID_FS_UUID}"
|
|
|
|
# Symlinks basierend auf Label
|
|
SUBSYSTEM=="block", ENV{ID_FS_LABEL}!="", ENV{ID_BUS}=="usb", \
|
|
ATTRS{removable}=="1", \
|
|
SYMLINK+="disk/by-ssd-label/$env{ID_FS_LABEL}"
|
|
|
|
# ============================================================================
|
|
# Spezifische Vendor/Product Rules
|
|
# ============================================================================
|
|
|
|
# Samsung USB-C SSDs
|
|
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
|
|
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
|
|
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"
|
|
|
|
# ============================================================================
|
|
# Environment Variables für Scripts
|
|
# ============================================================================
|
|
|
|
# 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 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}"
|
|
|
|
# ============================================================================
|
|
# Systemd Service Integration
|
|
# ============================================================================
|
|
|
|
# Systemd-Service für spezifische Devices starten
|
|
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"
|
|
|
|
# Systemd-Service bei Device-Entfernung stoppen
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
ACTION=="remove", \
|
|
RUN+="/bin/systemctl stop ssd-mount@%k.service"
|
|
|
|
# ============================================================================
|
|
# Logging und Debugging
|
|
# ============================================================================
|
|
|
|
# Debug-Informationen loggen (nur bei Debug-Modus)
|
|
# 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}'"
|
|
|
|
# ============================================================================
|
|
# Sicherheits-Rules
|
|
# ============================================================================
|
|
|
|
# Nur autorisierte Benutzer können auf SSD-Devices zugreifen
|
|
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"
|
|
|
|
# Blacklist für bekannte problematische Devices
|
|
SUBSYSTEM=="block", ATTRS{idVendor}=="0000", ATTRS{idProduct}=="0000", \
|
|
ENV{UDISKS_IGNORE}="1"
|
|
|
|
# ============================================================================
|
|
# Performance-Optimierungen
|
|
# ============================================================================
|
|
|
|
# I/O-Scheduler für USB-SSDs optimieren
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
ATTR{queue/scheduler}="mq-deadline"
|
|
|
|
# Read-Ahead für USB-SSDs optimieren
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
ATTR{queue/read_ahead_kb}="1024"
|
|
|
|
# ============================================================================
|
|
# Cleanup und Maintenance
|
|
# ============================================================================
|
|
|
|
# Alte Mount-Points bereinigen bei Device-Entfernung
|
|
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 bereinigen
|
|
SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ATTRS{removable}=="1", \
|
|
ACTION=="remove", \
|
|
RUN+="/bin/rm -f /tmp/ssd-%k-*"
|