cryeffect.net

Linux Swap erklärt – Virtueller Arbeitsspeicher verstehen und verwalten

Übersicht: Linux Swap

Was ist Swap?

Swap (Auslagerung) ist ein Bereich auf der Festplatte oder SSD, der als virtueller Arbeitsspeicher dient. Wenn der physische RAM vollständig belegt ist, kann Linux Teile des Arbeitsspeichers in den Swap-Bereich auslagern, um das System stabil und funktionsfähig zu halten.

Warum ist Swap wichtig?

  • Systemstabilität: Verhindert Abstürze bei vollem RAM
  • Speichererweiterung: Ermöglicht mehr Anwendungen als physischer RAM erlaubt
  • Hibernation: Notwendig für den Ruhezustand (Suspend-to-disk)
  • Performance: Optimiert Speichernutzung durch intelligente Auslagerung
  • Notfallpuffer: Gibt dem System Zeit für Recovery bei Speicherproblemen

Arten von Swap

TypBeschreibungVorteileNachteile
Swap-PartitionDedizierte FestplattenpartitionBessere Performance, einfache VerwaltungFeste Größe, schwer änderbar
Swap-DateiDatei im regulären DateisystemFlexible Größe, einfach änderbarLeicht schlechtere Performance

Wie funktioniert Swap?

Swappiness-Parameter:

Der Kernel verwendet den swappiness-Wert (0-100), um zu bestimmen, wann Swap verwendet wird:

  • 0-10: Swap nur bei kritischem RAM-Mangel
  • 60 (Standard): Ausgewogene Nutzung
  • 100: Aggressive Swap-Nutzung

Memory Management:

1
2
3
4
5
6
7
8
# Aktuelle Speichernutzung anzeigen
free -h

# Swap-Status prüfen
swapon --show

# Detaillierte Speicherinfo
cat /proc/meminfo | grep -i swap

Swap einrichten

Swap-Partition erstellen:

1. Partition erstellen:

1
2
3
4
5
6
7
# Festplatte partitionieren (interaktiv)
sudo cfdisk /dev/sdX

# Oder mit parted (Beispiel für 2GB Partition)
sudo parted /dev/sdX mkpart primary linux-swap 1GB 3GB

# Partition-Typ auf Linux Swap setzen (bei fdisk: Typ 82)

2. Swap-Dateisystem erstellen:

1
sudo mkswap /dev/sdXn

3. Swap aktivieren:

1
sudo swapon /dev/sdXn

4. Automatisch beim Boot aktivieren:

1
2
# In /etc/fstab hinzufügen:
echo "/dev/sdXn none swap sw 0 0" | sudo tee -a /etc/fstab

Swap-Datei erstellen:

1. Datei anlegen:

1
2
3
4
5
# 2GB Swap-Datei erstellen (empfohlene Methode)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

# Alternative: fallocate (nicht bei allen Dateisystemen unterstützt)
# sudo fallocate -l 2G /swapfile

2. Berechtigungen setzen:

1
sudo chmod 600 /swapfile

3. Swap-Dateisystem erstellen:

1
sudo mkswap /swapfile

4. Swap aktivieren:

1
sudo swapon /swapfile

5. Automatisch aktivieren:

1
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

Swap verwalten und überwachen

Swap-Status prüfen:

1
2
3
4
5
6
7
8
# Übersicht aller Swap-Bereiche
swapon --show

# Speichernutzung anzeigen
free -h

# Detaillierte Swap-Informationen
cat /proc/swaps

Swappiness anpassen:

1
2
3
4
5
6
7
8
# Aktuellen Wert anzeigen
cat /proc/sys/vm/swappiness

# Temporär ändern (bis Neustart)
sudo sysctl vm.swappiness=10

# Dauerhaft ändern
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

Swap entfernen:

1
2
3
4
5
6
7
8
# Swap deaktivieren
sudo swapoff /swapfile

# Aus /etc/fstab entfernen
sudo nano /etc/fstab

# Swap-Datei löschen
sudo rm /swapfile

Swap-Größe bestimmen

Empfohlene Swap-Größen:

RAMSwap (ohne Hibernation)Swap (mit Hibernation)
< 1GB= RAM2x RAM
1-2GB= RAM2x RAM
2-8GB2-4GBRAM + 2GB
8-32GB4-8GB1.5x RAM
32-64GB8GB1.2x RAM
> 64GB8-16GB1x RAM (möglich)

