Files
change-swap-size/README.md
2025-10-24 17:47:07 +02:00

339 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Change Swap Size
Ein robustes Bash-Skript zur automatischen Anpassung der Swap-Größe auf Debian-basierten Systemen.
## 📋 Ü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.
### Hauptmerkmale
-**Automatische Größenberechnung**: RAM + 2GB als Zielgröße
-**Unterbrechungsfreier Betrieb**: Temporärer Swap während des Vorgangs
-**Sicherheitsgeprüft**: Speicherplatz-Validierung vor Ausführung
-**Idempotent**: Kann mehrfach sicher ausgeführt werden
-**Detailliertes Logging**: Klare Fortschrittsanzeige in 6 Schritten
-**Fehlerbehandlung**: Automatischer Abbruch bei Problemen
## 🚀 Installation
### Schnellinstallation
```bash
# Repository klonen
git clone https://git.jtl-hosting.de/thomasciesla/change-swap-size.git
cd change-swap-size
# Skript ausführbar machen
chmod +x resizeswap.py
# Als Root ausführen
sudo ./resizeswap.py
```
### Systemweite Installation
```bash
# Skript nach /usr/local/bin kopieren
sudo cp resizeswap.py /usr/local/bin/resizeswap
sudo chmod +x /usr/local/bin/resizeswap
# Überall im System ausführbar
sudo resizeswap
```
## 📖 Verwendung
### Basis-Aufruf
```bash
sudo ./resizeswap.py
```
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`
### Beispielausgabe
```
=== Swap-Anpassung wird gestartet ===
Erkannter RAM: 16384 MB
Zielgröße für Swap: 18432 MB (RAM + 2048 MB)
Aktuelle Swap-Größe: 4096 MB
Swap wird vergrößert von 4096 MB auf 18432 MB...
Verfügbarer Speicher: 50000 MB
Benötigt (temporär): 28672 MB
[1/6] Erstelle temporären Swap (10240 MB)...
[2/6] Aktiviere temporären Swap...
[3/6] Deaktiviere alten /swapfile...
[4/6] Erstelle neue /swapfile mit 18432 MB...
[5/6] Aktiviere neue /swapfile...
[6/6] Entferne temporären Swap...
=== Swap erfolgreich vergrößert und aktiviert! ===
```
## 🔧 Technische Details
### Berechnungsformel
```
Ziel-Swap-Größe = RAM + 2048 MB
```
Diese Formel orientiert sich an gängigen Best Practices für Swap-Dimensionierung.
### Ablaufdiagramm
```
┌─────────────────────────────────────┐
│ 1. Temporären 10GB Swap erstellen │
│ und aktivieren │
└────────────┬────────────────────────┘
┌─────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────┘
```
### Sicherheitsmechanismen
- **Speicherplatz-Prüfung**: Validiert vor Beginn, ob genug Speicher verfügbar ist
- **Temporärer Swap**: 10GB Sicherheits-Swap während der Operation
- **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
### Systemvoraussetzungen
- **Betriebssystem**: Debian, Ubuntu oder andere Debian-Derivate
- **Kernel**: Linux mit Swap-Unterstützung
- **Tools**: `bash`, `dd`, `free`, `mkswap`, `swapon`, `swapoff`, `stat`, `df`
- **Rechte**: Root-Zugriff erforderlich
- **Speicher**: Mindestens RAM + 2GB + 10GB freier Festplattenspeicher
## ⚙️ Konfiguration
### Anpassbare Parameter
Im Skript können folgende Variablen angepasst werden:
```bash
# Temporäre Swap-Größe (in MB)
TEMP_SWAP_SIZE_MB=10240 # Standard: 10 GB
# Zusätzlicher Speicher zum RAM (in MB)
RAM_ADDITION=2048 # Standard: 2 GB
```
### Beispiel: Custom-Größe
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
```
## 📊 Verwendungsszenarien
### Szenario 1: Server mit 16GB RAM
```
RAM: 16384 MB
Berechnung: 16384 + 2048 = 18432 MB
Ergebnis: 18.4 GB Swap
```
### Szenario 2: Server mit 128GB RAM
```
RAM: 131072 MB
Berechnung: 131072 + 2048 = 133120 MB
Ergebnis: 133 GB Swap
```
### Szenario 3: Swap bereits groß genug
```
RAM: 8192 MB
Ziel: 10240 MB
Aktuell: 16384 MB
Aktion: Keine - Swap bereits ausreichend
```
## 🛠️ Troubleshooting
### Problem: Nicht genug Speicherplatz
**Fehler:**
```
FEHLER: Nicht genug freier Speicherplatz!
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`)
- Alternative Partition für Swap verwenden
### Problem: Swap bereits groß genug
**Meldung:**
```
=== Swap ist bereits groß genug ===
Aktuelle Größe (20480 MB) >= Zielgröße (18432 MB)
```
**Lösung:**
- Normal - keine Aktion erforderlich
- Falls dennoch Anpassung gewünscht, `TARGET_MB` manuell anpassen
### Problem: Keine Root-Rechte
**Fehler:**
```
Fehler: Dieses Skript muss als root ausgeführt werden
```
**Lösung:**
```bash
sudo ./resizeswap.py
```
## 🔍 Verifikation
### Swap-Status prüfen
```bash
# Aktive Swap-Devices anzeigen
swapon --show
# Speicher-Übersicht
free -h
# Detaillierte Swap-Informationen
cat /proc/swaps
```
### /etc/fstab prüfen
```bash
grep swapfile /etc/fstab
```
Erwartete Ausgabe:
```
/swapfile none swap sw 0 0
```
## 📝 Best Practices
### Empfehlungen
1. **Backup**: Wichtige Daten vor Ausführung sichern
2. **Wartungsfenster**: Während wartungsarmer Zeiten ausführen
3. **Monitoring**: Swap-Nutzung nach Anpassung überwachen
4. **Dokumentation**: Änderungen in Change-Management dokumentieren
### 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 |
Das Skript folgt der modernen Best Practice für mittlere bis große Server.
## 🤝 Beitragen
Wir freuen uns über Beiträge! Bitte beachten Sie:
### Issues melden
Bugs oder Feature-Requests können hier gemeldet werden:
**Issues**: https://git.jtl-hosting.de/thomasciesla/change-swap-size/issues
### Merge Requests
Pull Requests sind willkommen:
**Merge Requests**: https://git.jtl-hosting.de/thomasciesla/change-swap-size/pulls
### Entwicklungsrichtlinien
- Bash-Coding-Standards einhalten
- Ausführliche Kommentare für komplexe Logik
- Fehlerbehandlung für alle kritischen Operationen
- Tests auf Debian 11 und 12 durchführen
## 📞 Kontakt
**Maintainer**: Thomas Ciesla
**E-Mail**: thomas.ciesla@jtl-software.com
**Teams**: thomas.ciesla@jtl-software.com
**Organisation**: JTL-Software
## 📜 Lizenz
Dieses Projekt ist für den internen Gebrauch bei JTL-Software entwickelt.
## 🔖 Changelog
### Version 1.0.0 (2025-10-24)
- Initial Release
- Automatische RAM-Erkennung und Berechnung
- Temporärer Swap für unterbrechungsfreien Betrieb
- Speicherplatz-Validierung
- fstab-Integration
- Ausführliches Logging
## ⚠️ Wichtige Hinweise
### Sicherheit
- **Root-Rechte erforderlich**: Skript manipuliert System-Level Ressourcen
- **Temporärer Speicherbedarf**: Benötigt kurzzeitig Zielgröße + 10GB
- **Keine Datenvalidierung**: Swap-Inhalt wird nicht gesichert
- **Production-Use**: In Testumgebung validieren vor Production-Einsatz
### Einschränkungen
- Nur für `/swapfile`, nicht für Swap-Partitionen
- Keine Verkleinerung der Swap-Datei
- Keine Unterstützung für Multiple-Swap-Dateien
- Nur Linux/Debian-basierte Systeme
---
**Entwickelt mit ❤️ für JTL-Software Infrastructure Team**