2025-12-01 19:34:53 +01:00
2025-12-05 14:39:44 +01:00

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:

  1. Ermittelt die installierte RAM-Größe
  2. Berechnet Zielgröße (RAM + 2GB)
  3. Prüft ob Swap aktiv ist
  4. 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 -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, 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

  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
  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 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

Description
Ändert Swap Size basierend des vorhandenen RAMs.
Readme 38 KiB
Languages
Shell 100%