Beispiele für verschiedene Anwendungsfälle:

Desktop/Laptop mit Hibernation:

1
2
# Bei 8GB RAM: 12GB Swap
sudo fallocate -l 12G /swapfile

Server ohne Hibernation:

1
2
# Unabhängig von RAM-Größe: 4GB Swap
sudo fallocate -l 4G /swapfile

Performance-Optimierung

Swappiness für verschiedene Szenarien:

1
2
3
4
5
6
7
8
9
10
11
# Server (konservative Swap-Nutzung)
echo "vm.swappiness=5" | sudo tee -a /etc/sysctl.conf

# Desktop (balanced)
echo "vm.swappiness=60" | sudo tee -a /etc/sysctl.conf

# Gaming/Performance (minimale Swap-Nutzung)
echo "vm.swappiness=1" | sudo tee -a /etc/sysctl.conf

# Cache-Druck reduzieren (weniger aggressive Cache-Freigabe)
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf

Mehrere Swap-Bereiche für Performance:

1
2
3
4
5
6
7
8
9
10
11
# Mehrere Swap-Bereiche mit gleicher Priorität (Parallelnutzung)
sudo swapon -p 5 /swapfile1
sudo swapon -p 5 /swapfile2

# In /etc/fstab für automatische Aktivierung:
/swapfile1 none swap sw,pri=5 0 0
/swapfile2 none swap sw,pri=5 0 0

# Verschiedene Prioritäten (höhere Zahlen = höhere Priorität)
/dev/nvme0n1p2 none swap sw,pri=10 0 0
/swapfile none swap sw,pri=5 0 0

Häufige Probleme und Lösungen

System ist langsam (zu viel Swap-Nutzung):

1
2
3
4
5
6
7
# Swap-Nutzung prüfen
free -h

# Swappiness reduzieren
sudo sysctl vm.swappiness=10

# Mehr RAM hinzufügen oder Anwendungen schließen

Hibernation funktioniert nicht:

1
2
3
4
5
6
7
8
9
10
# Swap-Größe muss >= RAM sein
# UUID der Swap-Partition ermitteln
sudo blkid | grep swap

# In GRUB konfigurieren (/etc/default/grub)
sudo nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=12345678-1234-1234-1234-123456789abc"

# GRUB aktualisieren
sudo update-grub

Swap wird nicht automatisch aktiviert:

1
2
3
4
5
# /etc/fstab prüfen
cat /etc/fstab | grep swap

# Syntax überprüfen und korrigieren
sudo nano /etc/fstab

Moderne Swap-Alternativen

zswap (Komprimierter RAM-Cache):

1
2
3
4
5
6
# zswap aktivieren
echo 1 | sudo tee /sys/module/zswap/parameters/enabled

# Dauerhaft aktivieren (Kernel-Parameter)
# In /etc/default/grub:
# GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=1"

SSD-Optimierungen:

1
2
3
4
5
6
# SSD-freundliche Einstellungen
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf

# Weniger häufige Swap-Zugriffe
echo "vm.dirty_ratio=15" | sudo tee -a /etc/sysctl.conf

Tipps

  • Verwende Swap-Dateien für Flexibilität, Partitionen für maximale Performance
  • Bei SSDs: Swap ist weniger problematisch als bei HDDs, aber optimiere trotzdem
  • Für Server: Swappiness auf 5-10 setzen (nicht 1, um OOM-Kills zu vermeiden)
  • Für Desktops mit viel RAM: Swap hauptsächlich für Hibernation und Notfälle
  • Überwache Swap-Nutzung regelmäßig mit htop, free -h oder iotop
  • Bei konstanter Swap-Nutzung: Mehr RAM installieren oder Anwendungen optimieren
  • Moderne Alternative: zswap für komprimierten RAM-Cache nutzen
  • Verwende dd statt fallocate für bessere Kompatibilität

Fazit

Swap ist ein essentieller Bestandteil der Linux-Speicherverwaltung, der Systemstabilität gewährleistet und zusätzliche Funktionen wie Hibernation ermöglicht. Die richtige Konfiguration von Swap-Größe und Swappiness hängt vom Anwendungsfall ab. Während moderne Systeme mit viel RAM weniger auf Swap angewiesen sind, bleibt es ein wichtiges Sicherheitsnetz für kritische Situationen.