Change Swap Size
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 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 der Vergrößerung
- ✅ Sicherheitsgeprüft: Speicherplatz-Validierung vor Ausführung
- ✅ Idempotent: Kann mehrfach sicher ausgeführt werden
- ✅ Detailliertes Logging: Klare Fortschrittsanzeige
- ✅ 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 swap-setup-improved.sh
# Als Root ausführen
sudo ./swap-setup-improved.sh
Systemweite Installation
# Skript nach /usr/local/bin kopieren
sudo cp swap-setup-improved.sh /usr/local/bin/resizeswap
sudo chmod +x /usr/local/bin/resizeswap
# Überall im System ausführbar
sudo resizeswap
📖 Verwendung
Basis-Aufruf
sudo ./swap-setup-improved.sh
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 ob Swap aktiv ist
- Wählt optimalen Workflow:
- Kein Swap → Direktes Anlegen
- Swap zu klein → Sichere Vergrößerung
Beispielausgabe: Kein Swap vorhanden
=== Swap-Anpassung wird gestartet ===
Erkannter RAM: 16384 MB
Zielgröße für Swap: 18432 MB (RAM + 2048 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
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
Intelligente Workflow-Auswahl
Das Skript entscheidet automatisch zwischen zwei Workflows:
# 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
Ziel-Swap-Größe = RAM + 2048 MB
Diese Formel orientiert sich an gängigen Best Practices für Swap-Dimensionierung.
Ablaufdiagramm
┌─────────────────────────────────────┐
│ Start: Swap-Erkennung │
└────────────┬────────────────────────┘
│
▼
┌────────────┐
│ 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 nur bei Vergrößerung
- 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,wc - Rechte: Root-Zugriff erforderlich
- Speicher:
- Bei Neuanlage: Mindestens RAM + 2GB freier Festplattenspeicher
- Bei Vergrößerung: Mindestens RAM + 2GB + 10GB freier Festplattenspeicher
⚙️ Konfiguration
Anpassbare Parameter
Im Skript können folgende Variablen angepasst werden:
# 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)
# TARGET_MB=$((RAM_MB + 2048)) # Standard: RAM + 2GB
Beispiel: Custom-Größe
Für ein System mit speziellen Anforderungen:
# Im Skript anpassen:
TARGET_MB=$((RAM_MB + 4096)) # RAM + 4GB statt 2GB
TEMP_SWAP_SIZE_MB=20480 # 20GB temporärer Swap
📊 Verwendungsszenarien
Szenario 1: Neuinstallation ohne Swap
Ausgangssituation:
RAM: 16384 MB
Swap aktiv: Nein
Aktion: Direktes Anlegen (3 Schritte)
Ergebnis:
Neuer Swap: 18432 MB (18.4 GB)
Workflow: WORKFLOW 1 (effizient)
Benötigter Platz: 18432 MB
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
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
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
- Bei Vergrößerung: 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, Berechnungsformel im Skript anpassen
Problem: Keine Root-Rechte
Fehler:
Fehler: Dieses Skript muss als root ausgeführt werden
Lösung:
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
# 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
- 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 | 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:
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
- Beide Workflows testen (mit und ohne vorhandenen Swap)
📞 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 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
- 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:
- 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
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
- 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 | ⚠️ | ✅ |
Entwickelt mit ❤️ für JTL-Software Infrastructure Team