Setup installation

This commit is contained in:
2025-08-07 19:28:22 +02:00
parent e3f6363844
commit 17d74b261d
19 changed files with 6144 additions and 0 deletions

View File

@@ -0,0 +1,349 @@
# SSD Testing Module
## Übersicht
Das SSD Testing Module bietet umfassende Qualitätssicherung für USB-C SSDs mit 11 spezialisierten Tests, Performance-Messung und SMB-Bereitschaftsprüfung. Es gewährleistet die Zuverlässigkeit und Kompatibilität der Storage-Infrastruktur.
## Hauptkomponenten
### `ssd-test-suite.sh`
**Zweck**: Umfassende Qualitätssicherung und Performance-Messung
**Test-Kategorien**:
- **Hardware-Tests**: Connectivity, Power, Temperature
- **Filesystem-Tests**: NTFS-Integrität, Permissions, Capacity
- **Performance-Tests**: Read/Write Speed, IOPS, Latency
- **Integration-Tests**: SMB-Bereitschaft, Mount-Stabilität
- **Security-Tests**: Access-Control, Encryption-Support
## Test-Suite Übersicht
### Die 11 Kern-Tests
| Test-ID | Name | Zweck | Dauer |
|---------|------|-------|-------|
| `T01` | **Hardware Detection** | USB-C Connectivity und Device-Recognition | 5s |
| `T02` | **NTFS Filesystem** | Dateisystem-Integrität und Kompatibilität | 10s |
| `T03` | **Mount Stability** | Mount/Unmount Zyklen und Stabilität | 30s |
| `T04` | **Read Performance** | Sequential und Random Read-Geschwindigkeit | 60s |
| `T05` | **Write Performance** | Sequential und Random Write-Geschwindigkeit | 60s |
| `T06` | **File Operations** | Create, Copy, Delete, Rename Operationen | 45s |
| `T07` | **Permission System** | Linux-Permissions und NTFS-ACLs | 15s |
| `T08` | **SMB Readiness** | SMB-Freigabe Kompatibilität und Performance | 30s |
| `T09` | **Capacity Verification** | Verfügbarer Speicher und Fragmentierung | 20s |
| `T10` | **Error Handling** | Fehlerbehandlung und Recovery-Mechanismen | 25s |
| `T11` | **Security Scan** | Access-Control und Encryption-Support | 40s |
## Verwendung
### Grundlegende Test-Ausführung
```bash
# Alle Tests ausführen
./ssd-test-suite.sh all
# Spezifischen Test ausführen
./ssd-test-suite.sh T01
# Test-Kategorie ausführen
./ssd-test-suite.sh --category hardware
./ssd-test-suite.sh --category performance
./ssd-test-suite.sh --category integration
```
### Erweiterte Test-Optionen
```bash
# Schnelle Tests (nur kritische)
./ssd-test-suite.sh --quick
# Umfassende Tests (alle mit erweiterten Parametern)
./ssd-test-suite.sh --comprehensive
# Performance-Benchmark
./ssd-test-suite.sh --benchmark
# Kontinuierliche Tests
./ssd-test-suite.sh --continuous --interval 300
```
### Output-Formate
```bash
# Standard-Output (Human-readable)
./ssd-test-suite.sh all
# JSON-Output für Automation
./ssd-test-suite.sh all --output json
# XML-Report für CI/CD
./ssd-test-suite.sh all --output xml
# CSV für Datenanalyse
./ssd-test-suite.sh all --output csv
```
## Test-Konfiguration
### Environment Variables
```bash
# Test-Timeout (Sekunden)
export SSD_TEST_TIMEOUT=300
# Performance-Test Größe (MB)
export SSD_TEST_SIZE=100
# Test-Wiederholungen
export SSD_TEST_ITERATIONS=3
# Benchmark-Modus
export SSD_BENCHMARK_MODE=true
```
### Konfigurationsdatei
```bash
# /etc/ssd-test/config.conf
TEST_MOUNT_POINT="/mnt/ssd-storage"
TEST_DATA_SIZE="100MB"
PERFORMANCE_THRESHOLD_READ="50MB/s"
PERFORMANCE_THRESHOLD_WRITE="30MB/s"
SMB_TEST_ENABLED=true
SECURITY_SCAN_ENABLED=true
```
## Test-Details
### Hardware-Tests (T01-T03)
#### T01: Hardware Detection
```bash
# Prüft USB-C Connectivity
- Device-Erkennung im System
- USB-Version und Geschwindigkeit
- Power-Management Status
- Device-Descriptor Validierung
```
#### T02: NTFS Filesystem
```bash
# Validiert NTFS-Kompatibilität
- Dateisystem-Typ Verifikation
- NTFS-Version Kompatibilität
- Journal-Status Prüfung
- Cluster-Size Optimierung
```
#### T03: Mount Stability
```bash
# Testet Mount/Unmount Zyklen
- 10x Mount/Unmount Zyklen
- Concurrent-Access Tests
- Mount-Option Validierung
- Recovery nach Fehlern
```
### Performance-Tests (T04-T06)
#### T04: Read Performance
```bash
# Sequential Read Test
dd if=/mnt/ssd-storage/testfile of=/dev/null bs=1M count=100
# Random Read Test (4K Blocks)
fio --name=random-read --ioengine=libaio --rw=randread --bs=4k --size=100M
```
#### T05: Write Performance
```bash
# Sequential Write Test
dd if=/dev/zero of=/mnt/ssd-storage/testfile bs=1M count=100
# Random Write Test (4K Blocks)
fio --name=random-write --ioengine=libaio --rw=randwrite --bs=4k --size=100M
```
#### T06: File Operations
```bash
# Standard File-Operations
- 1000 kleine Dateien erstellen (1KB)
- 100 mittlere Dateien erstellen (1MB)
- 10 große Dateien erstellen (10MB)
- Copy, Move, Delete Operationen
- Symlink und Hardlink Tests
```
### Integration-Tests (T07-T09)
#### T07: Permission System
```bash
# Linux-Permissions testen
chmod 755 /mnt/ssd-storage/testdir
chown user:group /mnt/ssd-storage/testfile
# NTFS-ACL Kompatibilität
setfacl -m u:user:rwx /mnt/ssd-storage/testdir
```
#### T08: SMB Readiness
```bash
# SMB-Kompatibilität prüfen
- Windows-Filename Kompatibilität
- Extended Attributes Support
- Case-Sensitivity Tests
- Unicode-Filename Support
- SMB-Performance Simulation
```
#### T09: Capacity Verification
```bash
# Speicher-Analyse
df -h /mnt/ssd-storage
du -sh /mnt/ssd-storage/*
# Fragmentierung prüfen
fsck.ntfs -f /dev/sdb1
```
### Security-Tests (T10-T11)
#### T10: Error Handling
```bash
# Fehlerbehandlung testen
- Disk-Full Simulation
- Permission-Denied Scenarios
- Network-Interruption (bei SMB)
- Hardware-Disconnect Simulation
```
#### T11: Security Scan
```bash
# Security-Features prüfen
- Access-Control Lists (ACLs)
- Encryption-Support Detection
- Secure-Delete Capabilities
- Audit-Trail Funktionalität
```
## Benchmark-Modus
### Performance-Metriken
```bash
# Detaillierte Performance-Analyse
./ssd-test-suite.sh --benchmark --detailed
# Vergleich mit Referenz-Werten
./ssd-test-suite.sh --benchmark --compare baseline.json
# Performance-Trend Analyse
./ssd-test-suite.sh --benchmark --trend --days 30
```
### Benchmark-Output
```json
{
"device": "/dev/sdb1",
"timestamp": "2025-08-07T19:10:00Z",
"performance": {
"sequential_read": "120 MB/s",
"sequential_write": "85 MB/s",
"random_read_4k": "15000 IOPS",
"random_write_4k": "8000 IOPS",
"latency_avg": "2.5ms"
},
"health": {
"temperature": "45°C",
"wear_level": "2%",
"error_count": 0
}
}
```
## CI/CD Integration
### Jenkins Pipeline
```groovy
pipeline {
agent any
stages {
stage('SSD Tests') {
steps {
sh './ssd-test-suite.sh all --output xml'
publishTestResults testResultsPattern: 'ssd-test-results.xml'
}
}
}
}
```
### GitHub Actions
```yaml
name: SSD Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run SSD Tests
run: ./ssd-test-suite.sh all --output json
```
## Monitoring Integration
### Prometheus-Metriken
```bash
# Metriken exportieren
./ssd-test-suite.sh --prometheus-metrics
# Grafana-Dashboard
# Siehe examples/monitoring/grafana-dashboard.json
```
### Alerting
```bash
# Performance-Alerts
if [ $READ_SPEED -lt 50 ]; then
alert "SSD Read Performance below threshold"
fi
# Health-Alerts
if [ $ERROR_COUNT -gt 0 ]; then
alert "SSD Errors detected"
fi
```
## Troubleshooting
### Häufige Test-Fehler
1. **T01 Failed**: USB-Verbindung prüfen, Treiber aktualisieren
2. **T04/T05 Slow**: SSD-Health prüfen, USB-Port wechseln
3. **T08 Failed**: SMB-Packages installieren, Firewall prüfen
### Debug-Modus
```bash
# Erweiterte Diagnose
./ssd-test-suite.sh all --debug --verbose
# Test-Logs analysieren
tail -f /var/log/ssd-test.log
```
## Best Practices
### Produktionsumgebung
1. **Regelmäßige Tests** (täglich/wöchentlich) einrichten
2. **Performance-Baselines** etablieren und überwachen
3. **Test-Ergebnisse archivieren** für Trend-Analyse
4. **Automatische Alerts** bei Test-Fehlern konfigurieren
### Entwicklungsumgebung
1. **Quick-Tests** vor Code-Changes ausführen
2. **Comprehensive-Tests** vor Releases durchführen
3. **Benchmark-Vergleiche** für Performance-Regression
4. **Test-Coverage** für alle SSD-Typen sicherstellen
## Changelog
### Version 0.1.0
- 11 umfassende Test-Kategorien
- Performance-Benchmark Integration
- SMB-Bereitschaftsprüfung
- CI/CD Pipeline Support
- Prometheus-Metriken Export

