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
# 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
# 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
sudo ./resizeswap.py
Das Skript benötigt Root-Rechte und führt folgende Aktionen aus:
- Ermittelt die installierte RAM-Größe
- Berechnet Zielgröße (RAM + 2GB)
- Prüft aktuelle Swap-Größe
- 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 -ebricht bei Fehlern sofort ab - Permission-Management: Automatisches Setzen von
chmod 600fü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:
# 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:
# 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_MBmanuell anpassen
Problem: Keine Root-Rechte
Fehler:
Fehler: Dieses Skript muss als root ausgeführt werden
Lösung:
sudo ./resizeswap.py
🔍 Verifikation
Swap-Status prüfen
# Aktive Swap-Devices anzeigen
swapon --show
# Speicher-Übersicht
free -h
# Detaillierte Swap-Informationen
cat /proc/swaps
/etc/fstab prüfen
grep swapfile /etc/fstab
Erwartete Ausgabe:
/swapfile none swap sw 0 0
📝 Best Practices
Empfehlungen
- Backup: Wichtige Daten vor Ausführung sichern
- Wartungsfenster: Während wartungsarmer Zeiten ausführen
- Monitoring: Swap-Nutzung nach Anpassung überwachen
- 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