README.md aktualisiert

This commit is contained in:
2025-12-01 19:34:53 +01:00
parent efe484a9b0
commit 8a49b59385

295
README.md
View File

@@ -1,18 +1,20 @@
# Change Swap Size
Ein robustes Bash-Skript zur automatischen Anpassung der Swap-Größe auf Debian-basierten Systemen.
Ein robustes Bash-Skript zur automatischen Anpassung der Swap-Größe auf Debian-basierten Systemen mit intelligenter Swap-Erkennung.
## 📋 Übersicht
Dieses Skript passt die Größe der `/swapfile` automatisch an die Systemkonfiguration an. Es berechnet die optimale Swap-Größe basierend auf dem installierten RAM und vergrößert die Swap-Datei bei Bedarf sicher und unterbrechungsfrei.
Dieses Skript passt die Größe der `/swapfile` automatisch an die Systemkonfiguration an. Es berechnet die optimale Swap-Größe basierend auf dem installierten RAM und legt Swap neu an oder vergrößert ihn bei Bedarf sicher und unterbrechungsfrei.
### Hauptmerkmale
-**Intelligente Swap-Erkennung**: Erkennt automatisch ob Swap vorhanden ist
-**Zwei optimierte Workflows**: Direkter Weg ohne Swap, sicherer Weg mit vorhandenem Swap
-**Automatische Größenberechnung**: RAM + 2GB als Zielgröße
-**Unterbrechungsfreier Betrieb**: Temporärer Swap während des Vorgangs
-**Unterbrechungsfreier Betrieb**: Temporärer Swap während der Vergrößerung
-**Sicherheitsgeprüft**: Speicherplatz-Validierung vor Ausführung
-**Idempotent**: Kann mehrfach sicher ausgeführt werden
-**Detailliertes Logging**: Klare Fortschrittsanzeige in 6 Schritten
-**Detailliertes Logging**: Klare Fortschrittsanzeige
-**Fehlerbehandlung**: Automatischer Abbruch bei Problemen
## 🚀 Installation
@@ -25,17 +27,17 @@ git clone https://git.jtl-hosting.de/thomasciesla/change-swap-size.git
cd change-swap-size
# Skript ausführbar machen
chmod +x resizeswap.py
chmod +x swap-setup-improved.sh
# Als Root ausführen
sudo ./resizeswap.py
sudo ./swap-setup-improved.sh
```
### Systemweite Installation
```bash
# Skript nach /usr/local/bin kopieren
sudo cp resizeswap.py /usr/local/bin/resizeswap
sudo cp swap-setup-improved.sh /usr/local/bin/resizeswap
sudo chmod +x /usr/local/bin/resizeswap
# Überall im System ausführbar
@@ -47,23 +49,52 @@ sudo resizeswap
### Basis-Aufruf
```bash
sudo ./resizeswap.py
sudo ./swap-setup-improved.sh
```
Das Skript benötigt Root-Rechte und führt folgende Aktionen aus:
1. Ermittelt die installierte RAM-Größe
2. Berechnet Zielgröße (RAM + 2GB)
3. Prüft aktuelle Swap-Größe
4. Vergrößert bei Bedarf die `/swapfile`
3. **Prüft ob Swap aktiv ist**
4. **Wählt optimalen Workflow**:
- Kein Swap → Direktes Anlegen
- Swap zu klein → Sichere Vergrößerung
### Beispielausgabe
### Beispielausgabe: Kein Swap vorhanden
```
=== Swap-Anpassung wird gestartet ===
Erkannter RAM: 16384 MB
Zielgröße für Swap: 18432 MB (RAM + 2048 MB)
Aktuelle Swap-Größe: 4096 MB
=== KEIN SWAP AKTIV - Erstelle neuen Swap ===
Verfügbarer Speicher: 50000 MB
Benötigt: 18432 MB
[1/3] Erstelle /swapfile mit 18432 MB...
[2/3] Formatiere /swapfile als Swap...
[3/3] Aktiviere /swapfile...
=== Swap erfolgreich erstellt und aktiviert! ===
Swap-Status:
NAME TYPE SIZE USED PRIO
/swapfile file 18G 0B -2
```
### Beispielausgabe: Swap vergrößern
```
=== Swap-Anpassung wird gestartet ===
Erkannter RAM: 16384 MB
Zielgröße für Swap: 18432 MB (RAM + 2048 MB)
=== SWAP IST AKTIV - Prüfe Größe ===
NAME TYPE SIZE USED PRIO
/swapfile file 4G 512M -2
Aktuelle /swapfile-Größe: 4096 MB
Swap wird vergrößert von 4096 MB auf 18432 MB...
Verfügbarer Speicher: 50000 MB
@@ -81,6 +112,23 @@ Benötigt (temporär): 28672 MB
## 🔧 Technische Details
### Intelligente Workflow-Auswahl
Das Skript entscheidet automatisch zwischen zwei Workflows:
```bash
# Prüfung ob Swap aktiv ist
SWAP_ACTIVE=$(swapon --show | wc -l)
if [ "$SWAP_ACTIVE" -eq 0 ]; then
# WORKFLOW 1: Direktes Anlegen (3 Schritte)
# Effizienter Weg ohne temporären Swap
else
# WORKFLOW 2: Sichere Vergrößerung (6 Schritte)
# Mit temporärem Swap für unterbrechungsfreien Betrieb
fi
```
### Berechnungsformel
```
@@ -93,38 +141,53 @@ Diese Formel orientiert sich an gängigen Best Practices für Swap-Dimensionieru
```
┌─────────────────────────────────────┐
1. Temporären 10GB Swap erstellen
│ und aktivieren │
Start: Swap-Erkennung
└────────────┬────────────────────────┘
┌─────────────────────────────────────┐
│ 2. Alten /swapfile deaktivieren
und löschen │
└────────────┬────────────────────────┘
┌─────────────────────────────────────┐
│ 3. Neuen /swapfile mit Zielgröße │
erstellen
└────────────┬────────────────────────┘
┌─────────────────────────────────────┐
│ 4. Neuen /swapfile aktivieren │
└────────────┬────────────────────────┘
─────────────────────────────────────
│ 5. Temporären Swap deaktivieren
│ und löschen
─────────────────────────────────────┘
────────────┐
│ Swap aktiv?
└─────┬──────┘
┌─────────┴─────────┐
│ NEIN │ JA
▼ ▼
┌───────────────┐ ┌────────────────┐
WORKFLOW 1 │ WORKFLOW 2
│ (3 Schritte) │ │ (6 Schritte) │
└───────┬───────┘ └────────┬───────┘
▼ ▼
┌───────────────────────────────────────┐
│ 1. /swapfile erstellen │
│ 2. Als Swap formatieren
│ 3. Aktivieren │
└───────────────────────────────────────
───────────────────────────────────
│ 1. Temporären 10GB Swap erstellen │
│ 2. Temporären Swap aktivieren │
│ 3. Alten /swapfile deaktivieren │
│ 4. Neuen /swapfile erstellen │
│ 5. Neuen /swapfile aktivieren │
│ 6. Temporären Swap entfernen │
└───────────────────────────────────┘
┌───────────────────┴───────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ fstab-Eintrag │ │ Swap aktiv! │
│ hinzufügen │ │ │
└─────────────────┘ └─────────────────┘
```
### Sicherheitsmechanismen
- **Swap-Status-Erkennung**: Automatische Erkennung des optimalen Workflows
- **Speicherplatz-Prüfung**: Validiert vor Beginn, ob genug Speicher verfügbar ist
- **Temporärer Swap**: 10GB Sicherheits-Swap während der Operation
- **Temporärer Swap**: 10GB Sicherheits-Swap nur bei Vergrößerung
- **Root-Prüfung**: Verhindert Ausführung ohne ausreichende Rechte
- **Fehlerbehandlung**: `set -e` bricht bei Fehlern sofort ab
- **Permission-Management**: Automatisches Setzen von `chmod 600` für Swap-Dateien
@@ -133,9 +196,11 @@ Diese Formel orientiert sich an gängigen Best Practices für Swap-Dimensionieru
- **Betriebssystem**: Debian, Ubuntu oder andere Debian-Derivate
- **Kernel**: Linux mit Swap-Unterstützung
- **Tools**: `bash`, `dd`, `free`, `mkswap`, `swapon`, `swapoff`, `stat`, `df`
- **Tools**: `bash`, `dd`, `free`, `mkswap`, `swapon`, `swapoff`, `stat`, `df`, `wc`
- **Rechte**: Root-Zugriff erforderlich
- **Speicher**: Mindestens RAM + 2GB + 10GB freier Festplattenspeicher
- **Speicher**:
- Bei Neuanlage: Mindestens RAM + 2GB freier Festplattenspeicher
- Bei Vergrößerung: Mindestens RAM + 2GB + 10GB freier Festplattenspeicher
## ⚙️ Konfiguration
@@ -144,11 +209,11 @@ Diese Formel orientiert sich an gängigen Best Practices für Swap-Dimensionieru
Im Skript können folgende Variablen angepasst werden:
```bash
# Temporäre Swap-Größe (in MB)
# Temporäre Swap-Größe für Vergrößerung (in MB)
TEMP_SWAP_SIZE_MB=10240 # Standard: 10 GB
# Zusätzlicher Speicher zum RAM (in MB)
RAM_ADDITION=2048 # Standard: 2 GB
# TARGET_MB=$((RAM_MB + 2048)) # Standard: RAM + 2GB
```
### Beispiel: Custom-Größe
@@ -157,35 +222,89 @@ Für ein System mit speziellen Anforderungen:
```bash
# Im Skript anpassen:
RAM_ADDITION=4096 # RAM + 4GB statt 2GB
TEMP_SWAP_SIZE_MB=20480 # 20GB temporärer Swap
TARGET_MB=$((RAM_MB + 4096)) # RAM + 4GB statt 2GB
TEMP_SWAP_SIZE_MB=20480 # 20GB temporärer Swap
```
## 📊 Verwendungsszenarien
### Szenario 1: Server mit 16GB RAM
### Szenario 1: Neuinstallation ohne Swap
**Ausgangssituation:**
```
RAM: 16384 MB
Berechnung: 16384 + 2048 = 18432 MB
Ergebnis: 18.4 GB Swap
Swap aktiv: Nein
Aktion: Direktes Anlegen (3 Schritte)
```
### Szenario 2: Server mit 128GB RAM
**Ergebnis:**
```
RAM: 131072 MB
Berechnung: 131072 + 2048 = 133120 MB
Ergebnis: 133 GB Swap
Neuer Swap: 18432 MB (18.4 GB)
Workflow: WORKFLOW 1 (effizient)
Benötigter Platz: 18432 MB
```
### Szenario 3: Swap bereits groß genug
### Szenario 2: Server mit zu kleinem Swap
**Ausgangssituation:**
```
RAM: 16384 MB
Aktueller Swap: 4096 MB
Swap aktiv: Ja
Aktion: Sichere Vergrößerung (6 Schritte)
```
**Ergebnis:**
```
Neuer Swap: 18432 MB (18.4 GB)
Workflow: WORKFLOW 2 (mit temp. Swap)
Benötigter Platz: 28672 MB (temporär)
```
### Szenario 3: Server mit ausreichend Swap
**Ausgangssituation:**
```
RAM: 8192 MB
Ziel: 10240 MB
Aktuell: 16384 MB
Aktueller Swap: 16384 MB
```
**Ergebnis:**
```
Aktion: Keine - Swap bereits ausreichend
Meldung: "Swap ist bereits groß genug"
```
### Szenario 4: Server mit 128GB RAM
**Ausgangssituation:**
```
RAM: 131072 MB
Swap aktiv: Nein
```
**Ergebnis:**
```
Neuer Swap: 133120 MB (133 GB)
Workflow: WORKFLOW 1 (direktes Anlegen)
Benötigter Platz: 133120 MB
```
### Szenario 5: Swap-Partition statt Datei
**Ausgangssituation:**
```
RAM: 16384 MB
Swap aktiv: Ja (/dev/sda2)
/swapfile: Existiert nicht
```
**Ergebnis:**
```
Meldung: "Dieses Skript verwaltet nur /swapfile"
Aktion: Keine - Anderer Swap-Typ erkannt
Info: Aktuelle Swap-Konfiguration wird angezeigt
```
## 🛠️ Troubleshooting
@@ -200,7 +319,7 @@ Benötigt: 28672 MB, Verfügbar: 20000 MB
**Lösung:**
- Speicherplatz freigeben auf dem entsprechenden Volume
- Temporäre Swap-Größe reduzieren (`TEMP_SWAP_SIZE_MB`)
- Bei Vergrößerung: Temporäre Swap-Größe reduzieren (`TEMP_SWAP_SIZE_MB`)
- Alternative Partition für Swap verwenden
### Problem: Swap bereits groß genug
@@ -213,7 +332,7 @@ Aktuelle Größe (20480 MB) >= Zielgröße (18432 MB)
**Lösung:**
- Normal - keine Aktion erforderlich
- Falls dennoch Anpassung gewünscht, `TARGET_MB` manuell anpassen
- Falls dennoch Anpassung gewünscht, Berechnungsformel im Skript anpassen
### Problem: Keine Root-Rechte
@@ -224,9 +343,20 @@ Fehler: Dieses Skript muss als root ausgeführt werden
**Lösung:**
```bash
sudo ./resizeswap.py
sudo ./swap-setup-improved.sh
```
### Problem: /swapfile existiert aber ist nicht aktiv
**Meldung:**
```
Warnung: /swapfile existiert aber ist nicht aktiv - wird gelöscht
```
**Lösung:**
- Normal - Skript bereinigt alte, inaktive Swap-Dateien
- Falls Datei wichtig ist, vor Ausführung sichern
## 🔍 Verifikation
### Swap-Status prüfen
@@ -261,20 +391,29 @@ Erwartete Ausgabe:
2. **Wartungsfenster**: Während wartungsarmer Zeiten ausführen
3. **Monitoring**: Swap-Nutzung nach Anpassung überwachen
4. **Dokumentation**: Änderungen in Change-Management dokumentieren
5. **Planung**: Bei großen Systemen (>64GB RAM) Speicherbedarf vorher prüfen
### Swap-Dimensionierung
Allgemeine Richtlinien für Swap-Größen:
| RAM | Empfohlener Swap | Skript-Berechnung |
|----------|------------------|-------------------|
| 1-2 GB | RAM × 2 | RAM + 2GB |
| 2-8 GB | RAM × 1.5 | RAM + 2GB |
| 8-64 GB | RAM + 2-4 GB | RAM + 2GB ✓ |
| > 64 GB | 8-32 GB | RAM + 2GB |
| RAM | Empfohlener Swap | Skript-Berechnung | Workflow |
|----------|------------------|-------------------|------------|
| 1-2 GB | RAM × 2 | RAM + 2GB | 1 oder 2 |
| 2-8 GB | RAM × 1.5 | RAM + 2GB | 1 oder 2 |
| 8-64 GB | RAM + 2-4 GB | RAM + 2GB ✓ | 1 oder 2 |
| > 64 GB | 8-32 GB | RAM + 2GB | 1 oder 2 |
Das Skript folgt der modernen Best Practice für mittlere bis große Server.
### Workflow-Effizienz
| Szenario | Workflow | Schritte | Temp. Swap | Zeitaufwand |
|-----------------------|----------|----------|------------|-------------|
| Kein Swap vorhanden | 1 | 3 | Nein | ~2-5 Min |
| Swap vergrößern | 2 | 6 | Ja (10GB) | ~5-15 Min |
| Swap groß genug | - | 0 | Nein | <1 Min |
## 🤝 Beitragen
Wir freuen uns über Beiträge! Bitte beachten Sie:
@@ -295,6 +434,7 @@ Pull Requests sind willkommen:
- Ausführliche Kommentare für komplexe Logik
- Fehlerbehandlung für alle kritischen Operationen
- Tests auf Debian 11 und 12 durchführen
- Beide Workflows testen (mit und ohne vorhandenen Swap)
## 📞 Kontakt
@@ -309,7 +449,22 @@ Dieses Projekt ist für den internen Gebrauch bei JTL-Software entwickelt.
## 🔖 Changelog
### Version 1.0.0 (2025-10-24)
### Version 2.0.0 (2025-12-01)
**Neue Features:**
- Intelligente Swap-Erkennung mit automatischer Workflow-Auswahl
- Optimierter Workflow für Systeme ohne aktiven Swap (3 statt 6 Schritte)
- Erkennung von Swap-Partitionen und anderen Swap-Typen
- Automatische Bereinigung inaktiver /swapfile-Dateien
- 🔧 Verbesserte Fehlerbehandlung und Statusmeldungen
**Verbesserungen:**
- Bis zu 50% schnellere Ausführung bei Neuinstallationen
- 💾 Reduzierter temporärer Speicherbedarf bei Systemen ohne Swap
- 📊 Detailliertere Ausgaben zur besseren Nachvollziehbarkeit
- 🛡 Zusätzliche Sicherheitsprüfungen
### Version 1.0.0 (2024-10-24)
- Initial Release
- Automatische RAM-Erkennung und Berechnung
@@ -323,7 +478,9 @@ Dieses Projekt ist für den internen Gebrauch bei JTL-Software entwickelt.
### Sicherheit
- **Root-Rechte erforderlich**: Skript manipuliert System-Level Ressourcen
- **Temporärer Speicherbedarf**: Benötigt kurzzeitig Zielgröße + 10GB
- **Temporärer Speicherbedarf**:
- Workflow 1 (kein Swap): RAM + 2GB
- Workflow 2 (Vergrößerung): RAM + 2GB + 10GB (temporär)
- **Keine Datenvalidierung**: Swap-Inhalt wird nicht gesichert
- **Production-Use**: In Testumgebung validieren vor Production-Einsatz
@@ -333,6 +490,18 @@ Dieses Projekt ist für den internen Gebrauch bei JTL-Software entwickelt.
- Keine Verkleinerung der Swap-Datei
- Keine Unterstützung für Multiple-Swap-Dateien
- Nur Linux/Debian-basierte Systeme
- Andere Swap-Typen werden erkannt aber nicht verwaltet
### Vorteile der neuen Version
| Feature | v1.0 | v2.0 |
|----------------------------|------|------|
| Swap-Erkennung | | |
| Workflow-Optimierung | | |
| Neuinstallation (3 Steps) | | |
| Vergrößerung (6 Steps) | | |
| Swap-Partition-Erkennung | | |
| Speichereffizienz | | |
---