View File

@@ -0,0 +1,419 @@
#!/bin/bash
# ssd-test-suite.sh - USB-C SSD Test Suite
# Zweck: Umfassende Tests für gemountete SSDs
set -e
# Konfiguration
MOUNT_POINT="/mnt/ssd-storage"
TEST_DIR="$MOUNT_POINT/.ssd-tests"
LOG_FILE="/var/log/ssd-tests.log"
# Farben für Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging und Ausgabe
log_test() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - TEST: $1" >> "$LOG_FILE"
echo -e "${BLUE}[TEST]${NC} $1"
}
log_success() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - SUCCESS: $1" >> "$LOG_FILE"
echo -e "${GREEN}[✓]${NC} $1"
}
log_warning() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - WARNING: $1" >> "$LOG_FILE"
echo -e "${YELLOW}[!]${NC} $1"
}
log_error() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - ERROR: $1" >> "$LOG_FILE"
echo -e "${RED}[✗]${NC} $1"
}
# Test 1: Mount-Status prüfen
test_mount_status() {
log_test "Prüfe Mount-Status..."
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
log_success "SSD ist gemountet: $mounted_device auf $MOUNT_POINT"
return 0
else
log_error "Keine SSD auf $MOUNT_POINT gemountet"
return 1
fi
}
# Test 2: Dateisystem-Typ prüfen
test_filesystem_type() {
log_test "Prüfe Dateisystem-Typ..."
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
fs_type=$(lsblk -o FSTYPE "$mounted_device" | tail -1 | xargs)
if [ "$fs_type" = "ntfs" ]; then
log_success "Dateisystem: NTFS ✓"
return 0
else
log_warning "Dateisystem: $fs_type (erwartet: NTFS)"
return 1
fi
else
log_error "Kein gemountetes Device für Filesystem-Test"
return 1
fi
}
# Test 3: Lesezugriff prüfen
test_read_access() {
log_test "Prüfe Lesezugriff..."
if [ -r "$MOUNT_POINT" ]; then
# Versuche Verzeichnis-Listing
file_count=$(ls -1 "$MOUNT_POINT" 2>/dev/null | wc -l)
log_success "Lesezugriff OK - $file_count Objekte gefunden"
return 0
else
log_error "Kein Lesezugriff auf $MOUNT_POINT"
return 1
fi
}
# Test 4: Schreibzugriff prüfen
test_write_access() {
log_test "Prüfe Schreibzugriff..."
test_file="$MOUNT_POINT/.write_test_$(date +%s).tmp"
if echo "Write test - $(date)" > "$test_file" 2>/dev/null; then
if [ -f "$test_file" ]; then
content=$(cat "$test_file")
rm -f "$test_file"
log_success "Schreibzugriff OK"
return 0
else
log_error "Datei konnte nicht erstellt werden"
return 1
fi
else
log_error "Kein Schreibzugriff auf $MOUNT_POINT"
return 1
fi
}
# Test 5: Verzeichnis-Operationen
test_directory_operations() {
log_test "Prüfe Verzeichnis-Operationen..."
# Test-Verzeichnis erstellen
if mkdir -p "$TEST_DIR" 2>/dev/null; then
log_success "Verzeichnis erstellen: OK"
# Test-Unterverzeichnis
sub_dir="$TEST_DIR/subdir_$(date +%s)"
if mkdir "$sub_dir" 2>/dev/null; then
log_success "Unterverzeichnis erstellen: OK"
# Verzeichnis löschen
if rmdir "$sub_dir" 2>/dev/null; then
log_success "Verzeichnis löschen: OK"
else
log_warning "Verzeichnis löschen: Fehler"
fi
else
log_warning "Unterverzeichnis erstellen: Fehler"
fi
# Test-Verzeichnis aufräumen
rmdir "$TEST_DIR" 2>/dev/null || log_warning "Test-Verzeichnis Cleanup: Fehler"
return 0
else
log_error "Verzeichnis-Operationen: Fehler"
return 1
fi
}
# Test 6: Performance-Test (Schreibgeschwindigkeit)
test_write_performance() {
log_test "Prüfe Schreibperformance..."
test_file="$MOUNT_POINT/.performance_test_$(date +%s).tmp"
# 100MB Test-Datei schreiben
start_time=$(date +%s.%N)
if dd if=/dev/zero of="$test_file" bs=1M count=100 2>/dev/null; then
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc -l 2>/dev/null || echo "0")
if [ -f "$test_file" ]; then
file_size=$(stat -c%s "$test_file" 2>/dev/null || echo "0")
rm -f "$test_file"
if command -v bc >/dev/null && [ "$duration" != "0" ]; then
speed=$(echo "scale=2; ($file_size / 1024 / 1024) / $duration" | bc -l)
log_success "Schreibgeschwindigkeit: ${speed} MB/s"
else
log_success "Performance-Test abgeschlossen (Zeit: ${duration}s)"
fi
else
log_warning "Performance-Test: Datei nicht erstellt"
fi
return 0
else
log_error "Performance-Test: Schreibfehler"
return 1
fi
}
# Test 7: Speicherplatz prüfen
test_disk_space() {
log_test "Prüfe Speicherplatz..."
if mountpoint -q "$MOUNT_POINT"; then
space_info=$(df -h "$MOUNT_POINT" | tail -1)
total=$(echo "$space_info" | awk '{print $2}')
used=$(echo "$space_info" | awk '{print $3}')
available=$(echo "$space_info" | awk '{print $4}')
usage=$(echo "$space_info" | awk '{print $5}')
log_success "Speicherplatz - Total: $total, Belegt: $used, Verfügbar: $available, Auslastung: $usage"
# Warnung bei hoher Auslastung
usage_percent=$(echo "$usage" | sed 's/%//')
if [ "$usage_percent" -gt 90 ]; then
log_warning "Hohe Speicherauslastung: $usage"
fi
return 0
else
log_error "Speicherplatz-Check: Kein gemountetes Device"
return 1
fi
}
# Test 8: NTFS-spezifische Eigenschaften
test_ntfs_features() {
log_test "Prüfe NTFS-Features..."
if mountpoint -q "$MOUNT_POINT"; then
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
# UUID prüfen
uuid=$(sudo blkid -s UUID -o value "$mounted_device" 2>/dev/null)
if [ -n "$uuid" ]; then
log_success "NTFS UUID: $uuid"
else
log_warning "NTFS UUID nicht ermittelbar"
fi
# Label prüfen
label=$(sudo blkid -s LABEL -o value "$mounted_device" 2>/dev/null)
if [ -n "$label" ]; then
log_success "NTFS Label: $label"
else
log_success "NTFS Label: (kein Label gesetzt)"
fi
# NTFS-spezifische Mount-Optionen prüfen
mount_options=$(mount | grep "$MOUNT_POINT" | sed 's/.*(\(.*\)).*/\1/')
log_success "Mount-Optionen: $mount_options"
return 0
else
log_error "NTFS-Features: Kein gemountetes Device"
return 1
fi
}
# Test 9: SMB-Bereitschaft prüfen
test_smb_readiness() {
log_test "Prüfe SMB-Bereitschaft..."
# Benutzer-/Gruppen-Zugriff prüfen
user_id=$(id -u)
group_id=$(id -g)
if [ -r "$MOUNT_POINT" ] && [ -w "$MOUNT_POINT" ]; then
log_success "Benutzer-Zugriff (UID: $user_id, GID: $group_id): OK"
# Test-Datei für SMB-Zugriff erstellen
smb_test_file="$MOUNT_POINT/.smb_test_$(date +%s).txt"
if echo "SMB Test - $(date)" > "$smb_test_file" 2>/dev/null; then
if [ -f "$smb_test_file" ]; then
rm -f "$smb_test_file"
log_success "SMB-Test-Datei: OK"
fi
fi
return 0
else
log_error "SMB-Bereitschaft: Unzureichende Zugriffsrechte"
return 1
fi
}
# Test 10: Safe-Eject Bereitschaft prüfen
test_safe_eject_readiness() {
log_test "Prüfe Safe-Eject Bereitschaft..."
if ! mountpoint -q "$MOUNT_POINT"; then
log_warning "Safe-Eject: Kein Device gemountet"
return 1
fi
mounted_device=$(df "$MOUNT_POINT" | tail -1 | awk '{print $1}')
device_base=$(echo "$mounted_device" | sed 's/[0-9]*$//')
# USB-Device prüfen
if lsblk -o TRAN "$device_base" 2>/dev/null | grep -q usb; then
log_success "USB-Device erkannt: Safe-Eject verfügbar"
# eject Befehl prüfen
if command -v eject >/dev/null; then
log_success "eject Befehl: Verfügbar"
else
log_warning "eject Befehl: Nicht installiert (installierbar mit: sudo apt install eject)"
fi
# Aktive Prozesse prüfen
active_count=$(lsof "$MOUNT_POINT" 2>/dev/null | wc -l)
if [ "$active_count" -eq 0 ]; then
log_success "Aktive Prozesse: Keine (Safe-Eject bereit)"
else
log_warning "Aktive Prozesse: $active_count (Safe-Eject mit Vorsicht)"
fi
# Buffer-Status prüfen
dirty_pages=$(cat /proc/meminfo | grep "Dirty:" | awk '{print $2}')
if [ "$dirty_pages" -le 100 ]; then
log_success "System Buffer: Sauber (${dirty_pages}kB)"
else
log_warning "System Buffer: Dirty Pages vorhanden (${dirty_pages}kB)"
fi
return 0
else
log_warning "Kein USB-Device - Safe-Eject nicht erforderlich"
return 1
fi
}
# Test 11: Gesamtsystem-Status
test_system_status() {
log_test "Prüfe Gesamtsystem-Status..."
# NTFS-3G prüfen
if command -v mount.ntfs-3g >/dev/null; then
log_success "NTFS-3G: Installiert"
else
log_error "NTFS-3G: Nicht installiert"
fi
# Kernel-Module prüfen
if lsmod | grep -q ntfs; then
log_success "NTFS Kernel-Modul: Geladen"
else
log_warning "NTFS Kernel-Modul: Nicht erkannt"
fi
# System-Load prüfen
load_avg=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
log_success "System Load: $load_avg"
return 0
}
# Alle Tests ausführen
run_all_tests() {
echo "=== USB-C SSD Test Suite ==="
echo "Version: 1.0"
echo "Zeitstempel: $(date)"
echo "Mount-Point: $MOUNT_POINT"
echo ""
total_tests=11
passed_tests=0
# Test-Log initialisieren
echo "=== Test-Session gestartet: $(date) ===" >> "$LOG_FILE"
# Tests ausführen
test_mount_status && ((passed_tests++))
test_filesystem_type && ((passed_tests++))
test_read_access && ((passed_tests++))
test_write_access && ((passed_tests++))
test_directory_operations && ((passed_tests++))
test_write_performance && ((passed_tests++))
test_disk_space && ((passed_tests++))
test_ntfs_features && ((passed_tests++))
test_smb_readiness && ((passed_tests++))
test_safe_eject_readiness && ((passed_tests++))
test_system_status && ((passed_tests++))
echo ""
echo "=== Test-Zusammenfassung ==="
echo "Tests bestanden: $passed_tests/$total_tests"
if [ $passed_tests -eq $total_tests ]; then
log_success "Alle Tests bestanden - SSD ist bereit für SMB-Freigabe!"
echo "=== ALLE TESTS BESTANDEN ===" >> "$LOG_FILE"
return 0
else
failed_tests=$((total_tests - passed_tests))
log_warning "$failed_tests Tests fehlgeschlagen - Überprüfung erforderlich"
echo "=== $failed_tests TESTS FEHLGESCHLAGEN ===" >> "$LOG_FILE"
return 1
fi
}
# Hauptfunktion
main() {
case "${1:-all}" in
"all")
run_all_tests
;;
"quick")
echo "=== Quick Test ==="
test_mount_status && test_read_access && test_write_access
;;
"mount")
test_mount_status
;;
"access")
test_read_access && test_write_access
;;
"performance")
test_write_performance
;;
"smb")
test_smb_readiness
;;
"safe-eject"|"eject")
test_safe_eject_readiness
;;
*)
echo "Verwendung: $0 {all|quick|mount|access|performance|smb|safe-eject}"
echo ""
echo "Tests:"
echo " all - Alle Tests ausführen (empfohlen)"
echo " quick - Schnelle Basis-Tests"
echo " mount - Nur Mount-Status prüfen"
echo " access - Nur Zugriff prüfen"
echo " performance - Nur Performance-Test"
echo " smb - Nur SMB-Bereitschaft prüfen"
echo " safe-eject - Nur Safe-Eject Bereitschaft prüfen"
;;
esac
}
# Script ausführen
main "$@"